欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  php教程

微信第三方平台定时接收component_verify_ticket,第三方平台ticket推送

程序员文章站 2022-06-13 12:25:50
...

微信第三方平台定时接收component_verify_ticket,第三方平台ticket推送

背景:

获取第三方平台令牌(component_access_token),增加了component_verify_ticket参数。component_verify_ticket由公众平台每隔10分钟,持续推送给第三方平台方(在创建公众号第三方平台审核通过后,才会开始推送)。

目标:

接收微信服务器推送的component_verify_ticket

文档说明:(参见微信开放平台文档)

推送component_verify_ticket协议

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

于是在开放平台管理中心中寻找“授权事件接收URL”,如下图。

截获微信推送component_verify_ticket的POST请求地址:

http://[授权事件接收URL]?encrypt_type=aes
&timestamp=1438521627
&nonce=33431792
&msg_signature=xxxxxx
&signature=xxxxxxx

请求内容格式:




知晓了微信推送xml的格式,接下来要做的就是解密xml,于是继续阅读文档,(参见 微信开放平台 消息加解密指引)

关于解密,微信公众平台提供了c++, php, java, python, c# 5种语言的示例代码(点击下载)

这里基于php版本的示例代码来实现PHP接收component_verify_ticket(基于CI框架)

 1     /**
 2     *“授权事件接收URL”每隔10分钟接收component_verify_ticket
 3     **/
 4     public function ticket(){
 5         require_once(DPL_LIBS.'wx/wxBizMsgCrypt.php');
 6         $wx = new WXBizMsgCrypt($this->token, $this->encodingAesKey, $this->appId);
 7 
 8         $inputs = (object)array(
 9             'encrypt_type' => '',
10             'timestamp' => '',
11             'nonce' => '',
12             'msg_signature' => '',
13             'signature' => ''
14             );
15         foreach ($inputs as $key => &$value) {
16             $tmp = $this->input->get($key);
17             if (!empty($tmp)){
18                 $value = $tmp;
19             }
20         }
21         $this->save_key_value('component_verify_ticket_get',json_encode($inputs));
22 
23         $fp = fopen("php://input","r");
24         if (isset($fp) && !empty($fp)){
25             $this->post_xml = stream_get_contents($fp);
26             if (empty($this->post_xml)){
27                 return;
28             }
29         }
30         $this->save_key_value('component_verify_ticket_post',$this->post_xml);
31 
32         $this->xml = str_replace('AppId', 'ToUserName', $this->post_xml);
33 
34         $msg_xml = '';
35         $errCode = $wx->decryptMsg($inputs->msg_signature, $inputs->timestamp, $inputs->nonce, $this->xml, $msg_xml);
36 
37         $componentVerifyTicket = $this->parse_xml($msg_xml,'ComponentVerifyTicket');
38 
39         $this->save_key_value('component_verify_ticket',$componentVerifyTicket);
40         if ($errCode == 0){
41             echo "success";
42         }else{
43         }
44         return;
45     }

分享请注明:

原文出自http://www.cnblogs.com/wenki/p/4700828.html

相关标签: 开放平台