為尋找國內免費雲資源作為微信后台,花了一天時間試用SinaAppEngine(SAE),調試太不方便用戶體驗差。新浪作為媒體公司技術功底經不起考驗,亞馬遜能推出AWS,新浪還不行!更好選項是百度BaiduAppEngine(BAE),但最近盡然開始收費,還是安心回到force.com,至少老外承諾免費的東西一直免費且可靠。
第一步,申請force.com賬號,請至developer.force.com申請,如是www.salesforce.com申請下來的是作為客戶的賬號,不適合開發人員;第二步,創建一個Apex Rest Class,來作為微信服務接口,這里創建的類是WeChatRestController,Rest接口名稱是WeChatRest:
@RestResource(urlMapping='/WeChatRest/*') global with sharing class WeChatRestController{ @HttpGet global static void doGet(){ String signature = RestContext.request.params.get('signature'); String timestamp = RestContext.request.params.get('timestamp'); String nonce = RestContext.request.params.get('nonce'); String echostr = RestContext.request.params.get('echostr'); System.debug(echostr + ' - ' + timestamp); RestContext.response.addHeader('Content-Type', 'text/plain'); RestContext.response.responseBody = Blob.valueOf(echostr); //return echostr; } }
在微信中我們將使用這個接口來配置URL,配置時騰訊要求提供此URL,配置窗口如下:
補充說明,本文發表后騰訊又推出了“消息加解密密鑰”,其支持明文模式、兼容模式和安全模式三種,主要區別在於明文模式下騰訊推送給接口的是明文的XML消息,兼容模式下是既有明文XML消息也有加密后的XML消息,安全模式則只有加密后的XML消息,以為用戶提供更高級的安全支持,簡化大家的學習曲線,本文及以后的所有相關文章均采用明文模式。
騰訊將通過Get方式發送四個參數至此URL,URL格式如下(僅為示例):https://msd-developer-edition.ap1.force.com/services/apexrest/WeChatRest?signature=GenePoint&echostr=test×tamp=111&nonce=222如果URL返回的值和四個參數中的echostr值一致則騰訊認為驗證成功,如果不一致則認為驗證失敗,配置無法繼續,偷懶的方法是直接返回該值即可,風險是你的URL也可以被其他人亂用。這里的echostr的值實際上是根據用戶在騰訊后台配置的Token加上時間戳,再加上nonce參數的值按照一定的算法計算出來的,具體算法參照附注,這里不贅述。代碼需要說明的地方是如果直接返回echostr,force.com默認會是一個xml結構的內容,騰訊會認為和echostr值不等,判斷為配置失敗。為此,需要通過Blog.valueOf方法來將其直接轉換為文本信息。第三步,配置Site.com以啟用公網訪問此URLforce.com類以及網頁等默認是需要用戶驗證后才能通過訪問,但我們可以通過site.com啟用公網訪問此URL,為此首先需要創建域名,進入Develop->Sites,輸入想創建的域名,例如筆者的域名為johnson0001:
http://johnson0001-developer-edition.ap1.force.com
創建成功后下一步創建站點,點擊New按鈕:
在接下來的站點信息輸入畫面輸入Site label,Site Name,選擇任一頁面作為“Active Site Home Page”(這里不需要建網頁,任意選即可),保持其他選項不變,點擊“save”按鈕:
在緊接下來的畫面里點擊“Public Access Settings”按鈕,
在接下來的畫面里找到“Enable Apex Class Access”,點擊Edit按鈕
將WeChatRestController類添加到右邊的列表里,這將使得該類支持匿名公開訪問:
最后回到Sites首頁,點擊“Activate”按鈕激活站點,此時既可以通過以下URL訪問我們開發的接口(留意可能需要等幾分鍾URL才會生效):
https://johnson0001-developer-edition.ap1.force.com/services/apexrest/WeChatRest
第四步,配置騰訊后台,在開發模式下,輸入此URL,並輸入任意Token,點擊提交按鈕,如騰訊提示成功則表明成功完成配置:
附注:驗證URL Echostr算法:1. 將Token(用戶在騰訊后台配置的值), 時間戳(騰訊請求URL時傳過來的timestamp值),nonce(騰訊請求URL時傳過來的nonce值)按照字母順序進行排列;2. 排列好后拼接成一個字符串;3.通過sha1算法轉換此字符串后的結果如果正常就是echostr的值,