在开发微信公众号之前呢,首先要在微信公众号平台上注册一个服务号,具体的注册流程在这里我也就不过多的叙述了。
当注册成功后就要实现接入的准备工作了,有条件的小伙伴可以购买一个域名和服务器(支持node环境的),没条件的小伙伴就可以和我一样使用ngrok或者花生壳等软件实现内网穿透,不过这样的话可能会有一些些的不稳定,既然是免费嘛,就要承受一些必不可少的问题嘛,废话不多说,赶紧的用koa2搭建个服务吧!
在微信公众号开发者平台上,选择基本配置,会出现如下图所示的界面。
基本配置
使用ngrok将koa2开启的服务端口形成的外网地址赋值给途中的服务器地址处,并配置好开发者密码、IP白名单和令牌,至于令牌的内容随意,怎么开心怎么来,消息的加密方式本系列文章都是以明文的方式来处理的。
好啦,万事俱备,只欠东风了,配置好了这些如何让koa服务接入微信公众号呢?具体的可以参考公众号官方文档,看的有点懵,没关系,大致的可以理解为当你配置好点击提交的时候,公众号会向你刚刚配置的服务器发送一个get请求,而这个get请求附带了四个参数。
参数说明
在服务器端需要将token、timestamp、nonce三个参数进行字典序排序后采用sha1加密,然后把最后的结果和signature做对比,如果一致,那么说明本次请求是来自微信的,最后原样返回echostr参数内容就接入成功了!
const Koa=require('koa2');
const sha1=require('sha1');
const app=new Koa();
var config={
appId:'wxxxxxxxxxxxxxx167',
appSecret:'e30xxxxxxxxx5f9xxxxxx6dxxxxxxb8f',
token:'mytestdemo'
}
app.use(async ctx=>{
const signature=ctx.query.signature,
timestamp=ctx.query.timestamp,
nonce=ctx.query.nonce,
token=config.token;
//字典排序
const str=[token,timestamp,nonce].sort().join('');
const result=sha1(str);
if(result===signature){
ctx.body=ctx.query.echostr;
}else{
ctx.body={
code:-1,
msg:"fail"
}
}
});
app.listen(443);
最后启动服务,在公众号平台上点击提交,出现提交成功则代表已经成功接入了,如果出现问题的话可以查看官方文档的全局返回码说明。