这是Jerry 2020年的第84篇文章,也是汪子熙公众号总共第266篇原创文章。

本系列的英文版Jerry写作于2017年,这个教程总共包含十篇文章,发表在SAP社区上:

https://blogs.sap.com/2017/12/10/wechat-development-series-1-setup-your-development-environment/

系列目录

(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开发指南仓库里找到,链接如下:

https://github.com/SAP/C4CODATAAPIDEVGUIDE

而第五行的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获取,实现代码如下:

https://github.com/wangzixi-diablo/wechat-sap-integration/blob/main/jerryapp/routes/AuthorizationAndDirect.js

当微信用户点击“关注”按钮关注公众号之后,微信消息服务器会收到一个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的实现源代码,在下面的链接里能找到:

https://github.com/wangzixi-diablo/wechat-sap-integration/blob/main/jerryapp/service/createAccountInC4C.js

因为涉及到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的实现源代码:

https://github.com/wangzixi-diablo/wechat-sap-integration/blob/main/jerryapp/service/postMessageToUser.js

主动推送消息给微信用户的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系统直接回复消息给微信公众号的订阅者

公众号向特定用户主动推送消息_SAP系统和微信集成的系列教程之三:微信用户关注公众号之后,自动在SAP C4C系统创建客户主数据...相关推荐

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

    这是Jerry 2020年的第84篇文章,也是汪子熙公众号总共第266篇原创文章. 本系列的英文版Jerry写作于2017年,这个教程总共包含十篇文章,发表在SAP社区上. 系列目录 (1) 微信开发 ...

  2. 公众号向特定用户主动推送消息_小程序商城,商家神器!微信导购助手内测,能主动联系公众号粉丝...

    小程序·做出来·会使用 做小程序的钱才不白花 我们可以多聊聊,如何运营你的小程序? - 正 文 - 微信导购助手内测 "我公众号有几万粉丝,除了推文,我可以主动给他们发消息吗?" ...

  3. 公众号向特定用户主动推送消息_公众号助手——消息不仅可以群发,还不限制次数!...

    在这个资讯发达的当下,营销号十分活跃,不管是微博.微信,还是其他平台上都存在着各种类型的以营销为目的的账号.营销号通过对各种热点.时事发表评论收获流量和热度,或者是在特定领域内发表原创内容吸引粉丝,在 ...

  4. PHP实现微信公众号主动推送消息

    这篇文章主要介绍了php实现微信公众号主动推送消息的方法,PHP版微信公共平台消息主动推送,突破订阅号一天只能发送一条信息限制,需要的朋友可以参考下. 通过学习借鉴朋友的实现方法进行整理,实现了PHP ...

  5. php 主动推送消息,php实现微信公众号主动推送消息

    通过学习借鉴朋友的实现方法进行整理,实现了PHP版的微信公共平台消息主动推送,分享给大家供大家参考,具体内容如下 此方法是通过模拟登录微信公共平台的方法来实现的. 代码如下: 一.登录接口部分代码 / ...

  6. 微信公众号如何无限制的定向推送消息--模板消息的应用

    微信公众号如何无限制的定向推送消息–模板消息的应用 最近开发的OA平台有一个需求:将待办消息推送到微信公众号的指定用户.但是为了避免用户受到垃圾消息的骚扰,微信对相关的接口做了非常严格的限制. 查阅开 ...

  7. SAP系统和微信集成的系列教程之四:如何将SAP C4C主数据变化推送给微信公众号的关注者

    这是Jerry 2020年的第85篇文章,也是汪子熙公众号总共第267篇原创文章. 本系列的英文版Jerry写作于2017年,这个教程总共包含十篇文章,发表在SAP社区上. 系列目录 (1) 微信开发 ...

  8. 服务器主动推送消息数据给客户端

    1 引言 这个问题第一次是我在实现一个导师的方案的时候所发现的,一开始我需要实现服务器与客户端的密钥协商和数据传递,服务器需要主动分发(推送)密钥给客户端,因为以前没有做过相关编码,后来只能想到用反向 ...

  9. SAP系统和微信集成的系列教程之七:使用Redis存储微信用户和公众号的对话记录

    这是Jerry 2020年的第88篇文章,也是汪子熙公众号总共第269篇原创文章. 本系列的英文版Jerry写作于2017年,这个教程总共包含十篇文章,发表在SAP社区上. 系列目录 (1) 微信开发 ...

最新文章

  1. proxmox 宕机转义_Proxmox+Ceph的HCI环境搭建
  2. docker 启动sqlserver_在Docker上安装MSSQL(SQL Server)
  3. 初识未来趋势:Java与Kotlin;EclipsE与IntelliJ
  4. 用Windows API实现多线程--原理例子
  5. 使用 GitHub, Jekyll 打造自己的免费独立博客
  6. go mysql存储过程_Golang 调用MySQL存储过程
  7. Mapper 接口无法注入或Invalid bound statement (not found)
  8. 反射parameter field_Java反射有多强?这5大神奇功能,你需要了解!
  9. [转载]VC6中的文件后缀
  10. 记一次抓包和破解App接口
  11. java远程关机代码_使用shutdown命令实现局域网内远程关机、重启整蛊他人
  12. 电脑取消撤销快捷键是什么_用快捷键如何撤销当前操作?(记住电脑快捷键秒变电脑老司机)...
  13. Updates were rejected because the tip of your current branch is behind hint: its remote counterpart
  14. 支持服务器和客户端杀毒软件,服务器上小心使用杀毒软件和软件防火墙
  15. Design Compiler工具学习笔记(6)
  16. 删除K个数字,使剩下的数字串最大(最大数字)
  17. 全球及中国空气净化器市场销售模式与营销策略前景咨询报告2022版
  18. WPF 委托和事件实现子窗口回调函数, 实时刷新主窗口控件
  19. 3D Instance Embedding Learning With a Structure-Aware Loss Function for Point Cloud Segmentation
  20. e.hash oldCap == 0 详细解读

热门文章

  1. ES5和ES6中的变量声明提升
  2. unity3d 2D版本见缝插针demo
  3. dat14-memcached
  4. Android -- App生成快捷方式
  5. page对保护的作用
  6. 认识Linux下的硬盘分区
  7. 英文字典。怎样设计数据结构
  8. ZZULIOJ069:向z同学学习
  9. OJ1052: 数列求和4(C语言)
  10. eclipse mysql jdbc驱动_java – 如何将JDBC mysql驱动程序添加到Eclipse项目?