4 配置接入验证微信公众号--开发微信的第一道坎儿

时间:2024-03-06 10:15:15

第一步 申请测试号

  要开发微信公众号,首先我们得有一个公众号,这里我们使用官方给开发者提供的接口测试号。

  打开微信公众平台官网: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:随机字符串。

 注意:因为官方文档是处于更新状态的,所以后面关于微信公众号的知识点,可能跟最新的文档有一定的差异,所以开发的时候还是要以最新的文档为准。