微信推送给PHP的XML请求,默认是需要从HTTP_RAW_POST_DATA里提取,
本地测试时怎么模拟微信的请求呢?
模拟微信的请求发送XML
<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>1348831860</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[this is a test]]></Content>
<MsgId>1234567890123456</MsgId>
</xml>
代码:
var para = $('#xml').val();
$.ajax({
url:"weixin/",
data:para,
dataType:'text',
type:'POST',
contentType:'text/xml',
success:function(txt){
$('#response').text(txt);
}
});
PHP服务端取得XML字符串的方式:
xml = $GLOBALS["HTTP_RAW_POST_DATA"];
原因:
$_POST:通过 HTTP POST 方法传递的变量组成的数组。是自动全局变量。
$GLOBALS['HTTP_RAW_POST_DATA'] :总是产生 $HTTP_RAW_POST_DATA 变量包含有原始的 POST 数据。此变量仅在碰到未识别 MIME 类型的数据时产生。$HTTP_RAW_POST_DATA 对于 enctype="multipart/form-data" 表单数据不可用。
也就是说基本上$GLOBALS['HTTP_RAW_POST_DATA'] 和 $_POST是一样的。
但是如果post过来的数据不是PHP能够识别的,你可以用 $GLOBALS['HTTP_RAW_POST_DATA']来接收,比如 text/xml 或者 soap 等等。
分享到:
相关推荐
疑问一:为何使用$GLOBALS[“HTTP_RAW_POST_DATA”]保存POST过来的数据,而非$_POST数组? 回答: POST只能保存标准的数据类型,对于XML、SOAP或Application/Octet-steam之类的内容则无法解析。 而$GLOBALS[...
// $PostData = $HTTP_RAW_POST_DATA; $PostData = file_get_contents("php://input"); //判断POST是否为空 if(!$PostData){ echo "wrong input!"; exit(0); } //解析XML字符串 $xmlObj = simplexml_load_...
const rawData = serverRes.data.rawData; // 在服务器成功返回解密信息后,前端解密手机号 const phoneInfo = wx.decryptData(encryptedData, sessionKey, iv, rawData); console.log(phoneInfo.phoneNumber);...
接收微信公众平台发送过来的用户消息,该消息数据结构为XML,不是php默认的识别数据类型,因此这里用了$GLOBALS['HTTP_RAW_POST_DATA']来接收,同时赋值给了$postStr if (!empty($postStr)) 判断$postStr是否为空,...
本文实例为大家分享了php微信公众号开发简答题的具体代码,供大家参考,具体内容如下 简答题 array(“第5页 第1个字” => “王”,”第8页 第1个字” => “李”,”第30... $postStr = $GLOBALS[HTTP_RAW_POST_DATA];
HTTP RAW POST DATA"]; extract post data if empty $postStr { $postObj simplexml load string $postStr "SimpleXMLElement" LIBXML NOCDATA ; $RX TYPE trim $postObj >MsgType ; ...
本文实例为大家分享了php微信公众号开发之答题闯关的具体代码,供大家参考,具体内容如下 连闯三关 implode( “,” ,array) 数组变字符串 数组无法保存到数据库中去 ... $postStr = $GLOBALS["HTTP_RAW_POST_DATA
本文实例讲述了php版微信开发之接收消息,自动判断及回复相应消息的方法。分享给大家供大家参考,具体如下: 微信的api现在己经强大到...$data = $GLOBALS[HTTP_RAW_POST_DATA]; if (!emptyempty($data)) {//接收消息
$postStr = $GLOBALS["HTTP_RAW_POST_DATA"]; if (!empty($postStr)){ $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA); $fromUsername = $postObj->FromUse
- 获取全局的HTTP_RAW_POST_DATA,这通常包含了微信支付的XML通知数据。 - 检查GET参数是否存在,若存在则返回"success"作为响应。 - 日志文件大小控制,当超过100KB时删除旧文件并创建新的日志文件。 在实际应用中...
$HTTP_RAW_POST_DATA变量用于存储POST请求中未被PHP识别的原始数据。这包括那些Content-Type不是application/x-www-form-urlencoded或multipart/form-data的数据,如text/xml或soap等。这个变量仅在碰到未识别MIME...
在这个示例中,`HTTP_RAW_POST_DATA` 是PHP用来获取POST请求原始数据的全局变量,`simplexml_load_string` 函数则用于将XML字符串转换为PHP对象,方便后续处理。然后,`logger` 函数记录了错误信息,以供排查问题。 ...
开发者应使用PHP的$HTTP_RAW_POST_DATA变量或者file_get_contents("php://input")来获取原始的数据流内容。这样,SDK就能正确处理回调数据。 5. 移动端设备支付问题: 当PC浏览器使用iOS设备访问支付宝时,系统会...
$rawData = Request::instance()->post('rawData'); $signature2 = sha1($rawData . $session_key); if ($signature != $signature2) { return json(['code' => 500, 'msg' => '数据签名验证失败!']); } // ...
$xml = $GLOBALS['HTTP_RAW_POST_DATA']; $WxPayData = new \WxPayDataBase(); $result = $WxPayData->FromXml($xml); if ($result['return_code'] == 'SUCCESS' && $result['result_code'] == 'SUCCESS') { //...
分享给大家供大家参考,具体如下: ... <?.../** * 图片类 * @version 1.0 ...* 因此,对型如text/xml 或者 soap 或者 application/octet-stream 之类的内容无法解析,...* 故保留原型,交给$GLOBALS['HTTP_RAW_POST_DATA']
1 处理POST类型的控制逻辑,接收XML的数据包; 2 解析XML数据包(获得数据包的消息类型或者是事件类型); 3 拼装我们定义好的消息; 4 包装成XML格式; 5 在5秒内返回回去 二 代码实操 本节代码参照上...
Video Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 Digital Video . . . . . . . . . . . . . . . . . ....