在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/網(wǎng)絡(luò)營銷/ 微信開放平臺-第三方平臺開發(fā)PHP解密微信推送消息時的方式

微信開放平臺-第三方平臺開發(fā)PHP解密微信推送消息時的方式

在對接微信開放平臺
解密微信推送消息的時候
使用了官方給的解密文件和方法
php代碼如圖
圖片描述

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

圖片描述

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

為什么使用simplexml_load_string和DOMDocment的差別這么大呢

請大家給指點下

回答
編輯回答
怣痛

我是這樣解的,你可參考以下:

//解密獲取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'];
}
2017年2月20日 06:08