使用nodejs进行微信公众号网页开发(一)验证服务器「建议收藏」

2022-09-07 16:22:47 浏览数 (1)

大家好,又见面了,我是你们的朋友全栈君。

使用nodejs进行微信公众号网页开发(一)验证服务器

  • 前言
  • 一、服务器配置
  • 二、后台编写验证服务器逻辑
    • 1.创建相关nodejs服务
    • 2.在index.js内编写代码
      • (1). 先安装sha加密插件
      • (2). 在index.js文件内引入jssha
      • (3).定义配置
      • (4).接受微信服务器发送的请求并处理
      • 完整index.js代码
  • 三、公众号配置
    • 1.进入公众号后台页面
    • 2.完成后点击提交
  • 总结

前言

微信公众号网页开发第一步是验证服务器这一步是必不可少的。我是用的是liunx系统搭配宝塔面板,基于node.js nginx进行开发的。

一、服务器配置

安装liunx系统服务器进入宝塔官网;按照步骤配置服务器,开启nginx服务,因为此类教程比较全面不再过多赘述。 注意:开发公众号页面需要已经备案的域名

二、后台编写验证服务器逻辑

1.创建相关nodejs服务

每个人有每个人的方法。我是通过脚手架建立的nodejs服务,并向外映射

2.在index.js内编写代码

(1). 先安装sha加密插件

通过npm安装jssha插件,插件使用方式参考教程jssha – npm;

(2). 在index.js文件内引入jssha

代码语言:javascript复制
//引入sha1模块
const jsSHA = require('jssha');

(3).定义配置

主要是配置验证所需的一些字段(如:appID、Token等)

代码语言:javascript复制
// 定义配置对象
const config ={ 
   
    token:'这里写token', //token需要自己定义 例如:HTML0907
    appID:'AppID', //填写开发公众号的AppID
    appsecret:'appsecret', //填写开发公众号的appsecret
    EncodingAESKey:'EncodingAESKey' //填写开发公众号的EncodingAESKey
}

(4).接受微信服务器发送的请求并处理

使用get请求获取微信服务器发来的相关信息 1.处理微信请求所带参数 signature(微信加密签名)、timestamp(时间戳)、 nonce(随机数)、echostr (随机字符串);

代码语言:javascript复制
router.get('/',function(req,res,next){ 
   
    const { 
   token} = config; //解构赋值获取token
    var signature = req.query.signature, //微信加密签名
	    timestamp = req.query.timestamp, //时间戳
	    nonce = req.query.nonce, //随机数
	    echostr = req.query.echostr; //随机字符串
})

2.将token、timestamp、nonce三个参数进行字典序排序

代码语言:javascript复制
var array = [token,timestamp,nonce];
array.sort();
})

3.将三个参数字符串拼接成一个字符串进行sha1加密

代码语言:javascript复制
var tempStr = array.join(''); //拼接字符串
/** * 利用jssha进行sha1加密 * 必须使用此方式才可以进行加密否则报错不生效 */
var shaObj = new jsSHA('SHA-1', 'TEXT');
shaObj.update(tempStr);
var scyptoString=shaObj.getHash('HEX');

4.开发者获得加密后的字符串可与signature对比,标识该请求来源于微信

代码语言:javascript复制
if(signature === scyptoString){ 
    //判断加密后的字符串是否与signature相同
	res.send(echostr);  //相同则返回随机字符串echostr
}else{ 
   
    res.send('error'); //不相同则返回错误
}

完整index.js代码

代码语言:javascript复制
var express = require('express');
var router = express.Router();
//引入sha1模块
const jsSHA = require('jssha');

const app = express()
// 定义配置对象
const config ={ 
   
    token:'这里写token', //token需要自己定义 例如:HTML0907
    appID:'AppID', //填写开发公众号的AppID
    appsecret:'appsecret', //填写开发公众号的appsecret
    EncodingAESKey:'EncodingAESKey' //填写开发公众号的EncodingAESKey
}

router.get('/',function(req,res,next){ 
   
    const { 
   token} = config;
    	//1.处理微信请求所带参数 signature(微信加密签名)、timestamp(时间戳)、 nonce(随机数)、echostr (随机字符串);
    var signature = req.query.signature,//微信加密签名
	    timestamp = req.query.timestamp,//时间戳
	    nonce = req.query.nonce,//随机数
	    echostr = req.query.echostr;//随机字符串
	    //2.将token、timestamp、nonce三个参数进行字典序排序
	    var array = [token,timestamp,nonce];
	    array.sort();
	    //3.将三个参数字符串拼接成一个字符串进行sha1加密
	    var tempStr = array.join('');
	    var shaObj = new jsSHA('SHA-1', 'TEXT');
	    shaObj.update(tempStr);
	    var scyptoString=shaObj.getHash('HEX');
	     //4.开发者获得加密后的字符串可与signature对比,标识该请求来源于微信
	    if(signature === scyptoString){ 
   
	        res.send(echostr);
	    }else{ 
   
	        res.send('error');
	    }
})

module.exports = router;

三、公众号配置

1.进入公众号后台页面

1.> 在最下面找到开发–>基本配置–>服务器配置–>修改配置 看见下图所示

填写配置 URL为接口的地址,一般只填写链接即可 例:https://baidu.com Token为随机字符,需要自己编写 例:HTML0907 EncodingAESKey和消息加解密方式根据自己需要填写

2.完成后点击提交

如果出现错误 1.检查自己的参数配置是否完整 2.检查服务器逻辑是否有误

总结

微信公众号验证服务器较为简单,只要逻辑不出错就没有太大问题 验证思路: 1.先编写验证逻辑:获取字符串–>进行字典序排序–>进行sha1加密–>密文与随机字符串比较返回信息 2.对微信公众号后台进行配置 以上就是验证服务器的方法了,适合使用nodejs作为后台语言的小伙伴

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/136589.html原文链接:https://javaforall.cn

0 人点赞