最近在公司接触到了微信api的接口调取,之前在大学是时候也有学习过,但时间久远已经忘记,特意写此文章记录一下。
公众号配置
由于涉及到公司内部原因,请自行查询资料(这里就不放图了),具体请查看官方文档
developers.weixin.qq.com/community/d…
主要是要拿到APPID和APPSECRET
公众号验证
官方提供步骤如下
通过发送请求并且带上相关参数来进行用户授权和验证
open.weixin.qq.com/connect/oau…
参数说明
| 标题 | |
|---|---|
| appid | 微信公众号开发的appid |
| redirect_uri | 微信打开验证通过后跳转的公网地址 |
| scope | 应用授权作用域,snsapi_base (不弹出授权页面,直接跳转,只能获取用户openid),snsapi_userinfo (弹出授权页面,可通过 openid 拿到昵称、性别、所在地。并且, 即使在未关注的情况下,只要用户授权,也能获取其信息 ) |
具体请查看上述链接
关于scope参数的说明,官方说明如下:
关于网页授权的两种 scope 的区别说明
- 以snsapi_base为 scope 发起的网页授权,是用来获取进入页面的用户的 openid 的,并且是静默授权并自动跳转到回调页的。用户感知的就是直接进入了回调页(往往是业务页面)
- 以snsapi_userinfo为 scope 发起的网页授权,是用来获取用户的基本信息的。但这种授权需要用户手动同意,并且由于用户同意过,所以无须关注,就可在授权后获取该用户的基本信息。
- 用户管理类接口中的“获取用户基本信息接口”,是在用户和公众号产生消息交互或关注后事件推送后,才能根据用户 OpenID 来获取用户基本信息。这个接口,包括其他微信接口,都是需要该用户(即openid)关注了公众号后,才能调用成功的。
准备好后我们使用springboot进行调试,代码如下
域名请自行修改
@Test
void contextLoads() {
//验证,拿到请求的codeurl
String codeurl = WechatWebAuthUtil.getCode(Constants.APPID,"https://xxxxxx.com","snsapi_userinfo");
log.info(codeurl);
String resultCode = restTemplate.getForObject(codeurl,String.class);
log.info(resultCode);
}
控制台输出如下
结果发现返回啦错误信息,这是因为微信过于封闭,必须使用它的专门调试工具才能进行调试,然后笔者换了一个工具进行调试,结果返回如下图
此次可以看出返回结果带有code字段,这个是用于获取用户的openid等等信息的。
至于为什么笔者报403,是因为相关页面没配置到公司的公网服务器上,只是把url跳转到服务器,这个不影响调取接口信息。
用户信息接口调取
然后根据官网提供的信息,下一步我们进行access_token,然后吧access_token这个参数带上再请求到微信的用户信息拉去接口即可获取到用户信息。代码如下:
@Test
void contextLoads() {
//拿到要获取的accessTokenurl
String Access_tokenUrl = WechatWebAuthUtil.getAccessToken("这里是上面使用微信开发者工具拿到的code");
log.info(Access_tokenUrl);
//发送请求,获得返回结果
JSONObject jsonObject = JSON.parseObject(restTemplate.getForObject(Access_tokenUrl, String.class));
String str = restTemplate.getForObject(
String.format("https://api.weixin.qq.com/sns/userinfo?access_token=%s&openid=%s&lang=zh_CN",
//抽取json字段
jsonObject.getString("access_token"),
//抽取openid
jsonObject.getString("openid")
),String.class);
log.info(str);
}
然后输出结果如下
然后就可以对用户进行入库操作了。
微信用户接口调取就先告一段落了,以后会不定期更新。如果笔者有什么错误请在评论区指出,我们共同进步,谢谢。