公众号开发之-node响应微信token验证

微信公众号开发对新手实在太不友好了。官方文档给的又比较模糊,网上的文章也说的不太清楚,对与我们这种小白,很烦躁,中间遇到无数的坑,在此记录一下,免得以后忘记(ps:本人完全是一个新手小白,第一次接触微信公众号,如有错误,请各位大神指正)

准备工作
(本文要求对node和npm有一定了解,如果不会请自行百度)
公众号有订阅号和服务号之分,订阅号功能比较少,在此不做赘述,有兴趣可以去看官方文档,服务号申请认证比较麻烦,我们只需申请测试号即可,测试号几乎拥有所有的权限,扫描二维码关注自己的测试号
第一步:
配置接口信息,要求必须有自己的服务器资源也就是外网可以访问的在这里插入图片描述

这里我已经验证过,如果初次登陆,url和token都为空,而要想拥有一个外网可以访问的网址,我们只需一个内网穿透工具即可,这里我使用的NATAPP,注册登录以后,点击购买隧道,选择免费隧道即可在这里插入图片描述
官网有NATAPP1分钟快速新手图文教程,介绍的很详细,根据指示下载安装即可,下载完成以后会有两个文件,注意请把两个文件放在同一目录在这里插入图片描述
此时点击 我的隧道>authtoken下的显示,将config文件中的authtoken改为你自己免费隧道的authtoken,
点击 我的隧道>配置,可以对你的隧道进行配置,IP即为本机ip127.0.0.1,不用修改,注意微信配置url必须以http://或https://开头,分别支持80端口和443端口,内网穿透为http协议,所以这里端口号填80(只能80,不可以乱改)
双击natapp即可运行。
第二步:
配置node文件,首先你需要安装node,请百度自行搜索如何安装,创建一个node项目,我这里用了express框架进行开发,(把你内网穿透获得的url + 你自己定义的路径)填入微信接口配置中,我这里的路径定义为 “wx/token” ,如开头第一张图片所示

node端代码

const express = require('express'); // npm install express --save
const app = express();
app.get('/wx/token',wechatAuth); // 对应填写服务器配置内的 URL
app.listen(80); // 监听80端口

此时,当你点击提交的时候

开发者提交信息后,微信服务器将发送GET请求到填写的服务器地址URL上,GET请求携带参数如下所示:
参数 描述
signature 微信加密签名,signature结合了开发者填写的token参数和请求中的 timestamp参数、nonce参数。
timestamp 时间戳
nonce 随机数
echostr 随机字符串
开发者通过检验signature对请求进行校验(下面有校验方式)。若确认此次GET请求来自微信服务器,请原样返回echostr参数内容,则接入生效,成为开发者成功,否则接入失败。加密/校验流程如下:
将token、timestamp、nonce三个参数进行字典序排序 2)将三个参数字符串拼接成一个字符串进行sha1加密 3)开发者获得加密后的字符串可与signature对比,标识该请求来源于微信

node中有专门的加密模块crypto,引入使用即可
完整代码

const express = require('express'); // npm install express --save
const app = express();
const crypto = require('crypto'); // node内置的加密模块
let token = 1357// 对应填微信接口配置信息内的 Token,可自定义
//进行sha1加密
function sha1(str) {
  let shasum = crypto.createHash("sha1");
  return shasum.update(str,'utf-8').digest("hex");
}
function wechatAuth(req, res) {
  let signature = req.query.signature;
  let echostr = req.query.echostr;
  let timestamp = req.query.timestamp;
  let nonce = req.query.nonce;
  let reqArray = [nonce, timestamp, token];
  reqArray.sort(); //对数组进行字典排序
  let sortStr = reqArray.join(''); //连接数组
  let sha1Str = sha1(sortStr.toString().replace(/,/g,""));
  if (signature === sha1Str) {
    res.end(echostr);
  } else {
    res.end("false");
    console.log("授权失败!");
  }
}
app.get('/wx/token',wechatAuth); // 对应填写服务器配置内的 URL
app.listen(80); // 监听80端口

将此代码完整复制,再启动node端,应该就会配置成功,注意,node端代码有任何改变都需要重启才会生效,如果配置失败可以尝试多提交,重启几次,可能会有延迟

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值