前段時(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自帶的),代碼用的是微信提供的。
代碼如下
$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_