前言:
最近项目需要做微信公众号的开发,是针对订阅号进行处理的,现需要在订阅号中嵌入的网页中获取进入用户的微信基本信息,查阅了微信官方api感觉云里雾里的,在多次尝试成功之后,分享一下【吐槽微信官方api真的是冗长且麻烦,此处用反向思路思考如何解决】:
①首先根据获取用户信息接口的要求,需要获取access_token和openid。
https://api.weixin.qq.com/cgi-bin/user/info?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN
②要获取以上俩参数,经过查阅官方文档,需通过微信网页授权来获取。以下就是以微信测试公众号为例来介绍如何获得。
疑问:手上有两个同样都是订阅号,可是一个有微信网页授权的接口权限,一个没有微信网页授权的接口权限,还得后续继续分析一下出现不同的因素????????
微信订阅号开发-接口配置【以测试号为例】
1、在此处填写自己服务器的接口地址
提交之后微信后台发送请求到该接口进行验证,官方文档说明:微信服务器将发送GET请求到填写的服务器地址URL上,GET请求携带参数如下表所示:
参数 | 描述 |
---|---|
signature | 微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。 |
timestamp | 时间戳 |
nonce | 随机数 |
echostr | 随机字符串 |
若确认此次GET请求来自微信服务器,请原样返回echostr参数内容,则接入生效,成为开发者成功,否则接入失败。
2、java服务端接受处理
@GetMapping("/sayHello")
public String login(String signature,String timestamp,String nonce,String echostr) {
System.out.println(signature);
System.out.println(timestamp);
System.out.println(nonce);
System.out.println(echostr);
return echostr;
}
测试阶段,所以直接返回微信要求的值。
注:后续用户在微信公众号的发送的消息都回触发该消息的方法。
以上似乎与获取微信用户基本信息的流程没啥必然关系。。。。。。。。。。。官网说法只是用于验证开发者服务器,是否该处配置的域名会作为其他地方回调的限制,还待进一步论证。
3、微信网页获取用户信息:
第一步:用户同意授权,获取code
https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect
其中,redirect_uri是关键参数,该参数是网页用户授权之后的回调页面,其返回值则是code,后续需要用该code换取用的openid,然后在获取用户信息。而配置该参数的则是在【微信公众号平台】:开发-接口权限--网页服务--网页授权界面的修改。如下图:
同样的也可在:公众号设置--功能设置--网页授权域名中进行配置。
下图为微信测试账号系统中的网页授权调整界面,正式版设置的则需要在公众号设置--功能设置--网页授权域名中进行配置进行配置。
如此,授权之后就可以获取到该用户的code,
注意:必须填写域名,即不需要添加http等信息,否则会报10003错误,rediret_ui与和后台配置不符。
第二步:通过code换取网页授权access_token
https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code
利用该接口则可以获取到当前用户的openid,以及接口调用的access_token凭证。
第三步:拉取用户信息(需scope为 snsapi_userinfo)
https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN
此时使用该接口就可以获得微信用的基本信息。