【微信-开放平台-第三方平台】授权篇

官方授权流程说明
授权流程:
【微信-开放平台-第三方平台】授权篇

步骤1:第三方平台方获取预授权码(pre_auth_code)

需要调用获取预授权码pre_auth_code的API
【微信-开放平台-第三方平台】授权篇
这边需要一个参数叫component_access_token,所以我们要先获取这个参数
【微信-开放平台-第三方平台】授权篇
这边又需要一个参数component_verify_ticket,所以我们还得先得到这个参数
【微信-开放平台-第三方平台】授权篇
这边需要注意一点,微信推送的信息需要解密后才能得到ComponentVerifyTicket,参考官方文档消息加解密接入指引
推送过来的信息包括

array (
  'signature' => 'b77839dfcd586c38qqq10a5507c65a6d52321048',
  'timestamp' => '1546963755',
  'nonce' => '1363831928',
  'encrypt_type' => 'aes',
  'msg_signature' => '947f5cb323972abc897981a328419289a0f5af5f',
)
<xml>
    <AppId><![CDATA[wxc2edd7434ad0rr34]]></AppId>
    <Encrypt><![CDATA[EnD9uCCGRQ6WLQ9uY8JkgaaakTYU/+VrTuI2G1fD2yvkxyCHmo6z3IPGluqcvRMUq4ZLjKUKYVnjgF+eIm0YAUyDxe9nb6KuxRZqX5aG8Ovmg2CDJ6akbo9ht3dRFZGPgz25d7E4hljulmYGjeq510x7XJvMemDBQf06dDT+mW2abJM9Rxp28AYmBJV4uTcMakY9dcHajUBWA14gM1QMVwW+jnrbLhO6Dzlmb7GGf1+ZMy8227Lk1wsPTaGJA/6ObofBbgruG4EQjT+decle6G/mVK802nwdXFXR9DqQpEeCVjkjYCRCXrFLOOzRdGhiGsRmMLa/pPRr3SXhqN7nCFezM6BzuhlhIj7ZRPBYGwW8EK21OvBKQR03r+LWvMa1oExQq8vwky5Svr/bo9PjIDji2h7w1UNxBFTfXZMOgTU3l/RtEGrHg35p5AnbxHoH1V3mn6DqiLnmCa3TgtN6Xw==]]></Encrypt>
</xml>

官方的解密代码只能解析包含ToUserName的标签,所以要先构造下

$format = "<xml><ToUserName><![CDATA[".$arr['AppId']."]]></ToUserName><Encrypt><![CDATA[%s]]></Encrypt></xml>";
$from_xml = sprintf($format, $arr['Encrypt']);

然后就是解密了

import("WXBizMsgCrypt.wxBizMsgCrypt",EXTEND_PATH);
$pc = new \WXBizMsgCrypt($token, $encodingAesKey, $appId);
$msg = '';
$errCode = $pc->decryptMsg($post['msg_signature'], $post['timestamp'], $post['nonce'], $from_xml, $msg);

$errCode==0表示解密成功,得到需要的ComponentVerifyTicket

<xml>
<AppId><![CDATA[wxc2edd7123ad0ff99]]></AppId>
<CreateTime>1547035906</CreateTime>
<InfoType><![CDATA[component_verify_ticket]]></InfoType>
<ComponentVerifyTicket><![CDATA[[email protected]@@ev_NEj21WV_eSdhIalw4Q_y0LO5qcfMBkMmBO432DjPly6e1n4ZjYhdwsafcIKCCLemOfcguCY6HLcFnYgCsA]]></ComponentVerifyTicket>
</xml>

未完待续。。。。