微信开放平台 第三方平台 

授权流程技术说明 第一步

 微信开放平台 解密component_verify_ticket 交流 学习


解密 微信推送的component_verify_ticket  推送的url 是

  微信开放平台 解密component_verify_ticket 交流 学习这里填写的url 

他会在你url后面给你穿四个参数会以这样GET的形式传送到你的url所以你只需要GET接收就OK了

微信开放平台 解密component_verify_ticket 交流 学习

还会POST 传送XML数据这个需要你去接收 $encryptMst = file_get_contents('php://input') 这个就可以不要   担心接受不到 下面会有解释一些坑   

     微信开放平台 解密component_verify_ticket 交流 学习

以上就是微信会每10分钟给你发来的数据 下面会有代码 

这里很重要 把字都看了 还有 代码里面的注释也很重要 仔细看一下

  现在来说明一下 你自己访问自己的URL 不会带这些参数所以 总是提示你解密失败 假如你有写日志 你仔细观察   每十分钟她就会有一次数据传过来 代码如果完整的话是会解密成功的 我自己在这坑里连续三天加班11点没弄   明白 估计是太迟钝 所以写下来和大家交流一下 避免有和我同样的同学困扰 有问题也可以和我交流             QQ1062549054 还有很多同学们要去自习看文档 文档他不会说的那么细 而且文档仅供参考 要多查资料微信开放平台 解密component_verify_ticket 交流 学习微信开放平台 解密component_verify_ticket 交流 学习

  代码里 你可以直接把解密后的component_verify_ticket 存到数据库 下面我自己集百家代码写的代码

<?php


define("TOKEN", "Lango");
require_once('wxBizMsgCrypt.php');


$wechatObj = new wechatCallbackapiTest();
if (!isset($_GET['echostr'])) {
    $wechatObj->index();
}else{
    $wechatObj->valid();
}


class wechatCallbackapiTest
{
    //验证签名
    public function valid()
    {
        $echoStr = $_GET["echostr"];
        $signature = $_GET["signature"];
        $timestamp = $_GET["timestamp"];
        $nonce = $_GET["nonce"];
        $tmpArr = array(TOKEN, $timestamp, $nonce);
        sort($tmpArr);
        $tmpStr = implode($tmpArr);
        $tmpStr = sha1($tmpStr);
        if($tmpStr == $signature)
        {
            echo $echoStr;
            exit;
        }
    }
    public function index()
    {
        //以下三个变量,自己去开放平台上管理中心根据实际情况填写。
        
        $encodingAesKey = '
公众号消息加解密Key'; 
        $token = '
公众号消息校验Token';
        $appId = '
AppID';


        $timeStamp  = empty($_GET['timestamp'])     ? ""    : trim($_GET['timestamp']) ;
        $nonce      = empty($_GET['nonce'])         ? ""    : trim($_GET['nonce']) ;
        $msg_sign   = empty($_GET['msg_signature']) ? ""    : trim($_GET['msg_signature']);


        // 这里自己访问 是永远输出不了的 因为微信给你推送的时候才会带参数 
        /*echo $timeStamp."<br/>";
       
  echo $nonce."<br/>";
        echo $msg_sign."<br/>";
        exit();*/

// 这里是PDO 方式连接数据库
        $pdo = new PDO("mysql:host=localhost;dbname=db","XXXX","XXXX"); 
        $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);  
        $pdo->exec('set names utf8');

        // 接受POST 传过来的数据
        $encryptMsg = file_get_contents("php://input");
        $this->logResult('log.log', 'XML SHUJU'.$encryptMsg."\n");
        $pc = new WXBizMsgCrypt($token, $encodingAesKey, $appId);
        //转换为simplexml对象
        //$xmlResult = simplexml_load_string($encryptMsg);
        //输出xml节点名称和值    
        //$encrypt = $xmlResult->Encrypt;
         
        //  这是提取XML 里面Encrypt 节点的内容 上面注释的 也是一种方式方式很多 都可以用
        $xml_tree = new \DOMDocument();
        $xml_tree->loadXML($encryptMsg);
        $array_e = $xml_tree->getElementsByTagName('Encrypt');
        $encrypt = $array_e->item(0)->nodeValue;

        $format = "<xml><ToUserName><![CDATA[toUser]]></ToUserName><Encrypt><![CDATA[%s]]></Encrypt></xml>";
        $from_xml = sprintf($format, $encrypt);
        $this->logResult('log.log', $from_xml."\n\r");


        // 第三方收到公众号平台发送的消息
        $msg = '';
        $errCode = $pc->decryptMsg($msg_sign, $timeStamp, $nonce, $from_xml, $msg);

        if ($errCode == 0) 
        {
            print("解密后: " . $msg . "\n");


            $xml = new \DOMDocument();


            $xml->loadXML($msg);


            $array_e = $xml->getElementsByTagName('ComponentVerifyTicket');


            $component_verify_ticket = $array_e->item(0)->nodeValue;
            // 写到日志
            file_put_contents('log.log', $component_verify_ticket."\n\r");


            $this->logResult('log.log','解密后component_verify_ticket:'.$component_verify_ticket."\n\r");
            // 写到数据库
            $sql = "insert into tickets(Ticket) value('$component_verify_ticket');";
            $pdo->query($sql);


            echo 'success'; 
        } else 
        {
            $this->logResult('log.log','解密后失败:'.$errCode."\n");
            print("解密后失败:".$errCode . "<br/>");
        }
    }

    // 日志
    public function logResult($path,$data)
    {
        header("content-type:text/html;charset=utf-8");
        file_put_contents($path, '['.date('Y-m-d : h:i:sa',time()).']'.$data."\n\r",FILE_APPEND);
    }
}

相关文章:

  • 2021-10-01
  • 2021-12-23
  • 2021-12-23
  • 2021-12-04
  • 2021-12-12
  • 2021-11-17
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-01-22
  • 2022-12-23
  • 2021-12-23
  • 2022-01-07
相关资源
相似解决方案