大家好,又见面了,我是你们的朋友全栈君。
前言
微信公众号网页开发第一步是验证服务器这一步是必不可少的。我是用的是liunx系统搭配宝塔面板,基于node.js+nginx进行开发的。
一、服务器配置
安装liunx系统服务器进入宝塔官网;按照步骤配置服务器,开启nginx服务,因为此类教程比较全面不再过多赘述。
注意:开发公众号页面需要已经备案的域名
二、后台编写验证服务器逻辑
1.创建相关nodejs服务
每个人有每个人的方法。我是通过脚手架建立的nodejs服务,并向外映射
2.在index.js内编写代码
(1). 先安装sha加密插件
通过npm安装jssha插件,插件使用方式参考教程jssha – npm;
(2). 在index.js文件内引入jssha
//引入sha1模块
const jsSHA = require('jssha');
(3).定义配置
主要是配置验证所需的一些字段(如:appID、Token等)
// 定义配置对象
const config ={
token:'这里写token', //token需要自己定义 例如:HTML0907
appID:'AppID', //填写开发公众号的AppID
appsecret:'appsecret', //填写开发公众号的appsecret
EncodingAESKey:'EncodingAESKey' //填写开发公众号的EncodingAESKey
}
(4).接受微信服务器发送的请求并处理
使用get请求获取微信服务器发来的相关信息
1.处理微信请求所带参数 signature(微信加密签名)、timestamp(时间戳)、 nonce(随机数)、echostr (随机字符串);
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三个参数进行字典序排序
var array = [token,timestamp,nonce];
array.sort();
})
3.将三个参数字符串拼接成一个字符串进行sha1加密
var tempStr = array.join(''); //拼接字符串
/** * 利用jssha进行sha1加密 * 必须使用此方式才可以进行加密否则报错不生效 */
var shaObj = new jsSHA('SHA-1', 'TEXT');
shaObj.update(tempStr);
var scyptoString=shaObj.getHash('HEX');
4.开发者获得加密后的字符串可与signature对比,标识该请求来源于微信
if(signature === scyptoString){
//判断加密后的字符串是否与signature相同
res.send(echostr); //相同则返回随机字符串echostr
}else{
res.send('error'); //不相同则返回错误
}
完整index.js代码
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作为后台语言的小伙伴
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/136589.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...