微信公众号开发对新手实在太不友好了。官方文档给的又比较模糊,网上的文章也说的不太清楚,对与我们这种小白,很烦躁,中间遇到无数的坑,在此记录一下,免得以后忘记(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. 微信公众号开发 授权回调域名 微信授权验证

    问题: 配置了微信后台的授权回调域名还是没有通过微信验证,即出现 微信验证步骤: 1.通过一个链接A(www.xxx.com?str=xxxxxxxx)进入微信验证 2.因为链接不存在微信的code, ...

  2. 微信公众号开发系列-玩转微信开发-目录汇总

    引言 最遗憾的不是把理想丢在路上,而是理想从未上路. 每一个将想法变成现实的人,都值得称赞和学习.致正在奔跑的您! 在现在这个无处不在的互联网背景下,各种应用已不再仅仅局限于网页或桌面应用了,IOS. ...

  3. 【微信公众号开发】八、微信JS发起支付

    重要声明:本文章仅仅代表了作者个人对此观点的理解和表述.读者请查阅时持自己的意见进行讨论. 目录 本系列博文还包含了下面的博客: [微信公众号开发]一.运作及配置流程简介 [微信公众号开发]二.解析微 ...

  4. 【微信公众号开发】六、微信JS的使用

    文章详情:[微信公众号开发]六.微信JS的使用 文章链接:https://www.microanswer.cn/blog/16

  5. 微信公众号开发总结(Node.js + express + winston)

    关于订阅号.服务号.企业号 官方定位 订阅号:主要偏于为用户传达资讯(类似报纸杂志),认证后每天可以群发一条消息,可达到宣传效果,构建与读者之间更好的沟通和管理模式. 服务号:主要偏于服务交互(类似银 ...

  6. 微信公众号开发小记(二)--服务器验证

    这篇是微信公众号开发小记的第二篇,承接上一篇,此次将完成如下主要功能 对接微信服务器和自己的服务器 需要的"材料" 到这里需要梳理一下都需要什么东西,以便在整个编码的过程中方便我们 ...

  7. 微信公众号开发之实现自定义微信公众号菜单和跳转第三方网页

    自定义菜单创建接口: http请求方式:POST(请使用https协议) https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCE ...

  8. 微信公众号开发用书php,php微信公众号开发(3)php实现简单微信文本通讯

    <PHP实战:PHP微信公众号开发(3)PHP实现简单微信文本通讯>要点: 本文介绍了PHP实战:PHP微信公众号开发(3)PHP实现简单微信文本通讯,希望对您有用.如果有疑问,可以联系我 ...

  9. url 微信公众号开发 配置失效_微信公众号开发之授权登录

    一.UnionId和openId 微信登录最重要的两个返回信息,一个是UnionId,一个是OpenId.两者之间有着必然的联系. UnionID机制的作用说明:如果开发者拥有多个移动应用.网站应用和 ...

最新文章

  1. Java-NIO(九):管道 (Pipe)
  2. 【坑爹微信】微信支付相关问题解决
  3. 索引超出矩阵维度_搜索引擎技术之倒排索引原理详解,及案例分析
  4. 苹果CMS小俊XG013主题模板
  5. aes解密算法 java_AES算法实现Java和JS互通加解密
  6. hdu 动态规划46题
  7. html代码表白_作为一个程序员,表白都要玩出花样
  8. c++MFC 截取字符串
  9. python求角度_python根据坐标点的坐标计算角度
  10. 网易评论盖楼的数据结构
  11. 网站分析实战总结(一)
  12. luci网页shell_修改Luci界面
  13. Linux笔记------关闭系统漏洞补丁(spectre meltdown补丁)
  14. 《RAFT-Stereo:Multilevel Recurrent Field Transforms for Stereo Matching》论文笔记
  15. 时态的重建--适合理工直男的钟平老师逻辑英语学习笔记
  16. Linux命令curl详解(一)
  17. 09丨数据采集:如何用八爪鱼采集微博上的“DG”评论
  18. mktime 的选择
  19. asm 编写 wasm 对比原生性能
  20. 【游戏手柄】如何在PC上使用非XBOX手柄玩游戏

热门文章

  1. CF 1742C 题解 P8557 炼金术(Alchemy) 题解
  2. 微波雷达生命体征检测,人体呼吸心跳感应雷达模块,雷达传感器技术应用
  3. andrid 开源UI控件
  4. Android开机各个阶段(Android R)
  5. 前端画图之iphoneSE主屏
  6. 2022最新求职指南(全面易懂)
  7. 解决org.springframework.beans.factory.BeanCreationException Error creating bean with name‘xxx’
  8. Ubuntu 12.04 改造指南
  9. sap进阶系列(38):第一篇:财务总览之萨班斯-奥克斯莱法案和信息系统
  10. Cocos Creator 去除或更改默认启动页(Web端)