企业级应用系统和微信集成的系列教程之一:微信开发环境的搭建

举报
Jerry Wang 发表于 2022/04/25 12:51:44 2022/04/25
【摘要】 系列目录(1) 微信开发环境的搭建 ( 本文 )(2) 如何通过微信公众号消费API(3) 微信用户关注公众号之后,自动在SAP C4C系统创建客户主数据(4) 如何将SAP C4C主数据变化推送给微信公众号(5) 如何将SAP UI5应用嵌入到微信公众号菜单中(6) 如何通过OAuth2获取微信用户信息并显示在SAP UI5应用中(7) 使用Redis存储微信用户和公众号的对话记录(8)...

系列目录

(1) 微信开发环境的搭建 ( 本文 )
(2) 如何通过微信公众号消费API
(3) 微信用户关注公众号之后,自动在SAP C4C系统创建客户主数据
(4) 如何将SAP C4C主数据变化推送给微信公众号
(5) 如何将SAP UI5应用嵌入到微信公众号菜单中
(6) 如何通过OAuth2获取微信用户信息并显示在SAP UI5应用中
(7) 使用Redis存储微信用户和公众号的对话记录
(8) 微信公众号的地图集成
(9) 如何将微信用户发送到微信公众号的消息保存到SAP C4C系统
(10) 如何在SAP C4C系统直接回复消息给微信公众号的订阅者
————————————————

最近有不少朋友在微信上向我咨询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&timestamp=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.

感谢阅读。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

举报
请填写举报理由
0/200