10/17 发表评论

俗话说,万事开头难。对于刚刚接触微信公众号开发的小白来说,进行服务器验证往往难住了一大片开发者。在这里记录一下我的验证方法,希望能帮助到大家!

根据微信公众平台的接入指南,先把准备工作做完:有自己的服务器,且已配置域名可以访问,我是在 nodejs 环境下进行开发的,使用的 express 框架,所以你还要安装好 nodejs 环境和 express 框架;

接下来我们看具体怎么操作:

先看一下目录结构:

目录结构.png

  1. 创建 config 配置文件

在项目跟目录创建 config 目录,在该目录下新建 config.json 文件:

{
    "wechat": {
        "appID": "wxab83a07fab75f836",
        "appSecret": "8e42ec4e0b959f5e228a77ccb0f9e45d",
        "token": "weixin"
    }
}
  1. 封装签名认证模块

在项目根目录新建 common 目录,在该目录下新建 utils.js 文件,根据 接入指南 需要对 token、timestamp、nonce 三个参数字典序排序拼接成的字符串进行 sha1 加密,所以我们需要先安装 sha1 依赖模块:

npm install sha1 --save

然后在 utils.js 文件中引入:

let utils = {}
const sha1 = require('sha1')

// 微信开发者服务器验证模块中间件
utils.sign = function(config) {
    return function(req, res, next) {
        config = config || {}

        let query = req.query,
            token = config.wechat.token, // 从 config 配置文件中获取 token
            signature = query.signature, // 微信加密签名
            nonce = query.nonce, // 随机数
            timestamp = query.timestamp, // 时间戳
            echostr = query.echostr // 随机字符串

        /**
         * 1)将 token、timestamp、nonce 三个参数进行字典序排序
         * 2)将三个参数字符串拼接成一个字符串进行 sha1 加密
         * 3)开发者获得加密后的字符串可与 signature 对比,标识该请求来源于微信
         */
        let ttnStr = [token, timestamp, nonce].sort().join(''),
            shaStr = sha1(ttnStr)

        if(req.method === 'GET') {

            if(shaStr === signature) {
                res.send(echostr)
            }else{
                res.send('This GET request is not from WeChat server.')
            }
        } else if(req.method == 'POST'){
            if(shaStr != signature) {
                return
            }

            next()
        }
    }
}

module.exports = utils
  1. 引入服务器验证模块中间件
    在 app.js 中引入 utils.js 和 config.json,然后使用验证模块中间件:
const express = require('express')
// 引入 utils.js 和 config.json
const config = require('./config/config.json')
const utils = require('./common/utils')

const app = express()

app.use(express.query())

// 定义路由并使用微信开发者服务器验证模块中间件
app.use('/', utils.sign(config))


app.listen(3000)
  1. 运行 node 服务,然后在公众号后台进行服务器的配置验证;

为了方便调试,可以申请微信公众平台测试号,使用测试号进行接口配置,需要注意的是使用测试号进行调试的时候记得将 config.json 文件中的 appID 和 appSecret 修改为测试号的信息,token 也要和测试号的接口配置信息一栏中的 token 保持一致。

发表评论

回到顶端