微信开放平台第三方授权

先放上微信开放平台文档

https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419318292&lang=

1,常规的配置

需要管理员去授权填写相关信息以及地址等等

开放平台

点击授权如果报错暂时没有相关权限或者该第三方平台未发布等错误,可能就是你的测试公众号不是在测试的授权公众号列表,添加一下就好。

2,获取10分钟推送ticket

这是我自己写的代码

private function dealTicket($postStr, $data)
    {
        //XML 里面Encrypt 节点的内容
        $xml = new \DOMDocument();
        $xml->loadXML($postStr);

        //获取密文
        $arrayE = $xml->getElementsByTagName('Encrypt');
        $encrypt = $arrayE->item(0)->nodeValue;

        //组装密文
        $format = "<xml><ToUserName><![CDATA[toUser]]></ToUserName><Encrypt><![CDATA[%s]]></Encrypt></xml>";
        $format_xml = sprintf($format,$encrypt);

        //实例化解密类
        $wxb = new \WXBizMsgCrypt(TOKEN,KEY,APPID);

        //第三方接收到公众平台的消息 解密
        $msg = "";
        $errCode = $wxb->decryptMsg(
            $data['msg_signature'],
            $data['timestamp'],
            $data['nonce'],
            $format_xml,
            $msg
        );

        if ($errCode == 0) {
            $xml->loadXML($msg);
            //获取ticket
            $array = $xml->getElementsByTagName('ComponentVerifyTicket');
            $data['ComponentVerifyTicket'] = $array->item(0)->nodeValue;
            CouponComponentVerifyTicket::add($data);
        } else {
            //错误解析存入日志
            CouponVerifyTicketLog::addLog('ticket解析错误','ticket_false'.$errCode);
        }

 

接下来是大佬给我改良的代码,一步搞定

$postStr = file_get_contents("php://input");
        if($postStr){
            $postStr = str_replace("AppId","ToUserName",$postStr);
            $wx  = new WechatComponent('xxxx');
            $msg = $wx->msgCrypt($postStr);
            if($msg){
                $wxData = (array)(simplexml_load_string($msg, 'SimpleXMLElement', LIBXML_NOCDATA));
                switch ($wxData['InfoType'])
                {
                    case 'component_verify_ticket':
                        //更新tocket
                        $wx->updateVerifyTicket($wxData);
                  
                }
                exit('success');
            }
        }
        exit('fail');
    }

为什么要在str_replace 替换AppId为ToUserName 在微信的解密demo有这样的一个方法

public function extract($xmltext)
	{
		try {
			$xml = new DOMDocument();
			$xml->loadXML($xmltext);
			$array_e = $xml->getElementsByTagName('Encrypt');

			$array_a = $xml->getElementsByTagName('ToUserName');  //看这里
			
            $encrypt = $array_e->item(0)->nodeValue;
			$tousername = $array_a->item(0)->nodeValue;
			return array(0, $encrypt, $tousername);
		} catch (Exception $e) {
			print $e . "\n";
			return array(ErrorCode::$ParseXmlError, null, null);
		}
	}

发送的消息和demo接收的不一样,这样就很尴尬,所以直接替换掉,会比较简单。

3,获取component_token 

4,获取pre_auth_code 

以上两个步骤,处理相关的数据存储起来就好了

5,授权事件,接收微信access_token 和refresh_token

6,微信卡券创建以及领取jssdk 都是用的之前微信授权返回的授权公众号授权给第三方平台后,第三方平台通过“接口说明”中的 api_authorizer_token 接口得到的 token,而不是当前的第三方平台的基础token (画重点)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值