公众号开发之-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端代码有任何改变都需要重启才会生效,如果配置失败可以尝试多提交,重启几次,可能会有延迟
公众号开发之-node响应微信token验证相关推荐
- 微信公众号开发 授权回调域名 微信授权验证
问题: 配置了微信后台的授权回调域名还是没有通过微信验证,即出现 微信验证步骤: 1.通过一个链接A(www.xxx.com?str=xxxxxxxx)进入微信验证 2.因为链接不存在微信的code, ...
- 微信公众号开发系列-玩转微信开发-目录汇总
引言 最遗憾的不是把理想丢在路上,而是理想从未上路. 每一个将想法变成现实的人,都值得称赞和学习.致正在奔跑的您! 在现在这个无处不在的互联网背景下,各种应用已不再仅仅局限于网页或桌面应用了,IOS. ...
- 【微信公众号开发】八、微信JS发起支付
重要声明:本文章仅仅代表了作者个人对此观点的理解和表述.读者请查阅时持自己的意见进行讨论. 目录 本系列博文还包含了下面的博客: [微信公众号开发]一.运作及配置流程简介 [微信公众号开发]二.解析微 ...
- 【微信公众号开发】六、微信JS的使用
文章详情:[微信公众号开发]六.微信JS的使用 文章链接:https://www.microanswer.cn/blog/16
- 微信公众号开发总结(Node.js + express + winston)
关于订阅号.服务号.企业号 官方定位 订阅号:主要偏于为用户传达资讯(类似报纸杂志),认证后每天可以群发一条消息,可达到宣传效果,构建与读者之间更好的沟通和管理模式. 服务号:主要偏于服务交互(类似银 ...
- 微信公众号开发小记(二)--服务器验证
这篇是微信公众号开发小记的第二篇,承接上一篇,此次将完成如下主要功能 对接微信服务器和自己的服务器 需要的"材料" 到这里需要梳理一下都需要什么东西,以便在整个编码的过程中方便我们 ...
- 微信公众号开发之实现自定义微信公众号菜单和跳转第三方网页
自定义菜单创建接口: http请求方式:POST(请使用https协议) https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCE ...
- 微信公众号开发用书php,php微信公众号开发(3)php实现简单微信文本通讯
<PHP实战:PHP微信公众号开发(3)PHP实现简单微信文本通讯>要点: 本文介绍了PHP实战:PHP微信公众号开发(3)PHP实现简单微信文本通讯,希望对您有用.如果有疑问,可以联系我 ...
- url 微信公众号开发 配置失效_微信公众号开发之授权登录
一.UnionId和openId 微信登录最重要的两个返回信息,一个是UnionId,一个是OpenId.两者之间有着必然的联系. UnionID机制的作用说明:如果开发者拥有多个移动应用.网站应用和 ...
最新文章
- Java-NIO(九):管道 (Pipe)
- 【坑爹微信】微信支付相关问题解决
- 索引超出矩阵维度_搜索引擎技术之倒排索引原理详解,及案例分析
- 苹果CMS小俊XG013主题模板
- aes解密算法 java_AES算法实现Java和JS互通加解密
- hdu 动态规划46题
- html代码表白_作为一个程序员,表白都要玩出花样
- c++MFC 截取字符串
- python求角度_python根据坐标点的坐标计算角度
- 网易评论盖楼的数据结构
- 网站分析实战总结(一)
- luci网页shell_修改Luci界面
- Linux笔记------关闭系统漏洞补丁(spectre meltdown补丁)
- 《RAFT-Stereo:Multilevel Recurrent Field Transforms for Stereo Matching》论文笔记
- 时态的重建--适合理工直男的钟平老师逻辑英语学习笔记
- Linux命令curl详解(一)
- 09丨数据采集:如何用八爪鱼采集微博上的“DG”评论
- mktime 的选择
- asm 编写 wasm 对比原生性能
- 【游戏手柄】如何在PC上使用非XBOX手柄玩游戏
热门文章
- CF 1742C 题解 P8557 炼金术(Alchemy) 题解
- 微波雷达生命体征检测,人体呼吸心跳感应雷达模块,雷达传感器技术应用
- andrid 开源UI控件
- Android开机各个阶段(Android R)
- 前端画图之iphoneSE主屏
- 2022最新求职指南(全面易懂)
- 解决org.springframework.beans.factory.BeanCreationException Error creating bean with name‘xxx’
- Ubuntu 12.04 改造指南
- sap进阶系列(38):第一篇:财务总览之萨班斯-奥克斯莱法案和信息系统
- Cocos Creator 去除或更改默认启动页(Web端)