摘要:在进行微信公众平台开发之前,需要先接入微信公众平台。后续我也还会更新一些关于微信公众平台开发的文章,欢迎关注。
在进行微信公众平台开发之前,需要先接入微信公众平台。具体的步骤在 公众平台开发者文档-接入指南 已有详细介绍,文档中也提供了验证服务器的 PHP 示例代码。
本文主要提供了 Node.js 版本的验证代码,同时把步骤细化,让开发者更方便地了解整个接入过程,对初学者更友好。
TL;DR在微信公众平台后台的 开发者中心/填写服务器配置 页面,配置好 URL 和 Token 后,复制下面的代码,修改 Token,在服务器运行,然后再在页面上点击提交即可进行接入验证。
// checkSignature.js /** * 整个验证步骤分为三步 * 1. 将token、timestamp、nonce三个参数进行字典序排序 * 2. 将三个参数字符串拼接成一个字符串进行sha1加密 * 3. 开发者获得加密后的字符串可与signature对比,标识该请求来源于微信 */ const http = require("http"); const url = require("url"); const crypto = require("crypto"); // Web 服务器端口 const port = 3333; // 微信公众平台服务器配置中的 Token const token = "token"; /** * 对字符串进行sha1加密 * @param {string} str 需要加密的字符串 * @return {string} 加密后的字符串 */ function sha1(str) { const md5sum = crypto.createHash("sha1"); md5sum.update(str); const ciphertext = md5sum.digest("hex"); return ciphertext; } /** * 验证服务器的有效性 * @param {object} req http 请求 * @param {object} res http 响应 * @return {object} 验证结果 */ function checkSignature(req, res) { const query = url.parse(req.url, true).query; console.log("Request URL: ", req.url); const signature = query.signature; const timestamp = query.timestamp; const nonce = query.nonce; const echostr = query.echostr; console.log("timestamp: ", timestamp); console.log("nonce: ", nonce); console.log("signature: ", signature); // 将 token/timestamp/nonce 三个参数进行字典序排序 const tmpArr = [token, timestamp, nonce]; const tmpStr = sha1(tmpArr.sort().join("")); console.log("Sha1 String: ", tmpStr); // 验证排序并加密后的字符串与 signature 是否相等 if (tmpStr === signature) { // 原样返回echostr参数内容 res.end(echostr); console.log("Check Success"); } else { res.end("failed"); console.log("Check Failed"); } } const server = http.createServer(checkSignature) server.listen(port, () => { console.log(`Server is runnig ar port ${port}`); console.log("Start Checking..."); });填写服务器配置
登录进入微信公众平台后台管理页面
然后进入 基本配置 页面
再然后选择 修改配置,进入到 填写服务器配置 子页面
URL 为已经解析到你的服务器的域名,这里以 http://wechat.nodejh.com 这个二级域名为例
Token 随意填写即可
验证服务器地址的有效性验证服务器地址的有效性,需要在域名对应的服务器上运行一段验证程序。该程序会接收上个步骤中的域名所发送的 HTTP 请求。
官方文档提供了 PHP 的示例程序,下面是 Node.js 版本:
// checkSignature.js /** * 整个验证步骤分为三步 * 1. 将token、timestamp、nonce三个参数进行字典序排序 * 2. 将三个参数字符串拼接成一个字符串进行sha1加密 * 3. 开发者获得加密后的字符串可与signature对比,标识该请求来源于微信 */ const http = require("http"); const url = require("url"); const crypto = require("crypto"); // Web 服务器端口 const port = 3333; // 微信公众平台服务器配置中的 Token const token = "token"; /** * 对字符串进行sha1加密 * @param {string} str 需要加密的字符串 * @return {string} 加密后的字符串 */ function sha1(str) { const md5sum = crypto.createHash("sha1"); md5sum.update(str); const ciphertext = md5sum.digest("hex"); return ciphertext; } /** * 验证服务器的有效性 * @param {object} req http 请求 * @param {object} res http 响应 * @return {object} 验证结果 */ function checkSignature(req, res) { const query = url.parse(req.url, true).query; console.log("Request URL: ", req.url); const signature = query.signature; const timestamp = query.timestamp; const nonce = query.nonce; const echostr = query.echostr; console.log("timestamp: ", timestamp); console.log("nonce: ", nonce); console.log("signature: ", signature); // 将 token/timestamp/nonce 三个参数进行字典序排序 const tmpArr = [token, timestamp, nonce]; const tmpStr = sha1(tmpArr.sort().join("")); console.log("Sha1 String: ", tmpStr); // 验证排序并加密后的字符串与 signature 是否相等 if (tmpStr === signature) { // 原样返回echostr参数内容 res.end(echostr); console.log("Check Success"); } else { res.end("failed"); console.log("Check Failed"); } } const server = http.createServer(checkSignature) server.listen(port, () => { console.log(`Server is runnig ar port ${port}`); console.log("Start Checking..."); });
因为验证要使用 80(HTTP) 端口或 443(HTTPS) 端口,而 Node.js 一般不直接监听 80 端口,所以需要使用 Nginx 或其他程序将来自 http://wechat.nodejh.com 的请求转发到 Node.js 程序端口如上面的 3333。关于 Nginx 的配置,可以看我之前写的《使用 Ngnix 给 Node.js 应用做反向代理》。
这里也顺便给出该程序的 Nginx 配置
upstream nodejs { server 127.0.0.1:3333; keepalive 64; } server { listen 80; server_name wechat.nodejh.com; # 日志 access_log /var/log/nginx/wechat.nodejh.com.log; location / { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_set_header X-Nginx-Proxy true; proxy_set_header Connection ""; proxy_pass http://nodejs; } }
配置就绪之后,启动验证程序
$ node checkSignature.js Server is runnig ar port 3333 Start Checking...
这样,checkSignature.js 就会创建一个 3333 端口的服务。访问 http://wechat.nodejh.com 这个域名的时候,Nginx 就会将请求转发到 3333 端口。
在微信公众平台后台管理的服务器配置页面,点击提交按钮,就会填写的 URL (这里是 http://wechat.nodejh.com)发送一个 HTTP 请求,并带上 signature,timestamp,nonce,echostr 这四个参数。
启动 checkSignature.js 后,在服务器配置页面,点击提交按钮,就会开启验证。
服务器端出现下面的结果,就说明验证成功。验证成功后,微信公众平台后台会自动跳转到 基本配置 页面。
# 服务端响应... signature: 8fffb8f011d64819ec61105415114694bb03d392 Sha1 String: 8fffb8f011d64819ec61105415114694bb03d392 Check Success
然后就可以依据接口文档实现业务逻辑了。
后续我也还会更新一些关于微信公众平台开发的文章,欢迎关注。
Github Issue: https://github.com/nodejh/nodejh.github.io/issues/24
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/91252.html
摘要:内网穿透由于微信开发的端口必须是最近貌似增加了,所以一个内网穿透工具还是很有必要的。我个人使用的是浏览器微信调试工具。若确认此次请求来自微信服务器,请原样返回参数内容,则接入生效,成为开发者成功,否则接入失败。 首先github地址奉上:https://github.com/xiadd/shorthand 欢迎star?最近又拾起了微信开发,之前的公众号是用的flask进行开发的,所以...
摘要:打开中文网文档打开微信开发者文档三接入微信公众平台创建项目首先我们在电脑的任意磁盘上创建文件夹,命名随意,我这命名为随后在文件夹中创建两个文件一个是,另一个为。接入验证再次进入微信公众平台在左侧菜单点击基本配置,如图点击修改配置。 一、写在前面的话 Node.js是一个开放源代码、跨平台的JavaScript语言运行环境,采用Google开发的V8运行代码,使用事件驱动、非阻塞和异...
摘要:时间年月日星期五说明本文部分内容均来自慕课网。本套课程介绍微信公众号开发,主要涉及公众号介绍编辑模式介绍开发模式介绍等。慕课网是垂直的互联网技能免费学习网站。 时间:2017年08月11日星期五说明:本文部分内容均来自慕课网。@慕课网:http://www.imooc.com教学源码:https://github.com/zccodere/s...学习源码:https://github...
摘要:以下这些项目,你拿来学习学习练练手。当你每个步骤都能做到很优秀的时候,你应该考虑如何组合这四个步骤,使你的爬虫达到效率最高,也就是所谓的爬虫策略问题,爬虫策略学习不是一朝一夕的事情,建议多看看一些比较优秀的爬虫的设计方案,比如说。 (一)如何学习Python 学习Python大致可以分为以下几个阶段: 1.刚上手的时候肯定是先过一遍Python最基本的知识,比如说:变量、数据结构、语法...
摘要:百度微信小程序进入开发支持以及接入流程微信公众平台小程序首页接入小程序接入指南小程序开发开发文档小程序开发之简易教程小程序开发之文档小程序开发之官方教程小程序开发指南 百度微信小程序 showImg(https://segmentfault.com/img/remote/1460000015422248);进入showImg(https://segmentfault.com/img/r...
阅读 1127·2021-10-15 09:39
阅读 3005·2021-09-10 10:50
阅读 3418·2019-08-30 15:53
阅读 1849·2019-08-30 15:52
阅读 2506·2019-08-29 15:31
阅读 1944·2019-08-26 13:43
阅读 2562·2019-08-26 13:37
阅读 1411·2019-08-23 18:31