先配置好URL,token, 生成EncodingAESKey,接口中会用到

nodejs接口实现:

const sha = require('../common/sha1.js');exports.checkSignature = (req, res) => {let signature = req.query.signature;let timestamp = req.query.timestamp;let nonce = req.query.nonce;let token = '123456abcdef';// 用户配置的nodejs接口let tmpArr = [token, timestamp, nonce];tmpArr.sort();let tmpStr = tmpArr.join('');tmpStr = sha.hex_sha1(tmpStr);if (tmpStr == signature) {res.send(req.query.echostr);} else {res.send('false');}
}

网上找的 sha1 加密实现方式:


/*** A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined* in FIPS PUB 180-1** By lizq** 2006-11-11**/
/*** Configurable variables.**/
var hexcase = 0; /* hex output format. 0 - lowercase; 1 - uppercase */
var chrsz = 8; /* bits per input character. 8 - ASCII; 16 - Unicode */
/*** The main function to calculate message digest**/
// function hex_sha1(s) {//     return binb2hex(core_sha1(AlignSHA1(s)));
// }
exports.hex_sha1 = (s) => {return binb2hex(core_sha1(AlignSHA1(s)));
}
/*** Perform a simple self-test to see if the VM is working**/
function sha1_vm_test () {return hex_sha1("abc") == "a9993e364706816aba3e25717850c26c9cd0d89d";
}
/*** Calculate the SHA-1 of an array of big-endian words, and a bit length**/
function core_sha1 (blockArray) {var x = blockArray; // append paddingvar w = Array(80);var a = 1732584193;var b = -271733879;var c = -1732584194;var d = 271733878;var e = -1009589776;for (var i = 0; i < x.length; i += 16) // 每次处理512位 16*32{var olda = a;var oldb = b;var oldc = c;var oldd = d;var olde = e;for (var j = 0; j < 80; j++) // 对每个512位进行80步操作{if (j < 16)w[j] = x[i + j];elsew[j] = rol(w[j - 3] ^ w[j - 8] ^ w[j - 14] ^ w[j - 16], 1);var t = safe_add(safe_add(rol(a, 5), sha1_ft(j, b, c, d)), safe_add(safe_add(e, w[j]), sha1_kt(j)));e = d;d = c;c = rol(b, 30);b = a;a = t;}a = safe_add(a, olda);b = safe_add(b, oldb);c = safe_add(c, oldc);d = safe_add(d, oldd);e = safe_add(e, olde);}return new Array(a, b, c, d, e);
}
/*** Perform the appropriate triplet combination function for the current* iteration** 返回对应F函数的值**/
function sha1_ft (t, b, c, d) {if (t < 20)return (b & c) | ((~b) & d);if (t < 40)return b ^ c ^ d;if (t < 60)return (b & c) | (b & d) | (c & d);return b ^ c ^ d; // t<80
}
/*** Determine the appropriate additive constant for the current iteration** 返回对应的Kt值**/
function sha1_kt (t) {return (t < 20) ? 1518500249 : (t < 40) ? 1859775393 : (t < 60) ? -1894007588 : -899497514;
}
/*** Add integers, wrapping at 2^32. This uses 16-bit operations internally** to work around bugs in some JS interpreters.** 将32位数拆成高16位和低16位分别进行相加,从而实现 MOD 2^32 的加法**/
function safe_add (x, y) {var lsw = (x & 0xFFFF) + (y & 0xFFFF);var msw = (x >> 16) + (y >> 16) + (lsw >> 16);return (msw << 16) | (lsw & 0xFFFF);
}
/*** Bitwise rotate a 32-bit number to the left.** 32位二进制数循环左移**/
function rol (num, cnt) {return (num << cnt) | (num >>> (32 - cnt));
}
/*** The standard SHA1 needs the input string to fit into a block** This function align the input string to meet the requirement**/
function AlignSHA1 (str) {var nblk = ((str.length + 8) >> 6) + 1,blks = new Array(nblk * 16);for (var i = 0; i < nblk * 16; i++)blks[i] = 0;for (i = 0; i < str.length; i++)blks[i >> 2] |= str.charCodeAt(i) << (24 - (i & 3) * 8);blks[i >> 2] |= 0x80 << (24 - (i & 3) * 8);blks[nblk * 16 - 1] = str.length * 8;return blks;
}
/*** Convert an array of big-endian words to a hex string.**/
function binb2hex (binarray) {var hex_tab = hexcase ? "0123456789ABCDEF" : "0123456789abcdef";var str = "";for (var i = 0; i < binarray.length * 4; i++) {str += hex_tab.charAt((binarray[i >> 2] >> ((3 - i % 4) * 8 + 4)) & 0xF) +hex_tab.charAt((binarray[i >> 2] >> ((3 - i % 4) * 8)) & 0xF);}return str;
}

微信公众号服务器配置 --接口 nodejs实现方法相关推荐

  1. php h5微信公众号支付接口,微信公众号H5支付接口调用方法

    本文实例为大家分享了 微信内h5调用支付接口的具体代码,供大家参考,具体内容如下 官方文档 微信公众号h5接口调用 // 判断微信版本是否在5.0以上 // window.navigator.user ...

  2. 微信公众号自动回复服务器数据,[终极方案]解决微信公众号服务器配置启用后无法自动回...

    在配置服务器配置时Token验证通过后,遇到给公众号发信息,提示:提示该公众号提供的服务出现故障,请稍后再试 的问题,一直实现不了自动回复的功能.百度了大量的资料,参考了开发文档,尝试了n种办法,检查 ...

  3. php 微信公众号服务器配置首次验证

    php 微信公众号服务器配置首次验证 首先要确定你有微信公众号和服务器: 登录微信公众号平台,左侧最下方的 开发->基本配置 我这里用了get_event方法接受验证,既你在服务器的丢出来一个可 ...

  4. 微信连接服务器错误代码1500,微信公众号错误代码10003的解决方法

    微信公众号错误代码10003的解决方法 发布时间:2021-01-18 09:07:41 来源:亿速云 阅读:422 作者:小新 这篇文章将为大家详细讲解有关微信公众号错误代码10003的解决方法,小 ...

  5. SpringBoot微信公众号服务器配置案例

    前言 进行微信公众号开发,进行服务器配置是必不可少的,通过配置,公众号粉丝与公众号交互的消息将发送至开发者服务器,开发者对消息进行处理,例如:配置后,用户关注公众号或取关时,消息将发送至开发者配置的U ...

  6. 微信公众号平台接口开发:发送客服消息

    官方接口介绍 发送文本信息 参数有4个, access_token这个就不用介绍了,就是之前得到的那个AccessToken,就是在这个接口里边当中参数用的 touser是关注了公众号的微信用户的op ...

  7. php实现微信公众号分享,php实现微信公众号自定义分享内容的方法

    这篇文章主要介绍了php版微信公众号自定义分享内容实现方法,结合实例形式分析了php实现微信公众号自定义分享内容的接口调用与相关使用技巧,需要的朋友可以参考下 微信公众号号在手机中通过api接口可以实 ...

  8. 微信公众号开发接口语音下载解决方案

    需求:利用微信公众号开发接口下载语音,展示并可以收听语音 1.利用微信公众平台开发接口下载语音文件至本机 /*** 下载多媒体文件* @param string $mediaId* @return s ...

  9. 微信公众号调用接口显示的错误码含义

    微信公众号调用接口显示的错误码含义 返回码    说明 -1    系统繁忙,此时请开发者稍候再试 0    请求成功 40001    获取 access_token 时 AppSecret 错误, ...

最新文章

  1. linux运行dock打包的镜像,Linux部署之Docker方式部署项目
  2. 如何用简单的词语和用法解释Katana和OWIN?
  3. 【FFmpeg】FFmpeg常用基本命令(转载)
  4. 如何实现文字在图片中间的效果
  5. ArrayBlockingQueue原理分析-itrs.elementDequeued()
  6. TensorFlow:实战Google深度学习框架(一)计算、数据、运行模型
  7. winCE下Unicode编码
  8. mybatis进阶--一对一查询
  9. linux echo 当前时间,linuxecho
  10. 深入研究:HTTP2的真正性能到底如何
  11. 【Java】Java日志框架Logback的简单例子
  12. springboot 整合redis配置文件
  13. 事业单位资产管理系统解决方案:国有资产全生命周期管理监管体系
  14. leetcode#8 deterministic finite automaton, DFA
  15. Tikhonov regularization 吉洪诺夫正则化(L2正则化)
  16. ONE readme study
  17. 几百本计算机类常用书籍
  18. 知帆科技创始人叶茂: 链上数据分析将大有作为
  19. 谈《黑社会之龙城岁月》中之大D
  20. 华三交换机配置多个镜像口_【转】交换机端口镜像,如何配置多个观察口

热门文章

  1. 惠普linux设置u盘启动不了,惠普电脑怎么设置u盘启动(hp笔记本u盘启动不了)...
  2. Vue + vue-d3 实现族谱图的简单示例
  3. 抖音运营规则讲解系列(1):不符合社区规范内容被封丨国仁网络
  4. VS code win10 环境,下载安装调试
  5. sysbench mysql_通过sysbench工具实现MySQL数据库的性能测试
  6. 论文阅读|struc2vec: Learning Node Representations from Structural Identity
  7. html页面实现视频播放器,实现简易html视频播放器的方法
  8. 视觉SLAM--ORB特征简介
  9. cancelBubble 的用法
  10. 2进制,8进制,10进制,16进制 互换