前段時(shí)間做了一個(gè)微信第三方授權(quán),一直想寫一篇文章分享一下,但是總是忙,今天終于有空閑給寫出來(lái)了,整個(gè)流程很簡(jiǎn)單清晰,在簽名驗(yàn)證的地方可能有點(diǎn)兒小坑,并且在用戶取消授權(quán)的時(shí)候,微信api說(shuō)的是會(huì)把消息推送到回調(diào)地址中,在這里強(qiáng)調(diào)一下這個(gè)回調(diào)地址不是授權(quán)時(shí)候的回調(diào)地址,而是你申請(qǐng)第三方平臺(tái)時(shí)候填寫的授權(quán)地址,閑話少說(shuō)進(jìn)入正題。(如有問(wèn)題,可留言交流)

簡(jiǎn)單流程先描述

  用戶點(diǎn)擊授權(quán)按鈕 -> 獲取第三方令牌 -> 獲取預(yù)授權(quán)碼 -> 進(jìn)入微信授權(quán)頁(yè)面 -> 用戶掃碼授權(quán) -> 微信推送授權(quán)結(jié)果

第一步 維護(hù)微信推送的 component_verify_ticket

  在第三方平臺(tái)創(chuàng)建審核通過(guò)后,微信服務(wù)器會(huì)向其“授權(quán)事件接收URL”每隔10分鐘定時(shí)推送component_verify_ticket,該ticket是加密的xml串,需要解碼獲取到ticket值(用于獲取預(yù)授權(quán)碼);

  解密用的是php的加解密模塊(安裝php自帶的),代碼用的是微信提供的。

  代碼如下

電腦培訓(xùn),計(jì)算機(jī)培訓(xùn),平面設(shè)計(jì)培訓(xùn),網(wǎng)頁(yè)設(shè)計(jì)培訓(xùn),美工培訓(xùn),Web培訓(xùn),Web前端開(kāi)發(fā)培訓(xùn)

     $timeStamp  = empty($_GET['timestamp']) ? "" : trim($_GET['timestamp']); // 時(shí)間戳         $nonce      = empty($_GET['nonce']) ? "" : trim($_GET['nonce']); // 隨機(jī)字符         $msg_sign   = empty($_GET['msg_signature']) ? "" : trim($_GET['msg_signature']); // 簽名(公鑰)         $encryptMsg = file_get_contents('php://input'); // xml         $xml_tree = new \DOMDocument();         $xml_tree->loadXML($encryptMsg);         $array_