官方文档说明:

在公众号第三方平台创建审核通过后,微信服务器会向其“授权事件接收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. CSP-S2021幽寂

    不管怎么说,这次比赛考的比这一段时间以来的模拟赛都难看 难受,但是也不想太表现出来,所以更难受.... 有点害怕会退役...... Day -6 前一天晚上回宿舍的时候和\(zxs\)一路,聊的过程中 ...

  2. 基于live555开发嵌入式linux系统的rtsp直播服务

    最近要搞一个直播服务,车机本身是个前后双路的Dvr,前路1080P 25fps,后路720P 50fps,现在要连接手机app预览实时画面,且支持前后摄像头画面切换. 如果要做直播,这个分辨率和帧率是 ...

  3. 该虚拟机似乎正在使用中。如果该虚拟机未在使用,请按“获取所有权(T)”按钮获取它的所有权

    问题 打开虚拟机镜像时报 VMware该虚拟机似乎正在使用中.如果该虚拟机未在使用,请按"获取所有权(T)"按钮获取它的所有权 解决方法 在你安装的镜像文件目录下找到后缀为.vmx ...

  4. Cookie、Session、localStorage、sessionStorage区别和用法

    Cookie 在学习一个新知识点前,我们应该明白自己的学习目标,要带着疑问去学习,该小节须要了解 Cookies 什么是cookie,cookie的作用 cookie的工作机制,即cookie是运作流 ...

  5. 谷粒 | 12 |easyExcel使用

    一.引入easyexcel依赖 <!--easyExcel依赖--> <dependency> <groupId>org.apache.poi</groupI ...

  6. Part 19 AngularJS Services

    What is a service in AngularJSBefore we talk about what a service is in Angular. Let's talk about a ...

  7. C#生成新浪微博短网址 示例源码

    using System; using System.Collections.Generic; using System.Linq; using System.Text;     using DotN ...

  8. C# 计算农历日期方法(2021版)

    解决问题 旧版农历获取方法报错,会有 到 2021年 m数组越界了 if (LunarData[m] < 4095) 此方法可以解决 主体代码 public static class China ...

  9. CefSharp-基于C#的客户端开发框架技术栈开发全记录

    CefSharp简介 源于Google官方 CefSharp用途 CefSharp开发示例 CefSharp应用--弹窗与右键 不弹出子窗体 禁用右键 CefSharp应用--High DPI问题 缩 ...

  10. Python基础(返回函数)

    #我们在函数lazy_sum中又定义了函数f1,并且,内部函数f1可以引用外部函数lazy_sum的参数和局部变量,当lazy_sum返回函数f1时,相关参数和变量都保存在返回的函数中,这种称为&qu ...