微信开放平台-第三方平台开发PHP解密微信推送消息时的方式

发布于 2022-09-07 04:22:15 字数 441 浏览 19 评论 0

在对接微信开放平台
解密微信推送消息的时候
使用了官方给的解密文件和方法
php代码如图
图片描述

但是解密后的msg在日志里是空字符串,可Ticket却解密出来了

图片描述

不能理解的是
使用simplexml_load_string的方式拿到的对象也是空的,这个我能理解,因为msg是空字符串
但是使用DOMDocument的方式loadXML后为什么能取到这个ticket呢?
解密后的msg明明是空的啊

为什么使用simplexml_load_string和DOMDocment的差别这么大呢

请大家给指点下

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

乖乖 2022-09-14 04:22:15

我是这样解的,你可参考以下:

//解密获取ComponentVerifyTicket
$encodingAesKey = '';    //申请时填写的"消息加解密Key"
$token = '';  //申请时填写的"消息校验Token"
$appId = '';  //申请时填写的"消息校验Token"
$msg_signature = $request['msg_signature'];
$timestamp = $request['timestamp'];
$nonce = $request['nonce'];
$encryptMsg = file_get_contents('php://input');

libxml_disable_entity_loader(true);
$xml_obj = (array)simplexml_load_string($encryptMsg, 'SimpleXMLElement', LIBXML_NOCDATA);

// 重新拼接xml
$encrypt = $xml_obj['Encrypt'];
$encryptMsg = sprintf("<xml><ToUserName><![CDATA[toUser]]></ToUserName><Encrypt><![CDATA[%s]]></Encrypt></xml>", $encrypt);

// 解密
$pc = new WXBizMsgCrypt($token, $encodingAesKey, $appId);
$pc->WXBizMsgCrypt($token, $encodingAesKey, $appId);
$msg = '';
$errCode = $pc->decryptMsg($msg_signature, $timestamp, $nonce, $encryptMsg, $msg);
if ($errCode) {
    return $errCode;
}
else {
    libxml_disable_entity_loader(true);
    $xml_obj = (array)simplexml_load_string($msg, 'SimpleXMLElement', LIBXML_NOCDATA);
    // 返回ComponentVerifyTicket
    return $xml_obj['ComponentVerifyTicket'];
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文