本系列的英文版Jerry写做于2017年,这个教程总共包含十篇文章,发表在SAP社区上。node
最近有很多朋友在微信上向我咨询SAP系统和微信公众号集成的问题,所以我把当时写的英文版翻译成中文,从新发布在个人公众号上。算法
须要注意的是,时隔三年,微信公众号的开发流程可能有所变化,请你们自行鉴别。和微信公众号集成的系统,我三年前选择的是SAP Cloud for Customer.json
搭建开发环境的前置条件服务器
(1) 去微信公众平台申请一个微信公众号。
(2) 这个教程里的微信消息服务器是用nodejs开发的,因此须要对nodejs的开发有一个基本的了解。微信
登陆微信公众平台, 进入公众号管理控制台:Development->Basic configuration微信开发
在下图的URL字段里,维护你的微信消息服务器地址。当咱们使用微信app往某个微信公众号发送消息时,微信app会把该消息转发给微信公众号绑定到的微信消息服务器去。该消息服务器处理完毕后,将处理结果推送回微信app.app
上图中个人微信消息服务器部署在heroku云平台上,固然你也能够把本身用nodejs开发的微信消息服务器,部署在其余的云平台,好比阿里云,腾讯云,SAP云平台等都可。微信公众平台
仅仅简单地将云平台上的微信消息服务器的url维护在上图的URL字段是不够的,咱们必须遵循微信公众号开发指南里定义的一个校验流程,从而让消息服务器同微信公众号真正地创建绑定关系。ui
校验流程文档以下:阿里云
点击下图的submit按钮以后,微信公众平台会发送一个HTTP请求到咱们开发的微信消息服务器去:
HTTP请求的url格式以下:
https://<your server url>/?signature=096abd439b41f9610aeabe2d7534084fd8dafa20&echostr=16168327802220428137×tamp=1512810825&nonce=384289189
咱们的微信消息服务器,收到这个请求后,将微信公众号的帐号令牌, HTTP请求里包含的时间戳和nonce字段做为输入,按照微信开发指南里的说明计算一个输出值,若是该输出值和HTTP请求传入的签名值(signature)相等,则该微信消息服务器经过验证,后续能够接收来自微信app的用户请求。
若是计算的输出值不等于HTTP请求传入的签名值,则验证失败,错误消息:Token authentication failed.
使用nodejs开发微信消息服务器的简要步骤:
(1) 新建一个nodejs应用,package.json里定义依赖以下。定义启动脚本start执行的命令行为:
node server.js
(2) 实现server.js, 主要逻辑是接收前文描述的submit按钮点击以后,发送给微信消息服务器的HTTP验证请求,从请求中提取出时间戳(下图第17行)和nonce字段(下图第19行),使用SHA-1散列算法计算出一个哈希值(下图第29行),而后同HTTP请求传入的签名值比较(第31行). 若是两个值相等,在第32行将HTTP请求传入的echostr返回给微信公众平台,验证经过。
以前有一些SAP从业者们,吐槽微信公众平台上给出的代码示例是基于Python的,而不是SAP生态圈内的朋友们更经常使用的Java或者JavaScript. 若是想拷贝上图的nodejs源代码,能够在Jerry的SAP社区博客里得到。
最后,将这个nodejs应用部署到云平台上,好比腾讯云,阿里云,SAP云平台等。
我2017年写做的时候,选择的是heroku云平台,部署应用的详细步骤参考我这篇文章:
Step by step to host your UI5 application in Heroku
消息服务器部署到云平台以后,点击微信公众号后台控制台的submit按钮,从heroku的控制台上,能看到nodejs应用里用console.log打印出的日志,其中HTTP请求传入的签名值和nodejs应用里计算出的哈希值一致,因此验证经过。
验证经过后,微信公众号控制台的服务器配置字段,能看到is enabled的提示,说明该消息服务器已经可以接受用户使用微信app给微信公众号发送的消息了。
这个系列的下一篇文章,Jerry会介绍如何在微信消息服务器中接收用户用微信app发送给微信公众号的消息,处理以后如何推送回微信app.
感谢阅读。
更多Jerry的原创文章,尽在:"汪子熙":