本系列的英文版 Jerry 写作于 2017 年,这个教程总共蕴含十篇文章,发表在 SAP 社区上。
最近有不少敌人在微信上向我征询 SAP 零碎和微信公众号集成的问题,因而我把过后写的英文版翻译成中文,从新公布在我的公众号上。
须要留神的是,时隔三年,微信公众号的开发流程可能有所变动,请大家自行甄别。和微信公众号集成的零碎,我三年前抉择的是 SAP Cloud for Customer.
搭建开发环境的前置条件
(1) 去微信公众平台申请一个微信公众号。
(2) 这个教程里的微信音讯服务器是用 nodejs 开发的,所以须要对 nodejs 的开发有一个根本的理解。
具体环境搭建流程
登录微信公众平台, 进入公众号治理控制台:Development->Basic configuration
在下图的 URL 字段里,保护你的微信音讯服务器地址。当咱们应用微信 app 往某个微信公众号发送音讯时,微信 app 会把该音讯转发给微信公众号绑定到的微信音讯服务器去。该音讯服务器处理完毕后,将处理结果推送回微信 app.
上图中我的微信音讯服务器部署在 heroku 云平台上,当然你也能够把本人用 nodejs 开发的微信音讯服务器,部署在其余的云平台,比方阿里云,腾讯云,SAP 云平台等均可。
仅仅简略地将云平台上的微信音讯服务器的 url 保护在上图的 URL 字段是不够的,咱们必须遵循微信公众号开发指南里定义的一个校验流程,从而让音讯服务器同微信公众号真正地建设绑定关系。
校验流程文档如下:
点击下图的 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 的原创文章,尽在:” 汪子熙 ”: