微信回覆彙總
wx_sample.php
......
public function responseMsg(){
//get post data,May be due to the different environments
$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
//extract post data
if(!empty($postStr)){//如果用戶端發來的文本內容不爲空
/* libxml_disable_entity_loader is to prevent XML eXternal Entity Injection,
the best way is to check the validity of xml by yourself */
//安全防禦用的
//對於PHP,由於simplexml_load_string 函數的XML解析問題出現在libxml庫上
libxml_disable_entity_loader(true);
//是PHP中一個解析XML的函數,參數SimpleXMLElement爲新對象的類
//LIBXML_NOCDATA表示將CDATA設置爲文本節點,CDATA標籤中的文本XML不進行解析
//返回類 SimpleXMLElement 的一個對象,該對象的屬性包含 XML 文檔中的數據。如果失敗,則返回 false。
$postObj = simplexml_load_string($postStr,'SimpleXMLElement',LIBXML_NOCDATA);
//將微信用戶端的用戶名(OpenID)賦予變量$fromUsername
$fromUsername = $postObj->FromUserName;
//將你的微信公衆號ID賦予變量$toUsername
$toUsername = $postObj->ToUserName;
//參數ToUserName,FromUserName,CreateTime,MsgType,Event,EventKey
$type = $postObj->MsgType;
//事件類型,subscribe訂閱,unsubscribe取消訂閱,CLICK自定義菜單點擊事件
$customevent = $postObj->Event;
//緯度
$latitude = $postObj->Location_X;
//經度
$longitude = $postObj->Location_Y;
//將用戶微信發來的文本內容去掉空格後賦予變量$keyword
$keyword = trim($postObj->Content);
//將系統時間賦予變量$time
$time = time();
//構建XML格式的文本賦予變量$textTpl
//注意::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>";
//音樂回覆
$musicTpl = "<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[%s]]></MsgType>
<Music>
<Title><![CDATA[梁祝]]></Title>
<Description><![CDATA[交響樂]]></Description>
<MusicUrl><![CDATA[http://weixin1234.duapp.com/1.mp3]]></MusicUrl>
<HQMusicUrl><![CDATA[http://weixin1234.duapp.com/1.mp3]]></HQMusicUrl>
</Music>
<FuncFlag>0</FuncFlag>
</xml>";//構建音樂消息
//圖文回覆
$newsTpl = "<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[%s]]></MsgType>
<ArticleCount>1</ArticleCount>
<ArticleCount>2</ArticleCount>
<Articles>
<item>
<Title><![CDATA[保險法司法解釋二出臺]]</Title>
<Description><![CDATA[對保險公司更加有利]]</Description>
<PicUrl><![CDATA[http://weixin1234.duapp.com/1.jpg]]></PicUrl>
<Url><![CDATA[http://www.chinacourt.org/article/detail/2013/06/id/1014893.shtml]]></Url>
</item>
<item>
<Title><![CDATA[保險法全文]]</Title>
<Description><![CDATA[對保險公司更加有利]]</Description>
<PicUrl><![CDATA[http://weixin1234.duapp.com/1.jpg]]></PicUrl>
<Url><![CDATA[http://www.chinacourt.org/article/detail/2013/06/id/1014893.shtml]]></Url>
</item>
<FuncFlag>0</FuncFlag>
</xml>";
switch ($type) {//參數類型
//事件類型,subscribe訂閱,unsubscribe取消訂閱,CLICK自定義菜單點擊事件
case 'event':
if($customevent == "subscribe"){
$contentStr = "感謝您的關注\n回覆1查看聯繫方式
\n回覆2查看最新資訊\n回覆3查看法律文書";
}
break;
//圖片
case 'image':
$contentStr = "圖片很棒!";
break;
//地理信息
case 'location':
$contentStr = "你的緯度是{$latitude},經度是".$longitude;
break;
//鏈接//Title,Description,Url
case 'link':
$contentStr = "一個鏈接";
break;
//文本
case 'text':
//關鍵字分類
switch ($keyword) {
case '1':
$contentStr = "聯繫方式";
break;
case '2':
$contentStr = "最新資訊";
break;
case '3':
$contentStr = "31離婚協議\n32租房合同\n33交通事故協議書";
break;
default:
$contentStr = "hi";
}
break;
//其餘類型
default:
$contentStr = "此功能尚未開發";
}
//回覆文本信息類型爲text型,即文本
$msgType = "text";
//將XML格式中的變量分別賦值
// //sprintf()字符串格式化命令,主要功能是把格式化的數據寫入某個字符串中
// //將textTpl後面的參數信息寫入這個xml字符串中
$resultStr = sprintf($textTpl,$fromUsername,$toUsername,$time,$msgType,$contentStr);
//回覆音樂信息類型爲music
$msgType = "music";
$resultStr = sprintf($musicTpl,$fromUsername,$toUsername,$time,$msgType);
//圖文回覆
$msgType = "news";
$resultStr = sprintf($newsTpl,$fromUsername,$toUsername,$time,$msgType);
//輸出回覆信息,即發送微信
echo $resultStr;
}else{//如果用戶端發來的文本內容爲空
echo "";
exit;
}
}
......