SAP系統和微信整合的系列教程之一:微信開發環境的搭建

i042416發表於2021-01-06

本系列的英文版Jerry寫作於2017年,這個教程總共包含十篇文章,發表在 SAP社群上。

最近有不少朋友在微信上向我諮詢SAP系統和微信公眾號整合的問題,因此我把當時寫的英文版翻譯成中文,重新發布在我的公眾號上。

需要注意的是,時隔三年,微信公眾號的開發流程可能有所變化,請大家自行鑑別。和微信公眾號整合的系統,我三年前選擇的是SAP Cloud for Customer.

搭建開發環境的前置條件

(1) 去 微信公眾平臺申請一個微信公眾號。 (2) 這個教程裡的微信訊息伺服器是用nodejs開發的,所以需要對nodejs的開發有一個基本的瞭解。

具體環境搭建流程

登入 微信公眾平臺, 進入公眾號管理控制檯:Development->Basic configuration


SAP系統和微信整合的系列教程之一:微信開發環境的搭建


在下圖的URL欄位裡,維護你的微信訊息伺服器地址。當我們使用微信app往某個微信公眾號傳送訊息時,微信app會把該訊息轉發給微信公眾號繫結到的微信訊息伺服器去。該訊息伺服器處理完畢後,將處理結果推送回微信app.


SAP系統和微信整合的系列教程之一:微信開發環境的搭建


上圖中我的微信訊息伺服器部署在heroku雲平臺上,當然你也可以把自己用nodejs開發的微信訊息伺服器,部署在其他的雲平臺,比如阿里雲,騰訊雲,SAP雲平臺等均可。

僅僅簡單地將雲平臺上的微信訊息伺服器的url維護在上圖的URL欄位是不夠的,我們必須遵循微信公眾號開發指南里定義的一個校驗流程,從而讓訊息伺服器同微信公眾號真正地建立繫結關係。

校驗流程文件如下:


SAP系統和微信整合的系列教程之一:微信開發環境的搭建


點選下圖的submit按鈕之後,微信公眾平臺會傳送一個HTTP請求到我們開發的微信訊息伺服器去:


SAP系統和微信整合的系列教程之一:微信開發環境的搭建


HTTP請求的url格式如下:

https:///?signature=096abd439b41f9610aeabe2d7534084fd8dafa20&echostr=16168327802220428137&timestamp=1512810825&nonce=384289189

我們的微信訊息伺服器,收到這個請求後,將微信公眾號的賬號令牌, HTTP請求裡包含的時間戳和nonce欄位作為輸入,按照微信開發指南里的說明計算一個輸出值,如果該輸出值和HTTP請求傳入的簽名值(signature)相等,則該微信訊息伺服器透過驗證,後續可以接收來自微信app的使用者請求。

如果計算的輸出值不等於HTTP請求傳入的簽名值,則驗證失敗,錯誤訊息:Token authentication failed.


SAP系統和微信整合的系列教程之一:微信開發環境的搭建


使用nodejs開發微信訊息伺服器的簡要步驟:

(1) 新建一個nodejs應用,package.json裡定義依賴如下。定義啟動指令碼start執行的命令列為:

node server.js


SAP系統和微信整合的系列教程之一:微信開發環境的搭建


(2) 實現server.js, 主要邏輯是接收前文描述的submit按鈕點選之後,傳送給微信訊息伺服器的HTTP驗證請求,從請求中提取出時間戳(下圖第17行)和nonce欄位(下圖第19行),使用SHA-1雜湊演算法計算出一個雜湊值(下圖第29行),然後同HTTP請求傳入的簽名值比較(第31行). 如果兩個值相等,在第32行將HTTP請求傳入的echostr返回給微信公眾平臺,驗證透過。


SAP系統和微信整合的系列教程之一:微信開發環境的搭建


之前有一些SAP從業者們,吐槽微信公眾平臺上給出的程式碼示例是基於Python的,而不是SAP生態圈內的朋友們更常用的Java或者JavaScript. 如果想複製上圖的nodejs原始碼,可以在Jerry的 SAP社群部落格裡獲得。

最後,將這個nodejs應用部署到雲平臺上,比如騰訊雲,阿里雲,SAP雲平臺等。

我2017年寫作的時候,選擇的是heroku雲平臺,部署應用的詳細步驟參考我這篇文章:

Step by step to host your UI5 application in Heroku

訊息伺服器部署到雲平臺之後,點選微信公眾號後臺控制檯的submit按鈕,從heroku的控制檯上,能看到nodejs應用裡用console.log列印出的日誌,其中HTTP請求傳入的簽名值和nodejs應用裡計算出的雜湊值一致,所以驗證透過。


SAP系統和微信整合的系列教程之一:微信開發環境的搭建


驗證透過後,微信公眾號控制檯的伺服器配置欄位,能看到is enabled的提示,說明該訊息伺服器已經能夠接受使用者使用微信app給微信公眾號傳送的訊息了。


SAP系統和微信整合的系列教程之一:微信開發環境的搭建


這個系列的下一篇文章,Jerry會介紹如何在微信訊息伺服器中接收使用者用微信app傳送給微信公眾號的訊息,處理之後如何推送回微信app.

感謝閱讀。

更多Jerry的原創文章,盡在:"汪子熙":

SAP系統和微信整合的系列教程之一:微信開發環境的搭建


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24475491/viewspace-2747834/,如需轉載,請註明出處,否則將追究法律責任。

相關文章