公司业务需要获取用户观众公众号状态,即确定进入系统的用户是否关注了该公众号,根据这个结果进行相应的动作。

获取用户信息中有subscribe这个字段,其中==1表示关注了该公众号,==0表示没有关注该公众号。

通过调研,看文档

点击打开链接

点击打开链接2

调研,只有在微信的unionid机制下才能获取这个值,而在sns(我称之为)的模式下只能获得用户头像、昵称信息等信息

unionid机制下的信息:

{
   "subscribe": 1, 
   "openid": "o6_bmjrPTlm6_2sgVt7hMZOPfL2M", 
   "nickname": "Band", 
   "sex": 1, 
   "language": "zh_CN", 
   "city": "广州", 
   "province": "广东", 
   "country": "中国", 
   "headimgurl":  "https://wx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4
eMsv84eavHiaiceqxibJxCfHe/0",
  "subscribe_time": 1382694957,
  "unionid": " o6_bmasdasdsad6_2sgVt7hMZOPfL"
  "remark": "",
  "groupid": 0,
  "tagid_list":[128,2]
}
sns机制下的信息:

{
   "openid":" OPENID",
   " nickname": NICKNAME,
   "sex":"1",
   "province":"PROVINCE"
   "city":"CITY",
   "country":"COUNTRY",
    "headimgurl":    "https://wx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/46", 
	"privilege":[
	"PRIVILEGE1"
	"PRIVILEGE2"
    ],
    "unionid": "o6_bmasdasdsad6_2sgVt7hMZOPfL"
}
通过上文给出的超链可以看出两种方式的请求url略有不一样,参数到是没有什么差别。

下文给出sns这种方式java代码实现:

HttpUriRequest httpsUriRequest = RequestBuilder.get()
				.setUri("https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code")
				.build();