「这是我参与11月更文挑战的第14天,活动详情查看:2021最后一次更文挑战」。
前言
目前很多网站都有扫码登录,通常会设有微信公众号,当我们想要访问网站某些资源的时候就需要扫码关注公众号,然后自动注册,登录。
准备工作
- 一个外网可访问的地址(没有也没关系,后面会介绍怎么解决)
- appID,appsecret
1. 获取appID和appsecret
学习阶段,我们直接使用微信测试号,后面直接切换未自己认证的就行
扫码登录后,我们就可以得到测试号的appID和appsecret
2. 接口配置信息
这里比较坑,这里的地址一定要填外网可以访问的地址。这里的逻辑是微信平台会发送一个验证请求到我们配置的地址,我们的服务做出正确的响应,表示之间关联成功,后续一些关注,扫码触发的请求才会发送到我们的服务器。
我们不可能为了学习一下去买一台服务器,并且我们在本地开发,有服务器我们调试也不方便。这里我们可以使用ngrok,通过内网穿透生成一个代理地址,这个地址外网是可以访问的,但是有效期只有两个小时,毕竟白嫖的,麻烦一下
2
个小时手动修改一下。
ngrok下载 下载解压后,会得到一个ngrok.exe
可执行文件,点击运行, 输入需要代理的端口号,一般为我们后台的服务端口
ngrok http 9000
复制代码
这样我们就得到了一个可以直接访问到我们服务的外网地址
填写好配置信息,token自己随便填一个就行
3. 服务端验证接口
正如我上面配置的地址,当我点击保存的时候,微信服务端会发一个校验的请求到代理地址,然后转发到我本地,也就是
http://127.0.0.1:9000/wechat
,接下来我们只需要接受请求,正确响应就可以了。
这里不赘述了,直接上代码
@ApiOperation(value = "验证微信服务器")
@GetMapping("/wechat")
public String wechatServer(@RequestParam(name = "signature") String signature,
@RequestParam(name = "timestamp") String timestamp,
@RequestParam(name = "nonce") String nonce,
@RequestParam(name = "echostr") String echostr) {
String token = "填配置里的token";
String[] arr = new String[]{token, timestamp, nonce};
Arrays.sort(arr);
String s = SecureUtil.sha1(arr[0] + arr[1] + arr[2]);
return signature.equals(s) ? echostr : "";
}
复制代码
总结
到这里我们的微信平台和本地服务已经连接成功了,后序只要我们根据需求,监听事件,扩展接口,完成业务就可以了