第一步 申请测试号
要开发微信公众号,首先我们得有一个公众号,这里我们使用官方给开发者提供的接口测试号。
打开微信公众平台官网:https://mp.weixin.qq.com/,然后进入微信公众平台技术文档:https://mp.weixin.qq.com/wiki,在开始开发菜单里,有接口测试号申请:
然后用自己的微信扫一下二维码:
扫描完成点击登录后,我们会进入一个测试号管理的页面,说明,我们已经成功申请了一个测试公众号。
第二步 配置接入验证公众号
验证公众号过程:
验证过程示例图说明:
1 将token、timestamp(时间戳)、nonce(随机数)三个参数进行字典排序①;
2 将三个参数数字字符串拼接成一个字符串进行sha1加密②;
3 将加密后的字符串与signature③对比,如果相同,表示这个请求来源于微信,我们直接原样返回echostr④参数内容,接入验证就成功了。
下面我们来动手实践一下操作过程。
新建测试项目文件目录wechat,通过终端命令进入项目文件 $ cd Desktop/wechat/
然后,使用npm安装koa和sha1模块 $ npm install koa sha1,安装完成后,使用编辑器进入wechat目录,新建app.js文件,并写入以下代码:
\'use strict\'; // 引入模块 var Koa = require(\'koa\'); var sha1 = require(\'sha1\'); // 声明对象字面量config 用于存储配置信息 var config = { wechat:{ appID: \'wx044125d0a173dd15\', appSecret: \'21295f049b49fe324d7302186c294fe7\', token: \'beijingjiangweiwechatlearntokenvalue\' } } // 实例化Koa的web服务器 var app = new Koa(); app.use(function*(next) { console.log(this.query); var token = config.wechat.token; var signature = this.query.signature; var nonce = this.query.nonce; var timestamp = this.query.timestamp; var echostr = this.query.echostr; // 进行字典排序 var str = [token, timestamp, nonce].sort().join(\'\'); // 进行加密 var sha = sha1(str); // 判断加密后的值是否等于签名值 if (sha === signature) { this.body = echostr + \'\'; } else { this.body = \'wrong\'; } }); //监听3100端口 app.listen(3100); console.log(\'listening:3100\');
app.js即为项目启动文件,现在,我们使用终端,用node启动app.js:
然后,使用启动魔法隧道(魔法隧道使用方法参看上一节)$ ./mofasuidao tokenvalue
进入之前申请微信测试号的管理页面,填入url和token,url即我上图中内网映射的外网地址,token先随便填一下:
填好后点击提交,如果成功,页面上方会提示我们配置成功。
如果配置失败,可以从映射内网端口未成功、端口设置错误、网络问题、加密算法问题,参数顺序问题、验证地址是否与实际不符等方法逐一排除。
参考资料:
① 字典排序:是一种对于随机变量形成序列的排序方法。
② sha1:安全哈希算法,主要适用于数字签名标准里面定义的数字签名算法。
③ signature:签名。
④ echostr:随机字符串。
注意:因为官方文档是处于更新状态的,所以后面关于微信公众号的知识点,可能跟最新的文档有一定的差异,所以开发的时候还是要以最新的文档为准。