测试服务器的搭建

前言

教程来源:尚硅谷微信公众号开发教程

创建并初始化项目

项目名称
vx-test

初始化

npm init

项目名称不要用中文名

项目依赖

npm i express
npm i sha1

创建入口文件
这里要与你package.json 里的保持一致
在这里插入图片描述

//引入express
const express = require("express");
//引入sha1
const sha1 = require("sha1");

//创建app应用对象
const app = express();

//验证服务器的有效性,接收处理所有消息
app.use((req, res, next) => {
  //查看请求参数
  console.log("请求参数:", req.query);
});

//监听端口号
app.listen(5000, () => {
  console.log("服务器启动成功");
});

将内网网址映射成外网网址

需要用到ngrok这个工具
下载地址:传送门

注: 最好用github账号注册一个ngrok账号,后面可能会用到

双击打开应用程序
在这里插入图片描述

简单示例

ngrok http 5000

5000是你自己设置的本地端口号

回车运行成功后会出现如下图:
在这里插入图片描述
将生成的地址填写到微信公众号测试号申请那块
在这里插入图片描述
url用生成的那个地址,token的话可以随意填写。

重新启动服务器,并点击提交
服务器会输出以下内容:
在这里插入图片描述
signature:微信的加密签名
echostr:微信的随机字符串
timestamp:微信发送请求的时间戳
nonce:微信的随机数字

如何验证消息是否来自于微信服务器

目的
计算得出signature微信加密签名,和微信传递过来的signature进行对比。如果一致,说明消息来自于微信服务器

计算方式

1、将参与微信加密签名的三个参数(timestamp、nonce、token),按照字典序排序并组合在一起形成一个数组
2、将数组里所有参数拼接成一个字符串,然后进行sha1加密
3、加密完成后就会生成一个signature,和微信发送过来的进行对比,判断是否一致。如果一致返回echostr 给微信服务器;如果不一致返回error

  • token:token是你在网页上自己填写的那个内容
  • 字典序排序:0~9 a~z

定义配置对象

对象值来源于微信平台生成的那些值,用自己的,别人的没用
在这里插入图片描述

//定义配置文件,从微信公众号平台上复制
const config = {
  token: "onion",
  appID: "wxd30baaf5966993dc",
  appsecret: "e859d940347aeea226c3a02aefaf84af",
};

完整代码

//引入express
const express = require("express");
//引入sha1
const sha1 = require("sha1");

//创建app应用对象
const app = express();

//定义配置文件,从微信公众号平台上复制
const config = {
  token: "onion",
  appID: "wxd30baaf5966993dc",
  appsecret: "e859d940347aeea226c3a02aefaf84af",
};

//验证服务器的有效性,接收处理所有消息
app.use((req, res, next) => {
  //查看请求参数
  //console.log("请求参数:", req.query);

  const { signature, echostr, timestamp, nonce } = req.query;
  const { token } = config;

  //1、将参与微信加密签名的三个参数(timestamp、nonce、token),按照字典序排序并组合在一起形成一个数组
  const arr = [timestamp, nonce, token];
  const arrSort = arr.sort();
  console.log(arrSort);
  //2、将数组里所有参数拼接成一个字符串,然后进行`sha1`加密
  const str = arrSort.join("");
  const sha1Str = sha1(str);
  //3、加密完成后就会生成一个signature,和微信发送过来的进行对比,判断是否一致。如果一致返回`echostr` 给微信服务器;如果不一致返回`error`
  if (sha1Str === signature) {
    res.send(echostr);
  } else {
    res.end("error");
  }
});

//监听端口号
app.listen(5000, () => {
  console.log("服务器启动成功");
});

重启启动服务,再次点击提交

打印了一下值,结果发现一模一样,但还是提示失败‘
在这里插入图片描述
如果你跟我一样一致提示失败,可以看一下这篇文章:【微信公众号开发解决URL接口配置问题 】我最终成功了。
在这里插入图片描述

基本步骤如下:
解决URL接口配置问题

1.打开ngrok.exe

2.输入ngrok http 3000(自己设置的端口)

3.复制图中网址(注意每个人的网址不同)
在这里插入图片描述
4.到浏览其中粘贴加上\html(我这是http://3512-120-228-142-202.ngrok.io\html)(注意有的浏览器可能无法访问,换个浏览器就好)

4.有Gitub账号可直接登录,若没有账号可以先注册再登录

5.复制图上网址
在这里插入图片描述
6.重新打开ngrok输入ngrok http 3000 --authtoken加上刚刚复制的网址
(我这是 ngrok http 3000 --authtoken 23RthpB7QpLdHrBTivoitz4CzZ8_4a9AcRX3ZuKKBXWfoPSYe)
7.将图上网址复制到微信URL中
8.最后再次在微信URL接口设置中点击提交即可

模块化

config
创建config目录,存放配置文件
在这里插入图片描述

module.exports = {
  token: "onion",
  appID: "wxd30baaf5966993dc",
  appsecret: "e859d940347aeea226c3a02aefaf84af",
};

wechat
创建wechat目录,存放中间件

  • auth.js :验证服务器有效性模块
//引入sha1
const sha1 = require("sha1");
//引入config配置模块
const config = require("../../config/index");

module.exports = () => {
  return (req, res, next) => {
    //查看请求参数
    //console.log("请求参数:", req.query);

    const { signature, echostr, timestamp, nonce } = req.query;
    const { token } = config;

    //1、将参与微信加密签名的三个参数(timestamp、nonce、token),按照字典序排序并组合在一起形成一个数组
    const arr = [timestamp, nonce, token];
    const arrSort = arr.sort();
    console.log(arrSort);
    //2、将数组里所有参数拼接成一个字符串,然后进行`sha1`加密
    const str = arrSort.join("");
    const sha1Str = sha1(str);
    console.log("sha1str:", sha1Str, "signature:", signature);
    //3、加密完成后就会生成一个signature,和微信发送过来的进行对比,判断是否一致。如果一致返回`echostr` 给微信服务器;如果不一致返回`error`
    if (sha1Str === signature) {
      res.send(echostr);
    } else {
      res.end("error");
    }
  };
};

index.js入口文件

//引入express
const express = require("express");
//引入服务器验证模块
const auth = require("./wechat/auth");

//创建app应用对象
const app = express();

//验证服务器的有效性,接收处理所有消息
app.use(auth());

//监听端口号
app.listen(5000, () => {
  console.log("服务器启动成功");
});
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无知的小菜鸡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值