1. 功能分析
2. 結構設計
3. 數據庫設計
4. 代碼實現
......
<?php
define("TOKEN","weixin");
$wechatObj=new wechatCallbackapiTest();
$wechatObj->responseMsg();
class wechatCallbackapiTest{
public function valid(){
$echoStr = $_GET["echostr"];
if($this->checkSignature()){
echo $echoStr;
exit;
}
}
public function responseMsg() {
$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
if(!empty($postStr)){
libxml_disable_entity_loader(true);
$postObj=simplexml_load_string($postStr,'SimpleXMLElement',LIBXML_NOCDATA);
$fromUsername=$postObj->FromUserName;
$toUsername=$postObj->ToUserName;
$type=$postObj->MsgType;
$customrevent=$postObj->Event;
$latitude=$postObj->Location_X;
$longitude=$postObj->Location_Y;
$keyword=trim($postObj->Content);
$time=time();
$textTpl="<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content>%s</Content>
<FuncFlag>0</FuncFlag>
</xml>"
switch($type){
case "event":
if($customrevent=="subscribe"){
$contentStr-"感謝關注\n回覆1查看使用說明";
}
break;
case "image":
$contentStr="圖片";
break;
case "location":
$contentStr="<a href="http://mo.amap.com/
?from={$latitude},{$longitude}(你的位置)
&to=23.113111,116.121212(我的公司)
&type=0&opt=1&dev=1">查看地圖</a>";
break;
case "link":
$contentStr="link";
break;
case "text":
switch($keyword){
case "1":
$contentStr="回覆1查看使用說明\n
回覆2查看介紹\n
回覆3收聽1072\n
回覆4或地理位置查看辦公地址\n
回覆問題進行自助問答:如交通事故";
break;
case "2":
$contentStr="介紹";
break;
case "3":
$musicTpl="<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[music]]></MsgType>
<Music>
<Title><![CDATA[1072 交通熱線]]></Title>
<Description><![CDATA[2012年9月14日]]></Description>
<MusicUrl><![CDATA[http://weixin1234.duapp.com/radio/20120914.wma]]></MusicUrl>
<HQMusicUrl><![CDATA[http://weixin1234.duapp.com/radio/20120914.wma]]></HQMusicUrl>
</Music>
<FuncFlag>0</FuncFlag>
</xml>";
$resultStr1=sprintf($musicTpl,$fromUsername,$toUsername,$time);
echo $resultStr1;
break;
case "4":
$contentStr="地址";
break;
default:
include("conn.php");
sql="SELECT * FROM 'ask' WHERE 'title' like '%{$keyword}%' LIMIT 1";
$query=mysql_query($sql);
$rs=mysql_fetch_array($query);
$title=$rs['title'];
$answer=$rs['content'];
$answer=str_replace("\n","",$answer);
mysql_close($link);
$contentStr="{$title}\n{$answer}";
}
break;
default:
$contentStr="此功能尚未開發";
}
$resultStr=sprintf($textTpl,$fromUsername,$toUsername,$time,$contentStr);
echo $resultStr;
}else{
echo "";
exit;
}
}
private function checkSignature(){
$signature = $_GET["signatue"];
$timestamp = $_GET["timestamp"];
$nonce = $_GET["nonce"];
$token=TOKEN;
$tmpArr = array($token,$timestamp,$nonce);
sort($tmpArr);
$tmpStr = implode($tmpArr);
$tmpStr = sha1($tmpStr);
if($tmpStr == $signature){
return true;
}else{
return false;
}
}
}
?>
......
5. 系統測試
6. 總結說明