官方文档说明:

在公众号第三方平台创建审核通过后,微信服务器会向其“授权事件接收URL”每隔10分钟定时推送component_verify_ticket。第三方平台方在收到ticket推送后也需进行解密(详细请见【消息加解密接入指引】),接收到后必须直接返回字符串success。

第一步是实例化微信提供的类 WXBizMsgCrypt ,传入开发平台的参数。

$pc = new WXBizMsgCrypt(WxPayConfig::Token, WxPayConfig::EncodingAesKey, WxPayConfig::open_AppID);

微信开放平台获取component_verify_ticket时,除了通过GET获取 timestamp  nonce  encrypt_type msg_sign四个参数外 还需要通过 file_get_contents('php://input') 获取 postdata加密的参数(encryptMsg)。

获取到的 $encryptMsg 是Xml格式的是数据 需要提取出其中的 Encrypt 节点下的数据 如下:

1 $xml_tree = new DOMDocument();
2 $xml_tree->loadXML($encryptMsg);
3 $array_e = $xml_tree->getElementsByTagName('Encrypt');
4 $encrypt = $array_e->item(0)->nodeValue;

 接下来需要将获取到的密文代入 另一段Xml中通过微信提供的 WXBizMsgCrypt 中的 decryptMsg 函数进行解密 和 通过sha1计算签名(因为 微信提供的 decryptMsg 函数中 要求 $encrypt是 Xml 格式 然后又再次提取 微信提供的做法

1 $format = "<xml><ToUserName><![CDATA[toUser]]></ToUserName><Encrypt><![CDATA[%s]]></Encrypt></xml>";
2 $from_xml = sprintf($format, $encrypt);

这是就可以调用 decryptMsg 函数进行解密了

 1 $msg = '';
2
3 $errCode = $pc->decryptMsg($msg_sign, $timeStamp, $nonce, $from_xml, $msg);
4
5 if ($errCode == 0) {
6 //由于返回的也是Xml格式的数据 所以这里再次提取ComponentVerifyTicket节点中的内容
7 $xml = new DOMDocument();
8 $xml->loadXML($msg);
9 $array_e = $xml->getElementsByTagName('ComponentVerifyTicket');
10 $component_verify_ticket = $array_e->item(0)->nodeValue;
11 //获取到了$component_verify_ticket后就可以进行写入数据存储了
12 echo "success";
13 }else{
14 echo $errCode;
15 }

到此就已经获取到了component_verify_ticket了。

全部代码:

require_once ("wxBizMsgCrypt.php");
public function index()
{ $timeStamp =$_GET['timestamp'];
$nonce =$_GET['nonce'];
$encrypt_type =$_GET['encrypt_type'];
$msg_sign =$_GET['msg_signature'];
$encryptMsg =file_get_contents('php://input'); $result = $this->getVerify_Ticket($timeStamp,$nonce,$encrypt_type,$msg_sign,$encryptMsg); if($result){
echo "success";
} } //获取component_verify_ticket
public function getVerify_Ticket($timeStamp,$nonce,$encrypt_type,$msg_sign,$encryptMsg){ $pc = new WXBizMsgCrypt(WxPayConfig::Token, WxPayConfig::EncodingAesKey, WxPayConfig::open_AppID); $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); $msg = ''; $errCode = $pc->decryptMsg($msg_sign, $timeStamp, $nonce, $from_xml, $msg); if ($errCode == 0) { $xml = new DOMDocument();
$xml->loadXML($msg);
$array_e = $xml->getElementsByTagName('ComponentVerifyTicket'); $component_verify_ticket = $array_e->item(0)->nodeValue;
DB::getDB()->delete("wechat_verifyticket",'uptime!=1');
DB::getDB()->insert("wechat_verifyticket",array(
'component_verify_ticket' => $component_verify_ticket,
'uptime' => time())); return true;
}else{
DB::getDB()->delete("wechat_verifyticket",'uptime!=1');
DB::getDB()->insert("wechat_verifyticket",array(
'component_verify_ticket' => $errCode,
'uptime' => time()));
return false;
} }

微信第三方平台获取component_verify_ticket的更多相关文章

  1. 微信开放平台获取component_verify_ticket

    官方文档说明: 在公众号第三方平台创建审核通过后,微信服务器会向其“授权事件接收URL”每隔10分钟定时推送component_verify_ticket.第三方平台方在收到ticket推送后也需进行 ...

  2. 微信开放平台 获取 component_verify_ticket

    <?php /** * @author zhaozhuobin * @date:2016-06=07 * */ namespace common\components;use DOMDocume ...

  3. 微信第三方平台解密报错:Illegal key size

    今天在交接别人代码的时候遇到的,微信第三方平台解密报的错误,原因: 如果密钥大于128, 会抛出java.security.InvalidKeyException: Illegal key size ...

  4. 微信公众平台—— 获取微信服务器IP地址

    微信公众平台—— 获取微信服务器IP地址 const ServerIpUrl = 'https://api.weixin.qq.com/cgi-bin/getcallbackip?&acces ...

  5. 微信公众平台——获取access_token、expires_in

    微信公众平台——获取access_token.expires_in 在微信公众平台接口开发中,Access Token占据着重要地位,它相当于进入各种接口的邀请,拿到这个钥匙才拥有调用其他各种特殊接口 ...

  6. 微信第三方平台定时接收component_verify_ticket

    背景: 获取第三方平台令牌(component_access_token),增加了component_verify_ticket参数.component_verify_ticket由公众平台每隔10分 ...

  7. 微信第三方平台开头篇--MVC代码(第三方获取ticket和公众号授权)

    微信公众号授权给开放平台 公众号授权给第三方平台的技术实现流程比较简单 这个步骤遗漏了开头获取第三方平台自己的accessToken 先说下流程 如何注册开放平台的第三方信息看截图 其他不说了,此文只 ...

  8. 公众号第三方平台开发 component_verify_ticket和accessToken的获取

    公众号第三方平台审核通过之后,微信的服务器会定时(10分钟一次)给"授权事件接收URL"发送component_verify_ticket,这里我们需要及时更新component_ ...

  9. weblogic下 微信公众平台获取token报错

    问题描述: 开发微信公众平台,本地tomcat可以正常获取token并发送模板消息,部署在weblogic后报错,异常信息如下: java.security.InvalidKeyException: ...

随机推荐

  1. 输出单层结点 牛客网 程序员面试金典 C++ Python

    输出单层结点 牛客网 程序员面试金典 C++ Python 题目描述 对于一棵二叉树,请设计一个算法,创建含有某一深度上所有结点的链表. 给定二叉树的根结点指针TreeNode* root,以及链表上 ...

  2. prometheus(6)之常用服务监控

    监控常用服务 1.tomcat 2.redis 3.mysql 4.nginx 5.mongodb prometheus监控tomcat tomcat_exporter地址 https://githu ...

  3. Docker进阶一:网络篇

    理解Docker0 查看本地ip ip addr [root@VM-0-6-centos ~]# ip addr #本机回环地址 1: lo: <LOOPBACK,UP,LOWER_UP> ...

  4. mybatis之结果集的映射方式

    查询的几种情况 // 1)查询单行数据返回单个对象 public Employee getEmployeeById(Integer id ); // 2) 查询多行数据返回对象的集合 public L ...

  5. DOS常用基本命令

    通配符* 和 ? *表示一个字符串 ?只代表一个字符 注意通配符只能通配文件名或扩展名,不能全都表示.例如我们要查找以字母y开头的所有文件,可以输入以下命令: dir y*.* 例如我要查找第二个字母 ...

  6. 2021中国能源网络信息安全大赛wp

    FROM TEAM BINX Web ezphp CODE 将base64解了之后得到: $O0O000="rFqQmguebyiVTBwlWAJYRhsHXfpojxEndNGkZICDL ...

  7. 津门杯WriteUP

    最近很浮躁,好好学习 WEB power_cut 扫目录 index.php <?php class logger{ public $logFile; public $initMsg; publ ...

  8. Android 有意思的脚本(打印温度)

    https://github.com/LineageOS/android_hardware_google_pixel/blob/lineage-18.1/thermal/device.mk #!/sy ...

  9. IDEA 设置Java项目使用的JDK版本 最全篇

    1. File -> Project Setting -> Project : 2. File ->Project Setting -> Modules 3. File -&g ...

  10. 动手写一个简单的Web框架(HelloWorld的实现)

    动手写一个简单的Web框架(HelloWorld的实现) 关于python的wsgi问题可以看这篇博客 我就不具体阐述了,简单来说,wsgi标准需要我们提供一个可以被调用的python程序,可以实函数 ...