這是Jerry 2020年的第84篇文章,也是汪子熙公衆號總共第266篇原創文章。node
本系列的英文版Jerry寫做於2017年,這個教程總共包含十篇文章,發表在SAP社區上。git
(1) 微信開發環境的搭建github
(2) 如何經過微信公衆號消費API編程
(3) 微信用戶關注公衆號以後,自動在SAP C4C系統建立客戶主數據服務器
(4) 如何將SAP C4C主數據變化推送給微信公衆號(本文)微信
(5) 如何將SAP UI5應用嵌入到微信公衆號菜單中微信開發
(6) 如何經過OAuth2獲取微信用戶信息並顯示在SAP UI5應用中併發
(7) 使用Redis存儲微信用戶和公衆號的對話記錄app
(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系統直接回復消息給微信公衆號的訂閱者
更多Jerry的原創文章,盡在:"汪子熙":