最近一直忙於微信三方開發平臺開發,更新一下,作個記錄,微信第三方開發平臺受權流程示例:javascript
先看受權流程要拿到的結果:html
照例先給出微信受權流程官網頁面:https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1453779503&token=&lang=zh_CNjava
接下來是受權流程:jquery
文檔:數據庫
受權的方式分爲兩種,分別爲:api
此過程當中我這邊使用的是第一種方法。以上屬於文檔中給定的總的受權方法,接下來咱們去實現它:緩存
首先看第一步:獲取第三方平臺componment_access_token:微信
官方文檔:併發
實現:app
Postman運行示例:
代碼示例:
1 /** 2 * 調取第三方平臺component_access_token(有效期兩個小時)的接口 3 */ 4 public static Pubcache getNewComponentAccessToken(){ 5 Map<String, String> map = new HashMap<>(); 6 map.put("component_appid", WXconfig.COMPONENT_APPID); 7 map.put("component_appsecret", WXconfig.COMPONENT_APPSECRET); 8 map.put("component_verify_ticket", WxCacheUtil.getComponentVerifyTicket()); 9 DebugUtils.savaDebugInfo(null, "從緩存中取出的爲component_verify_ticket====================", WxCacheUtil.getComponentVerifyTicket()); 10 String postData = JsonUtils.convert(map); 11 String url = "https://api.weixin.qq.com/cgi-bin/component/api_component_token"; 12 String result = WxUtil.httpsRequest(url, "POST", postData); 13 Map<String, String> cat = CompenmentAuthorize.parseJSONMap(result); 14 //存緩存 15 Pubcache pubcache = new Pubcache(); 16 pubcache.setKeyName("component_access_token"); 17 pubcache.setKeyValue(cat.get("component_access_token")); 18 pubcache.setLastUpdate(new Date()); 19 return pubcache; 20 }
說明:componmentVerifyTicket是微信第三方全網發佈以後每隔十分鐘推送的ticket,我在接收ticket的時候存入了數據庫中,因此此時的WxCacheUtil.getComponentVerifyTicket()方法是從數據庫中讀取的最新推送的一條數據;WXconfig.COMPONENT_APPID是三方商務平臺的appid,
WXconfig.COMPONENT_APPSECRET是三方商務平臺的appsecret;
運行結果返回和微信文檔中返回一致則正確,此時成功獲取到最新的componment_access_token;由於componment_access_token有效期兩個小時,建議緩存起來
或者存入數據庫,在考慮併發的狀況下建議寫個定時器在一分五十秒左右去定時刷新componment_access_token,避免componment_access_token失效或者被別處
方法調用而更新掉致使無效。
第二步:獲取預受權碼pre_auth_code:
官方文檔:
postman運行示例:
參數說明:param裏面的componment_access_token就是上一步驟中獲取到的componment_access_token,而後post請求中的componment_appid就是三方商務平臺
的appid,而後運行postman,結果會返回預受權碼以及有效時間。
第三步:使用受權碼換取公衆號受權信息:
這個時候使用一個寫好的頁面:
1 <html> 2 <head> 3 <meta charset="utf-8"> 4 5 <meta name="keywords" content=""> 6 <meta name="description" content=""> 7 <title></title> 8 <script src="STYLE/JS/jquery-1.8.3.min.js" type="text/javascript" charset="utf-8"></script> 9 <script type="text/javascript"> 10 //獲取連接參數函數 11 function goToAuth(){ 12 var url = "https://mp.weixin.qq.com/cgi-bin/componentloginpage?component_appid=12345678&pre_auth_code=xxxxxxx&redirect_uri=http%3A%2F%2Fxxx.com%2Fxxxx%2Fevent%2xxxxx.do&auth_type=1"; 13 window.location.href = url; 14 }; 15 </script> 16 </head> 17 <body> 18 <div class="main"> 19 <div class="ewm"> 20 <input type="button" value="受權" onclick="goToAuth();"> 21 </div> 22 </div> 23 </body> 24 </html>
說明:把頁面js中的componment_appid換成本身這邊三方商務平臺的componment_appid,把pre_auth_code替換成剛纔獲取到的預受權碼,而後再把回跳地址替換一下,運行此頁面會生成一個受權二維碼頁面,當公衆號管理員掃描進行受權以後,回調url會返回受權碼authorization_code和過時時間。
第四步:獲取受權信息:
微信文檔:
postMan示例:
填入對應的參數,運行postman,獲取到受權信息保存便可。