微信公众号开发(一)
主要介绍如何申请接口测试号和对接接口配置信息
官方网址:https://developers.weixin.qq.com/doc/offiaccount/Asset_Management/New_temporary_materials.html
使用工具:nodeJS + express
一、接口测试号申请
地址:https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login
登录进去页面如下:
二、实现内网穿透(URL只能是外网才可以用,这里没配外网服务器,所有使用内网穿透)
启动ngrok:第一次启动要验证身份验证令牌
验证完成之后:http协议,端口号为3000
ngrok http 3000
把访问地址输入到URL中,现在点提交是没用的,还要验证服务器的有效性
三、创建项目
验证服务器的有效性规则:
1、将参与微信加密签名的三个参数(timestamp,nonce,token)按照字典排序并组合在一起形成一个数组
2、将数组里的所有参数拼接成一个字符串,进行sha1加密
3、加密完成就生成一个signature,和微信发送过来的进行对比。
引入sha1进行加密
npm i sha1
// 引入sha1模块:npm i sha1 const sha1 = require(\'sha1\')
var createError = require(\'http-errors\'); var express = require(\'express\'); var path = require(\'path\'); var cookieParser = require(\'cookie-parser\'); var logger = require(\'morgan\'); var indexRouter = require(\'./routes/index\'); var usersRouter = require(\'./routes/users\'); // 引入sha1模块:npm i sha1 var sha1=require(\'sha1\'); var app = express(); app.use((req, res, next) => { const {signature, echostr, timestamp, nonce} = req.query; const token = \'abcd1234\'; // 1、将参与微信加密签名的三个参数(timestamp,nonce,token)按照字典排序并组合在一起形成一个数组 // 2、将数组里的所有参数拼接成一个字符串,进行sha1加密 // 3、加密完成就生成一个signature,和微信发送过来的进行对比。 const sha1Str = sha1([timestamp, nonce, token].sort().join(\'\')); if (sha1Str === signature) { res.send(echostr) //正确:返回echostr给微信服务器 } else { res.end(\'error\') } }); // view engine setup app.set(\'views\', path.join(__dirname, \'views\')); app.set(\'view engine\', \'ejs\'); app.use(logger(\'dev\')); app.use(express.json()); app.use(express.urlencoded({extended: false})); app.use(cookieParser()); app.use(express.static(path.join(__dirname, \'public\'))); app.use(\'/\', indexRouter); app.use(\'/users\', usersRouter); // catch 404 and forward to error handler app.use(function (req, res, next) { next(createError(404)); }); // error handler app.use(function (err, req, res, next) { // set locals, only providing error in development res.locals.message = err.message; res.locals.error = req.app.get(\'env\') === \'development\' ? err : {}; // render the error page res.status(err.status || 500); res.render(\'error\'); }); module.exports = app;
总体介绍:
在接口配置信息提交: