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

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

最近有很多朋友在微信上向我諮詢SAP系統和微信公衆號集成的問題,所以我把當時寫的英文版翻譯成中文,從新發布在個人公衆號上。算法

須要注意的是,時隔三年,微信公衆號的開發流程可能有所變化,請你們自行鑑別。和微信公衆號集成的系統,我三年前選擇的是SAP Cloud for Customer.json

搭建開發環境的前置條件服務器

(1) 去微信公衆平臺申請一個微信公衆號。
(2) 這個教程裏的微信消息服務器是用nodejs開發的,因此須要對nodejs的開發有一個基本的瞭解。微信

具體環境搭建流程

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

在下圖的URL字段裏,維護你的微信消息服務器地址。當咱們使用微信app往某個微信公衆號發送消息時,微信app會把該消息轉發給微信公衆號綁定到的微信消息服務器去。該消息服務器處理完畢後,將處理結果推送回微信app.app

上圖中個人微信消息服務器部署在heroku雲平臺上,固然你也能夠把本身用nodejs開發的微信消息服務器,部署在其餘的雲平臺,好比阿里雲,騰訊雲,SAP雲平臺等都可。微信公衆平臺

僅僅簡單地將雲平臺上的微信消息服務器的url維護在上圖的URL字段是不夠的,咱們必須遵循微信公衆號開發指南里定義的一個校驗流程,從而讓消息服務器同微信公衆號真正地創建綁定關係。ui

校驗流程文檔以下:阿里雲

點擊下圖的submit按鈕以後,微信公衆平臺會發送一個HTTP請求到咱們開發的微信消息服務器去:

HTTP請求的url格式以下:

https://<your server url>/?signature=096abd439b41f9610aeabe2d7534084fd8dafa20&echostr=16168327802220428137&timestamp=1512810825&nonce=384289189

咱們的微信消息服務器,收到這個請求後,將微信公衆號的帳號令牌, HTTP請求裏包含的時間戳和nonce字段做爲輸入,按照微信開發指南里的說明計算一個輸出值,若是該輸出值和HTTP請求傳入的簽名值(signature)相等,則該微信消息服務器經過驗證,後續能夠接收來自微信app的用戶請求。

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

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

(1) 新建一個nodejs應用,package.json裏定義依賴以下。定義啓動腳本start執行的命令行爲:

node server.js

(2) 實現server.js, 主要邏輯是接收前文描述的submit按鈕點擊以後,發送給微信消息服務器的HTTP驗證請求,從請求中提取出時間戳(下圖第17行)和nonce字段(下圖第19行),使用SHA-1散列算法計算出一個哈希值(下圖第29行),而後同HTTP請求傳入的簽名值比較(第31行). 若是兩個值相等,在第32行將HTTP請求傳入的echostr返回給微信公衆平臺,驗證經過。

以前有一些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應用裏計算出的哈希值一致,因此驗證經過。

驗證經過後,微信公衆號控制檯的服務器配置字段,能看到is enabled的提示,說明該消息服務器已經可以接受用戶使用微信app給微信公衆號發送的消息了。

這個系列的下一篇文章,Jerry會介紹如何在微信消息服務器中接收用戶用微信app發送給微信公衆號的消息,處理以後如何推送回微信app.

感謝閱讀。

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

相關文章
相關標籤/搜索