微信公众号开发(一)
微信公众号开发(一)
主要介绍如何申请接口测试号和对接接口配置信息
官方网址: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;
总体介绍:
在接口配置信息提交: