微信开放平台 解密component_verify_ticket 交流 学习
来源:互联网 发布:cup tower软件下载 编辑:程序博客网 时间:2024/05/16 05:14
微信开放平台 第三方平台
授权流程技术说明 第一步
解密 微信推送的component_verify_ticket 推送的url 是
这里填写的url
他会在你url后面给你穿四个参数会以这样GET的形式传送到你的url所以你只需要GET接收就OK了
还会POST 传送XML数据这个需要你去接收 $encryptMst = file_get_contents('php://input') 这个就可以不要 担心接受不到 下面会有解释一些坑
以上就是微信会每10分钟给你发来的数据 下面会有代码
这里很重要 把字都看了 还有 代码里面的注释也很重要 仔细看一下
现在来说明一下 你自己访问自己的URL 不会带这些参数所以 总是提示你解密失败 假如你有写日志 你仔细观察 每十分钟她就会有一次数据传过来 代码如果完整的话是会解密成功的 我自己在这坑里连续三天加班11点没弄 明白 估计是太迟钝 所以写下来和大家交流一下 避免有和我同样的同学困扰 有问题也可以和我交流 QQ1062549054 还有很多同学们要去自习看文档 文档他不会说的那么细 而且文档仅供参考 要多查资料
代码里 你可以直接把解密后的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);
}
}
- 微信开放平台 解密component_verify_ticket 交流 学习
- 微信开放平台 解密component_verify_ticket 交流 学习
- 微信第三方平台定时接收component_verify_ticket
- 微信第三方平台开发授权1:获取component_verify_ticket
- 微信公众号三方平台开发【component_verify_ticket篇】
- 微信开放平台
- 微信公众号第三方平台开发笔记--02获取component_verify_ticket
- 微信第三方平台开发经验总结(一):接收component_verify_ticket
- iOS微信开放平台
- 微信智能开放平台
- 微信开放平台申请
- 微信支付-开放平台-公众平台
- 淘宝开放平台API交流
- 微信开放平台, 微信公众平台区别
- 微信开放平台与微信公众平台简介
- 腾讯的微信平台开放
- 微信开放平台- 使用 入门篇
- 开放平台:微信 for iOS
- Android的init过程(二):初始化语言(init.rc)解析
- Mybatis-Generator
- VC windows 执行进程的方法 源码
- MyBatis 级联查询
- inline内联函数(声明前加inline还是定义前加inline)
- 微信开放平台 解密component_verify_ticket 交流 学习
- English in September(2017)
- Moto X Force公布系统源代码:ROM开发者可以动工了
- java 中返回状态码
- java 生成动态word文档
- [S3-E429]CSS布局说——可能是最全的
- [S3-E422]你不知道的CSS(二)
- 医疗器械安全知识小科普
- redis使用