企业级应用系统和微信集成的系列教程之三:微信用户关注公众号之后,自动在C4C系统创建客户主数据
最近有不少朋友在微信上向我咨询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系统创建客户主数据
(5) 如何将SAP UI5应用嵌入到微信公众号菜单中
(6) 如何通过OAuth2获取微信用户信息并显示在SAP UI5应用中
(7) 使用Redis存储微信用户和公众号的对话记录
(8) 微信公众号的地图集成
(9) 如何将微信用户发送到微信公众号的消息保存到SAP C4C系统
(10) 如何在SAP C4C系统直接回复消息给微信公众号的订阅者
- 点赞
- 收藏
- 关注作者
评论(0)