##
###思路:
首先使用 $postStr = file_get_contents(“php://input”); 接受微信服务器发送来的XML数据;
接着使用 simplexml_load_string() 函数对接受到的XML数据包进行解析 :
$postObj = simplexml_load_string($postStr, ‘SimpleXMLElement’, LIBXML_NOCDATA);
然后处理接受解析后的数据,即将微信用户发来的消息回显给用户.
下面代码:
<?php
$wechatObj = new wechat_php();
$wechatObj->GetTextMsg();
class wechat_php {
public function GetTextMsg() {
//获取服务器POST请求中的数据
//$postStr = $GLOBALS["HTTP_POST_DATA"];
$postStr = file_get_contents("php://input"); //获取post数据
if (!empty($postStr)) {
/*
*simplexml_load_string(string, class, option, ns, is_prefix);
* 参数:
* string: 需要处理的XML字符串
* class: 用来指定新对象的,这里通常设置为 "SimpleXMLElement", 表示用来生成<br />一个简单的XML元素
* options: 指定附加的Libxml参数, 通常设置为 LIBXML_NOCDATA, 表示把CDATA<br />设置为文本节点
* ns: 一般省略
* is_prefix: 一般省略
* 返回值:
* 返回类 SimpleXMLElement 的一个对象,该对象的属性包括XMl的数据; 如果失败,则返回false
*/
$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA); //把XML字符串装载到对象中
$fromUsername = $postObj->FromUserName; //微信用户名
$toUsername = $postObj->ToUserName; //开发者微信号
$msgType = $postObj->MsgType; //消息类型
$keyword = trim($postObj->Content); //文本消息内容, 该函数作用是移除字符串两端的空白字符
$time = time(); //返回当前unix时间戳,并格式化为日期
//回复消息的XML格式
$textTpl = "<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[%s]]></MsgType>
<Content><![CDATA[%s]]></Content>
<FuncFlag>0</FuncFlag>
</xml>>";
if (strtolower($msgType) != "text") {
$msgType = "text"; //回复消息的类型
$contentStr = "我只接受文本消息~"; // 回复的内容
}
else {
if (!empty($keyword)) {
$msgType = "text";
$contentStr = "消息内容:".$keyword."\n";
$contentStr = $contentStr . "ToUsername" . $toUsername . "\n";
$contentStr = $contentStr . "fromUsername:" . $fromUsername;
}
else {
$contentStr = "请输入关键字...";
}
}
$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
echo $resultStr;
}
else {
echo "";
exit;
}
}
}
?>
将以上代码命名为 index.php 并上传到你所配置服务器的URL地址下即可.