欢迎来点点个人博客node
背景
git
我多嘴,说我知道微信公众号的配置流程,而后公司原来负责公众号的人离职了,让我先研究而后去教后端大哥,我也是醉了。可是多学一种东西,又何乐而不为呢。原本我也在学习koa2,想给本身的小程序写接口。因而就开始了踩坑之路,也感谢网上不少大佬的分享。github
- MacOs
- Node v8.9.1
- Koa2复制代码
咱们先来看看微信公众平台开发的基本原理:在进行微信开发的时候,须要在咱们在本身的服务器上部署服务对微信消息进行处理。微信服务器就至关于一个转发服务器。终端(手机、Pad等)发起请求至微信服务器,微信服务器而后将请求转发给自定义服务(这里就是咱们的具体实现)。服务处理完毕,而后转发给微信服务器,微信服务器再将具体响应回复到终端,通讯协议为:HTTP;数据格式为:XML。咱们的服务须要作的就是对请求作出响应,解析XML,进行相应的处理后再返回特定的XML。npm
这儿咱们了解到了接入微信开发须要一个本身的响应服务器,咱们能够购买服务器或者新浪云百度云之类的服务。可是在咱们开发阶段这样作是很麻烦的,咱们须要搭建一个好用的本地调试环境,将内网映射出去,让外网可以访问的。
这儿推荐使用Ngrok服务。win、mac都能方便使用,并且稳定,外网域名是固定的。小程序
打开它的网站www.ngrok.cc/注册登陆而后开通隧道。同时你须要下载相应的客户端
在win中这是个批处理文件,运行它而后填入相应的隧道id回车便可,在Mac下载客户端目录中执行以下命令。segmentfault
./sunny clientid 隧道id复制代码
这里在Ngrok官网上配置端口要设置成8080(设置成别的会形成token验证失败)后端
$ mkdir koa-wechat && cd koa-wechat && npm init -y
$ npm i -S koa co-wechat 复制代码
推荐cnpm下载浏览器
新建app.jsbash
//app.jsconst Koa = require('koa');const wechat = require('co-wechat');
const app = new Koa();
app.use(async(ctx, next) => { if (ctx.path === '/wechat') { //自定义的路由,微信后台配置的url await next(); } else { ctx.body = `Hello, koa2! Path is: ${ctx.path}`; }});
app.use(wechat({ token: '', //微信后台配置的token appid: '', //微信公众号的appid encodingAESKey: '' //微信公众号的encodingAESKey}));
app.listen(8080); //端口要跟ngrok里配置的对应
复制代码
确认代码里的变量后,启动服务。
服务器
node index.js复制代码
咱们运行app.js,将服务跑起来,浏览器打开localhost:8080
咱们将可以看见返回了Hello, koa2! Path is
。这儿推荐使用supervisor,它会监视你对代码的改动,并自动重动 Node
npm install -g supervisor
supervisor app.js复制代码
接下来就是用前面讲的ngrok进行内网转发了
./sunny clientid 隧道id复制代码
此时已经离成功一步之遥。
接入微信公众平台开发,开发者须要按照以下步骤完成:
一、填写服务器配置
二、验证服务器地址的有效性
三、依据接口文档实现业务逻辑
咱们登陆微信公众平台接口测试账号mp.weixin.qq.com/debug/cgi-b…,登陆后填写接口配置信息
,这时确定不能配置成功的。咱们须要验证服务器地址的有效性,开发者提交信息后,微信服务器将发送GET请求到填写的服务器地址URL上,GET请求携带参数以下表所示:
signature 微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。 timestamp 时间戳 nonce 随机数 echostr 随机字符串
开发者经过检验signature对请求进行校验。若确认这次GET请求来自微信服务器,原样返回echostr参数内容,则接入生效,成为开发者成功,不然接入失败。加密/校验流程以下:
幸运的是这些事 co-wechat都帮咱们作了~~~ 送给做者一朵小发发
进入测试号的页面从新提交接口配置信息,你将会看见一个一闪而过的配置成功过提示框。恭喜,这标志着你正式跳进了微信开发的坑了。
欢迎大佬们多多指点
https://www.jonathon.cn/