1. 使用背景
如今开发业务系统,已不是一个单独的系统。往往需要同多个不同系统相互调用,甚至有时还需要跟微信,钉钉,飞书这样平台对接。目前我开发的部分业务系统,已经完成微信公众平台对接。作为知识总结,接下来,我们探讨下对接微信公众平台的一小部分功能,微信扫码登录。其中的关键点是获取openid。我仔细查找了微信提供的开发文档,主要有以下三个方式可实现。
通过微信公众平台生成带参数的二维通过微信公众平台微信网页授权登录通过微信开发平台微信登录功能
2. 开发环境搭建
2.1 内网穿透
微信所有的接口访问,都要求使用域名。但多数开发者是没有域名,给很多开发者测试带来了麻烦。不过有以下两种方案可以尝试:
使用公司域名,让公司管理员配置一个子域名指向你公司公网的一个ip的80端口。然后通过Nginx或者通过nat命令,将改域名定位到您的开发环境使用内网穿透工具,目前市面有很多都可以使用免费的隧道。不过就是不稳定,不支持指定固定子域名或者已经被微信限制访问。经过我大量收集资料,发现钉钉开发平台提供的内网穿透工具,比较不错。用阿里的东西来对接微信东西,想想都为微信感到耻辱。你微信不为开发者提供便利,就让对手来实现。
那钉钉的内网穿透工具具体怎么使用用的呢?
首先使用git下载钉钉内网穿透工具,下载好后找到windows_64目录,在这里新建一个start.bat文件,内容为
ding -config=ding.cfg -subdomain=pro 8080
其中-subdomain是用来生成子域名8080表示隐射本地8080端口
双击start.bat文件,最终启动成功界面如下
经过我测试,这个相当稳定,并且可以指定静态子域名。简直就是业界良心
2.2 公众号测试环境
访问公众平台测试账号系统,可以通过微信登录,可快速得到一个测试账号。然后我们需要以下两个配置
接口配置信息
在点击提交按钮时,微信服务器会验证我们配置的这个URL是否有效。这个URL有两个用途
通过签名验证地址是否有效接收微信推送的信息,比如用户扫码后通知
签名生成逻辑是用配置的token结合微信回传的timestamp,nonce,通过字符串数组排序形成新的字符串,做SHA签名,再将签名后的二进制数组转换成十六进制字符串。最终的内容就是具体的签名信息。