微信公众平台接口配置信息详解---Nodejs版

首先,要说明一点的是, 虽然标题有说是: nodejs版, 那么会有其他的版本配置方法详情吗?

答案是没有, 不过在微信公众平台上有详细说明了PHP为后台的配置版本, 如果有兴趣的童鞋可以过去看一下, 这里就不做赘述了

那么本篇博客主要写哪些呢, 博客的受众有哪些呢?

本篇博客主要是针对需要进行微信公众平台进行开发的个人开发者, 因为在个人申请公众号的过程中存在诸多限制, 而微信则比较体贴地提供了针对个人开发者的公众平台测试帐号, 这样就可以无需申请公众帐号就能在测试帐号中体验并测试微信公众平台所有高级接口了.

而根据微信方的要求, 个人开发者需要有自己的服务器, 并且对微信的加密token能够正确地进行返回数据, 进行一番验证之后才能够享受微信所提供的开发者服务

那么问题来了, 我没有服务器怎么办啊?

哎不对, 我也不会正确的接收token和返回token啊! 怎么搞~

这里根据实际情况, 因为即使你有服务器, 每次还要登陆服务器, 势必会造成很大的麻烦, 那么我们一般会使用到ngrok的内网转发服务

想必到这里很多人不知道ngrok是什么, 这里从百度百科扒一个词条过来解释一下

ngrok 是一个反向代理,通过在公共的端点和本地运行的 Web 服务器之间建立一个安全的通道。ngrok 可捕获和分析所有通道上的流量,便于后期分析和重放

讲得那么复杂, 简单总结一下, 就是使用这玩意儿就可以将你的本地开启的服务器当做一个外网服务器来使用, 也就是说从微信发过来的验证token, 是可以直接发送到我们的电脑上, 从而成功校验token, 美滋滋~

ngrok的使用及配置

ngrok本身是源自美国的公司提供的一项反向代理的服务, 使用它就可以很方便地进行反向代理了.

安装

官网下载地址下载, 解压

将可执行文件ngrok移到任意文件夹内

如果需要在命令行直接执行, 则需要进行配置全局变量, 这个有些复杂, 就不展开讲了, 如果有不想每次都要找到这个文件双击打开, 而是直接使用CMD的同学, 可以试一下(不过我觉得每次双击打开问价没啥不好的啊)

注册授权

现在其实是可以进行正常捕获到请求了, 但是现在有个问题就是, 这一切是不是来的太简单了…

没错, 还差一步, 就是要官网的一个token

sign up for an account in ngrok 获取ngrok的授权码,

进行本机认证 Install your authtoken

1
ngrok authtoken <YOUR_AUTHTOKEN>

设置外网的访问密码(选做)

1
2
// username 用户名 password密码 8080相关的端口
ngrok http -auth="username:password" 8080

配置妥当

那么现在我们可以输入以下命令, 启动ngrok了

1
ngrok http 8080

当然, 这个端口可以自己设置, 开心就好

现在我们到浏览器中输入

1
localhost:4040

即可看到ngrok的监控页面, 上面有为你分配的http和https两个网址,把网址复制到微信公众平台的测试账号申请的接口配置信息中

离成功还差半步

那么, 我们成功设置了ngrok了, 现在要准备对接微信的接口了, 微信的access_token每次传输的内容有下面几个:

参数 描述
signature 微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。
timestamp 时间戳
nonce 随机数
echostr 随机字符串

开发者通过检验signature对请求进行校验(下面有校验方式)。若确认此次GET请求来自微信服务器,请原样返回echostr参数内容,则接入生效,成为开发者成功,否则接入失败。加密/校验流程如下:

-1)将token、timestamp、nonce三个参数进行字典序排序

-2)将三个参数字符串拼接成一个字符串进行sha1加密

-3)开发者获得加密后的字符串可与signature对比,标识该请求来源于微信

PHP实例代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
private function checkSignature () {
_GET["signature"];
_GET["timestamp"];
_GET["nonce"];

tmpArr = array(timestamp, $nonce);
sort($tmpArr, SORT_STRING);
$tmpStr = implode( $tmpArr );
$tmpStr = sha1( $tmpStr );

if( signature ){
return true;
} else {
return false;
}
}

以上为微信官网的PHP实例代码, 作为一个会nodejs的小学森, 怎么能不用nodejs呢, 看下nodejs的写法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
const Koa = require('koa')
const sha1 = require('sha1')

var config = {
wechat: {
appId: '***',
appSecret: '***',
token: '***'
}
}

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)
console.log(sha)
if (sha === signature) {
this.body = echostr
} else {
this.body = 'wrong'
}
})

app.listen(8090)

console.log('listening 8090')

这里用到了koa框架和sha1加密组件, 喜欢其他的方式的童鞋可以使用其他的开发方法, 总体来说都是一样的

文章目录
  1. 1. ngrok的使用及配置
    1. 1.1. 安装
    2. 1.2. 注册授权
    3. 1.3. 进行本机认证 Install your authtoken
    4. 1.4. 设置外网的访问密码(选做)
    5. 1.5. 配置妥当
  2. 2. 离成功还差半步
  3. 3. PHP实例代码
|