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

前言

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

微信公众号测试号

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

(我问你答)工作原理

在这里插入图片描述

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

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

内网穿透

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

填写服务器配置

将配置服务器接口填到URL的位置,token可以随便写,但必须保持与后台配置的token一致.
在这里插入图片描述

创建node工程

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

appIdappSecret字段的内容必须与测试号信息里面保持一致,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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值