微信公众号 【1】- 开发配置

    xiaoxiao2025-09-22  48

    前言

    我是一名全栈工程师,因工作需要学了一下微信公众号开发,学习的同时我也希望把我学到的知识分享给大家,以及我所遇到的坑. 后台我主要是NodeJs,我的目的不是教大家如何写NodeJs所以大家需要的话可以去网上自己学一下.

    微信公众号测试号

    因为公众号注册是有一定的门槛,所以推荐大家申请一个微信公众号测试号. 申请入口: 微信公众号测试号申请

    (我问你答)工作原理

    微信用户发送了 " hi " 给微信服务器微信服务器又转发给了我们自己写的配置服务器.配置服务器做出相应的处理,并给微信服务器做出响应.如果微信服务器在五秒内得不到配置服务器的回应,它会尝试重新发送.总共试3次.如果都没有响应则向微信用户反馈"该公众号提供的服务出现故障,请稍后再试".微信服务器得到配置服务器的响应之后,再转发给微信用户.

    从上面我们可以看得出, 微信服务器与配置服务器之间是需要连接通讯的,我们需要给微信服务器提供一个可以访问我们服务器的办法. 也就是公网ip。 因为我们是在本地写代码,没有公网IP,唯一的办法就是将本地IP映射到外网.

    内网穿透

    为了本地开发方便,同学们可以下载一款叫花生壳的软件.它可以将我们本地IP地址映射到公网上,并给我们分配了一个域名.微信服务器可以通过域名与我们本地的配置服务器通信.

    填写服务器配置

    将配置服务器接口填到URL的位置,token可以随便写,但必须保持与后台配置的token一致.

    创建node工程

    创建项目 创建一个文件夹,名字随便起. 我就叫 WechatServe 配置文件 根目录下创建 config.json 文件,里面是我们的存放我们的配置信息 { "token": "wechat" }

    appId与appSecret字段的内容必须与测试号信息里面保持一致,token也要与接口配置信息里面的token保持一致.

    创建node应用 创建app.js文件,关于一些中间件的导入我就不详细说了,大家自行添加. const Express =require('express') const app = Express(); // 监听的端口必须与你映射到公网的端口一致. app.listen(3000);

    验证微信

    开发者提交配置信息后,微信服务器将发送GET请求到填写的服务器地址URL上.所以我们要实现这个接口.

    wechat.js -------------------------------------- const sha1 = require("sha1"); const Wechat = function(config) { // 拿出配置文件内容 this.token = config.token; /* * * 验证微信 */ Wechat.prototype.auth = function(ctx) { //这么做是为了省去req req.query... let { query } = ctx; // 拿出里面的内容 //微信加密签名 == 通过 时间戳+随机数+token 生成的 let signature = query.signature; //query.signature 等价与 req.query.signature // 时间戳 let timestamp = query.timestamp; //随机数 let nonce = query.nonce; // 随机字符串 let echostr = query.echostr; console.log(this.token); let arr = [this.token, timestamp, nonce]; let str = arr.sort().join(""); // 使用 sha1加密 let resultCode = sha1(str); //如果后端的加密签名与前端加密签名结果一致则成功 if (resultCode === signature) { // 验证成功 返回echostr ctx.body = echostr; } else { // 验证失败 console.log("微信验证失败!"); } }; }; module.exports = Wechat; app.js ------------------------- const Koa = require("koa"); const Router=require('koa-router') const config = require("./config.json"); const Wechat = require("./wechat/wechat.js"); const app = new Koa(); const router=new Router(); let wechatApp = new Wechat(config); router.get('/',async ctx=>{ wechatApp.auth(ctx); }) app.use(router.routes()); app.use(router.allowedMethods()); app.listen(3000);

    点击提交配置,提示配置成功说明我们成功了.

    完整代码: https://github.com/hyz0421/WechatServe.git 记得给个星星噢

    有问题可以加我 vx: wxid_e4923mikekfd22

    最新回复(0)