這是Jerry 2020年的第85篇文章,也是汪子熙公衆號總共第267篇原創文章。node
本系列的英文版Jerry寫做於2017年,這個教程總共包含十篇文章,發表在SAP社區上。git
系列目錄github
(1) 微信開發環境的搭建服務器
(2) 如何經過微信公衆號消費API微信
(3) 微信用戶關注公衆號以後,自動在SAP C4C系統建立客戶主數據微信開發
(4) 如何將SAP C4C主數據變化推送給微信公衆號(本文)app
(5) 如何將SAP UI5應用嵌入到微信公衆號菜單中函數
(6) 如何經過OAuth2獲取微信用戶信息並顯示在SAP UI5應用中測試
(7) 使用Redis存儲微信用戶和公衆號的對話記錄ui
(8) 微信公衆號的地圖集成
(9) 如何將微信用戶發送到微信公衆號的消息保存到SAP C4C系統
(10) 如何在SAP C4C系統直接回復消息給微信公衆號的訂閱者
最近有很多朋友在微信上向我諮詢SAP系統和微信公衆號集成的問題,所以我把當時寫的英文版翻譯成中文,從新發布在個人公衆號上。
須要注意的是,時隔三年,微信公衆號的開發流程可能有所變化,請你們自行鑑別。和微信公衆號集成的系統,我三年前選擇的是SAP Cloud for Customer.
這個系列的前一篇文章,微信用戶關注公衆號以後,自動在SAP C4C系統建立客戶主數據,咱們已經實現了這樣一個場景:微信用戶關注公衆號以後,在SAP Cloud for Customer(如下簡稱C4C)系統裏自動建立一個客戶主數據,並把該數據的Last Name字段設置成關注者的Wechat id.
成功建立的C4C客戶主數據的id也會經過微信消息發送到關注者的微信app上。
在C4C系統查看經過OData API建立的客戶主數據:
這個場景的數據交互流,微信app是消息的發送方,而SAP C4C系統是消息接收方,消息通訊經過nodejs開發的微信消息服務器完成。
本文咱們實現一個新的場景,當C4C的客戶主數據發生變化時,C4C主動通知微信關注者。在這個場景裏,C4C是消息的發送方,而微信app是消息的接收方。
前一篇文章裏,我選用C4C Account BO標準的LastName字段來存儲微信關注者的Wechat id:
這個客戶主數據的明細頁面以下:
本文我選擇在Customer BO上建立一個名爲WechatID的擴展字段,專門存放微信關注者的Wechat id.
在C4C系統中建立一個新的OData服務,選中新建的擴展字段WechatID,將其暴露到OData API中:
將新建的C4C OData服務重命名爲zindividualcustomer,在Postman裏測試,確保使用OData filter操做符時,可以讀取包括這個擴展字段在內的客戶主數據的值。
測試url:
https://<此處填入C4C系統的hostname>/sap/c4c/odata/cust/v1/zindividualcustomer/CustomerCommonCollection?$filter=ParentObjectID%20eq%20%2700163E20C9511EE7B8975BD4AB3F60C0%27
ParentObjectID字段後面紅色高亮值是Customer BO實例的guid.
咱們指望的行爲是,一旦客戶主數據在C4C系統被修改後,C4C系統會自動發送一個notification(通知)給微信消息服務器,後者收到通知後,調用微信消息API將該通知轉發給微信關注者。
一個好消息是,上面紅色高亮的行爲描述,是C4C系統一個開箱即用的功能:OData Event Notification. Jerry曾經成功地使用這個功能完成過不少原型開發,好比這篇文章裏介紹的一個案例:
一些SAP Partners可以經過二次開發實現打通C/4HANA和S/4HANA的方法介紹
下圖的設置含義是,一旦名稱爲CUSTOMER的BO數據發生變化時,發生變化的具體數據,經過下圖藍色高亮字段指定的OData服務,zindividualcustomer, 發送到綠色高亮字段指定的事件監聽者去。這個事件監聽者的endpoint經過url標識,即本系列部署在heroku雲平臺上的微信消息服務器:https://wechatjerry.herokuapp...
如今修改一個C4C客戶主數據並保存,C4C系統會調用咱們以前配置好的zindividualcustomer,經過HTTP POST的方式發送下列格式的數據到微信消息服務器:
上圖標號1表明發生變化的BO名稱,標號2表明發生變化的BO實例的guid,標號3表明OData服務endpoint,咱們在微信消息服務器裏訪問該endpoint,便可獲取包含WechatID擴展字段在內的BO數據。有了WechatID以後,咱們便可調用微信消息發送API,將BO發生變化的狀況發送給微信公衆號的關注者。
在微信消息服務器裏,響應來自C4C系統的HTTP POST請求,從請求中解析出發生變化的Customer BO實例的guid,存儲在第42行代碼的變量AccountBOguid裏,緊接着在第43行代碼的notifyWechatUser裏,根據AccountBOguid調用C4C OData拿到擴展字段WechatID的值,而後向該WechatID標識的微信用戶推送消息。
這裏我調用sendMessage函數,發送給微信關注者的文本是一段硬編碼的文字:
_getAccount的具體實如今個人Github上:
https://github.com/wangzixi-d...
最後,將前一篇文章介紹的場景聯合起來測試。首先關注微信公衆號,這個行爲會在C4C系統自動建立一個客戶主數據1000443:
在C4C系統打開這條主數據,修改以後保存:
而後在個人微信app上收到了一條推送信息,即以前在微信消息服務器裏硬編碼的一條文本:
下一篇文章,咱們會了解如何將SAP UI5應用嵌入到微信公衆號裏訪問。
感謝閱讀。
系列目錄
(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系統直接回復消息給微信公衆號的訂閱者
更多Jerry的原創文章,盡在:"汪子熙":