說一說微信第三方平臺的初步集成

微信火了這麼久,這兩週第一次從一個開發者的角度來研究微信的生態系統而不是應用自己。如今作國內的項目或者產品不免都須要集成微信,其實如今微信背後的支撐平臺已是很是繁雜的了:html

  • 公衆平臺(訂閱號、服務號、企業號、小程序)
  • 開放平臺(網頁應用、移動應用、公衆號第三方平臺開發)
  • 商戶平臺 (支付)
  • 服務商平臺(代支付)

是否是感受有點懵,這麼多平臺如何選擇,仍是須要根據本身系統的業務來看。我今天說的是開放平臺的初步集成。java

採用倒序的方式咱們一步步來講:redis

  1. 開放平臺須要代公衆號實現功能,就必須拿到公衆號的accessToken,而後再去使用公衆平臺接口。那麼獲取accessToken的過程實際就是公衆平臺受權給你這個第三方開放平臺的過程。至關於他給你了一把打開他家門的鑰匙。詳見官方文檔第5步.
  2. 得到鑰匙的過程但是須要一些功夫的,由於老換鎖啊,每7200s換一次,因此有位管理員大爺出現了,就是refresh_token,鎖換了找大爺拿把新的就行。那麼這個管理員大爺怎麼找到的呢?是在第一次受權成功後會經過參數返回給你的一個authorization_code這個至關因而地圖,能讓你第一次在毫無經驗的狀況下找到第一把鑰匙和管理員大爺,也就是官方文檔的第4步。
  3. 想要找到地圖,給公衆平臺的管理員發個連接吧https://mp.weixin.qq.com/cgi-bin/componentloginpage?component_appid=xxxx&pre_auth_code=xxxxx&redirect_uri=xxxx,redirect_uri就是把authorization_code給你的入口。例如你寫的是redirect_uri=mydomain.com/authrize/callback,那麼一旦受權成功,瀏覽器就會跳轉到mydomain.com/authrize/callback?auth_code=xxxx上來,你就能夠獲取authorization_code這個地圖了。
  4. 上一步的連接中有一個pre_auth_code那麼這個值怎麼來的?是經過api_create_preauthcode這個接口得到的。而調用這個接口又須要component_access_token,這個東東就是一個令牌,你做爲第三方平臺調用微信任何API都必須有這個令牌,得到這個令牌的辦法就是用調用api_component_token經過component_verify_ticket去換。(仔細想想,其實component_verify_ticket=refresh_token, component_access_token=accessToken

這裏面涉及到的變量不少,特別須要注意一些的:算法

  • component_verify_ticket 這張門票是微信推送,大概每隔十分鐘推一次。
  • api_component_token剛纔說了是用上面的那張門票換的,可是有保質期,2小時,那麼能不能每次要調接口都用門票換一下?人家微信是有天天的接口調用次數限定的,因此建議用個cache緩存起來,到了1小時50分的時候讓緩存失效,失效再去call API換。能夠用redis的TTL實現。
  • 類比的上文第1步提到的公衆號的accessToken也是有保質期的,因此必定要保存好對應的refresh_token,到了1小時50分的時候再去換accessToken

一旦拿到公衆號的accessToken,那麼就能夠像普通公衆號的後臺服務那樣,好比獲取粉絲列表啊,推送文章圖片啊等等。小程序

PS: 最好採用加解密算法來進行消息的接受和推送。這裏面有一個坑:api

異常java.security.InvalidKeyException:illegal Key Size的解決方案:在官方網站下載JCE無限制權限策略文件

另外根據官網提示首次驗證服務器地址的有效性,必須返回一樣的echostr瀏覽器

相關文章
相關標籤/搜索