企业级应用系统和微信集成的系列教程之三:微信用户关注公众号之后,自动在C4C系统创建客户主数据

举报
Jerry Wang 发表于 2022/04/25 12:54:12 2022/04/25
【摘要】 最近有不少朋友在微信上向我咨询SAP系统和微信公众号集成的问题,因此我把当时写的英文版翻译成中文,发表在华为云社区上。 系列目录(1) 微信开发环境的搭建(2) 如何通过微信公众号消费API(3) 微信用户关注公众号之后,自动在SAP C4C系统创建客户主数据(4) 如何将SAP C4C主数据变化推送给微信公众号(本文)(5) 如何将SAP UI5应用嵌入到微信公众号菜单中(6) 如何通过O...

最近有不少朋友在微信上向我咨询SAP系统和微信公众号集成的问题,因此我把当时写的英文版翻译成中文,发表在华为云社区上。

系列目录

(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.

本文实现的场景是:我申请了一个用于测试的微信公众号,用户点击“关注”按钮:

在微信app上收到了一条微信消息服务器发送的提示关注成功的自定义消息:

同时,微信消息服务器调用SAP Cloud for Customer(以下简称SAP C4C) OData API,在C4C系统创建了一条客户主数据,类型为Individual Customer. 成功创建的C4C客户主数据id,1000441,也一并发送到微信app上:

根据这个id,即可在C4C系统查询到微信用户关注公众号之后自动生成的客户主数据:

下面是这个场景的实现细节。在动手编码之前,请确保你已经完成了这个系列之前两篇文章里提到的步骤:

(1) 微信开发环境的搭建
(2) 如何通过微信公众号消费API

具体实现步骤

我们需要在nodejs实现的微信消息服务器里调用SAP C4C OData API,因此需要在nodejs应用里指定C4C OData API的endpoint. 创建一个config.js文件,实现config module:

第二行创建C4C客户主数据的OData url,可以在SAP官方github的C4C OData开发指南仓库里找到,链接如下

而第五行的accessToken作用是什么呢?

回忆前一篇文章 SAP系统和微信集成的系列教程之二:如何通过微信公众号消费API 描述的场景,当时用户在微信app里给微信公众号发送消息,然后以同步的方式收到回复。

而本文试图实现的场景,微信用户关注公众号之后,触发SAP C4C客户主数据的创建,这个创建通过C4C OData API完成,是一个异步操作。客户主数据创建成功后,微信消息服务器会主动给微信用户推送一条创建成功的消息。

这个主动推送消息的行为,必须满足两个前提条件才能成功:

(1) 推送消息的接收方,必须已经关注了微信消息服务器绑定的微信公众号。
(2) 调用微信推送消息的API时,必须使用基于微信消息服务器的app id和app secret换取的Access Token.

为了简单起见,我事先调用换取Access Token的微信API,传入app id和app secret,拿到token,然后硬编码到config.js里。当然因为该token默认2小时后就会过期,所以也可以采用编程的方式,调用微信API获取,实现代码在这个链接里。

当微信用户点击“关注”按钮关注公众号之后,微信消息服务器会收到一个HTTP POST请求,event key为"subscribe". 微信消息服务器从请求里解析出微信用户的Wechat ID.

代码实现如下:

其中第18行,如果event变量值为subscribe,说明用户点击了“关注”按钮,进入对应的if分支处理。

第19行的replyxml,包含了一条硬编码的消息,即用户关注公众号之后,在微信app里收到的欢迎消息。

第20行的变量fromUserName,储存的是包含在HTTP POST请求里的关注者Wechat ID. 后续微信消息服务器主动给关注者推送C4C客户主数据创建成功的消息时,调用微信消息推送API,会用到这个Wechat ID.

第21行的createAccount方法,调用C4C OData API创建客户主数据。

下面是createAccount的实现源代码,在这个链接里能找到。

因为涉及到C4C数据的创建操作,需要使用HTTP POST,因此在真正调用C4C客户主数据创建API(上图第64行)之前,需要先调另一个API,拿到XSRF token(上图第62行的getToken).

我们需要建立一个简单的映射机制,把微信关注者和C4C系统里创建的客户主数据关联起来。这里我采取的逻辑是,把C4C创建的客户的FirstName字段硬编码成Wechat,而LastName存储成微信关注者的Wechat ID:

从下面C4C系统截图,能看到公众号关注者的Wechat ID已经存储到创建的客户主数据的Name字段上了。

C4C客户主数据创建成功之后,微信消息服务器调用工具方法postWCMessage, 主动推送一条创建成功的消息给点击了“关注”按钮的微信用户:

函数postWCMessage的实现源代码链接.

主动推送消息给微信用户的API可以在Postman等工具里方便地进行测试:

消息推送成功后,被推送消息的用户在微信app上收到的消息如图:

本系列的第四篇文章,我们会实现另一个场景:当SAP C4C系统的客户主数据发生变化之后,主动推送消息给关注了微信公众号的微信用户。

感谢阅读。

系列目录

(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系统直接回复消息给微信公众号的订阅者

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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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

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