微信公众号开发(一)

微信公众号开发(一)

主要介绍如何申请接口测试号和对接接口配置信息

官方网址: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只能是外网才可以用,这里没配外网服务器,所有使用内网穿透)

下载地址:https://ngrok.com/

登录进入下载

 启动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;

总体介绍:

 在接口配置信息提交:

posted @ 2020-07-01 16:01  神V化身  阅读(255)  评论(0编辑  收藏  举报