微信第三方平台开发 授权事件接收URL PHP源码 ThinkPHP

申请第三方平台(https://open.weixin.qq.com/)过程中,需要在开发资料中填写 授权事件接收URL

授权事件接收URL主要用于微信服务器发送给第三方平台自身的通知或事件推送(如取消授权通知,component_verify_ticket 推送等)。其中主要的就是获取component_verify_ticket,在调用其他API接口时都需要用到这一参数,同时这一参数是会过期的,每10分钟会发送一次,每1小时更新一次,因此需要在服务器端处理时进行保存(数据库或缓存中)。

微信有提供wxBizMsgCrypt.php加解密核心代码,用于解密消息与事件接收URL收到的微信服务器消息,下载地址为:https://res.wx.qq.com/op_res/-serEQ6xSDVIjfoOHcX78T1JAYX-pM_fghzfiNYoD8uHVd3fOeC0PC_pvlg4-kmP。(来源:https://developers.weixin.qq.com/doc/oplatform/Third-party_Platforms/Message_Encryption/Message_encryption_and_decryption.html

PHP源码

    /**
     * [授权事件接收URL description]
     * @return [type] [description]
     */
    public function wechat_authorize_recieve(){


        $access_token = C('WechatThirdParty.access_token');
        $encodingAesKey = C('WechatThirdParty.EncodingAESKey');
        $appid = C('WechatThirdParty.appid');

        //解密信息
        $pc = new \Org\Com\WXBizMsgCrypt\WXBizMsgCrypt($access_token,$encodingAesKey,$appid);
        $pc->WXBizMsgCrypt($access_token,$encodingAesKey,$appid);



        $nonce = I('get.nonce');
        $timeStamp = I('get.timestamp');
        $msg_sign = I('get.msg_signature');
        $from_xml = $GLOBALS["HTTP_RAW_POST_DATA"];

        $msg = '';
        $errCode = $pc->decryptMsg($msg_sign, $timeStamp, $nonce, $from_xml, $msg);

        sae_debug('[授权事件接收URL]:'.$msg);

        //给微信官方回复信息
        if ($errCode == 0) {
            echo 'success';
        } else {
            print($errCode . "\n");
        }

        $xml_tree = new DOMDocument();
        $xml_tree->loadXML($msg);

        $InfoType = $xml_tree->getElementsByTagName('InfoType')->item(0)->nodeValue;

        if($InfoType != 'component_verify_ticket'){
            die();
        }

        $array_e = $xml_tree->getElementsByTagName('ComponentVerifyTicket');
        $ComponentVerifyTicket = $array_e->item(0)->nodeValue;


        $data = array();
        if($errCode == 0) {
            $data['value'] = $ComponentVerifyTicket;
        }

        sae_debug('[授权事件接收URL]ComponentVerifyTicket:'.json_encode($ComponentVerifyTicket));

        //更新表中component_verify_ticket
        $Configure = M('Configure');
        $where = array();
        //0在表中表示平台配置
        $where['company_id'] = 0;
        $where['name'] = 'component_verify_ticket';
        $Configure->where($where)->save($data);
    }

注意事项

1.代码使用的是ThinkPHP架构,部分语句需要进行适配;

2.注意函数名称和函数所属类,决定了url的具体地址;

3. sae_debug 用于在新浪云sae中打印调试日志,可以删去;

4. component_verify_ticket 保存在了数据库的 Configure 表中;

5.使用到的 access_token 、 encodingAesKey 和 appid 三个变量分别为预置在ThinkPHP框架中的第三方平台的 消息校验Token 、 消息加解密Key 和 第三方平台的APPID,前两者在开发配置中同样需要填写(第一幅图中所示),只要在腾讯后台和代码中保持一致即可,APPID可以在平台查看。

6.实例化的 WXBizMsgCrypt 使用了微信官方提供的库,下载地址为:https://download.csdn.net/download/Ximerr/15651996(如果积分不够可以一键三连后站内信)

 

 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要使用PHP完成微信第三方平台授权,你可以按照以下步骤进行操作: 1. 首先,你需要注册成为微信开放平台开发者,并创建一个第三方平台应用。 2. 在创建应用后,你会得到一个AppID和AppSecret,这些是与微信平台进行通信的凭证。 3. 在你的PHP项目中,你需要使用curl库或其他HTTP请求库来发送HTTP请求到微信开放平台的API接口。 4. 首先,你需要获取预授权码(pre_auth_code)。发送GET请求到以下接口: ``` https://api.weixin.qq.com/cgi-bin/component/api_create_preauthcode?component_access_token=xxx ``` 其中,component_access_token是通过调用获取第三方平台component_access_token接口获取的。 5. 获取到预授权码后,你可以使用预授权码和你的AppID生成授权链接,引导用户进入授权页面: ``` https://mp.weixin.qq.com/cgi-bin/componentloginpage?component_appid=xxx&pre_auth_code=xxx&redirect_uri=xxx ``` 其中,component_appid是你的AppID,pre_auth_code是上一步获取的预授权码,redirect_uri是用户授权后的回调URL。 6. 用户在授权页面确认授权后,会跳转到你指定的回调URL,并携带授权码(authorization_code)参数。 7. 在回调URL对应的PHP页面中,你需要解析URL中的授权码参数,并使用授权码发送POST请求到以下接口,获取授权令牌(authorizer_access_token)和刷新令牌(authorizer_refresh_token): ``` https://api.weixin.qq.com/cgi-bin/component/api_query_auth?component_access_token=xxx ``` 其中,component_access_token是通过调用获取第三方平台component_access_token接口获取的。 8. 获取到授权令牌和刷新令牌后,你可以使用它们来调用微信开放平台的其他API接口,完成后续的操作。 以上是使用PHP完成微信第三方平台授权的基本流程,具体的实现细节可能会因具体需求而有所不同。在实际开发中,你还需要处理授权过期、刷新令牌等情况,以保证授权的有效性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值