用得著判斷那個TOKEN?是不是多此壹舉,用我這個,包妳滿意
<?phpnamespace?Home\Controller;
use?Think\Controller;
class?IndexController?extends?WechatController?{
public?function?index(){
$v?=?$_GET["echostr"];
if(!isset($v)){//根據隨機字符串判斷是否之前已經驗證過,避免重復驗證
$this->receive();
}else{
$this->checkSignature();
}
}
//未驗證執行驗證
public?function?checkSignature(){
$signature?=?I("signature");//加密簽名
$timestamp?=?I("timestamp");//時間戳
$nonce?=?I("nonce");//隨機數
$token?=?TOKEN;//token
$tmpArr?=?array($token,$timestamp,?$nonce);//組成新數組
sort($tmpArr,SORT_STRING);//重新排序
$tmpStr?=?implode($tmpArr);//轉換成字符串
$tmpStr?=?sha1($tmpStr);//再將字符串進行加密
if(?$tmpStr?==?$signature?)
{
echo?$_GET["echostr"];
exit;
//return?true;
}else{
return?false;
}
}
//已經驗證過執行這裏
public?function?receive(){
$postStr?=?$GLOBALS["HTTP_RAW_POST_DATA"];//獲取用戶發送的消息,格式為xml
//$postStr?=?file_get_contents("php://input");
libxml_disable_entity_loader(true);
$postObj?=?simplexml_load_string($postStr,?"SimpleXMLElement",?LIBXML_NOCDATA);
$this->logger($postStr);
//並且回復信息給用戶
if(!empty($postObj)){
switch($postObj->MsgType){
case?"text":
$result?=?$this->receiveText($postObj);
//避免錯誤信息報出
if(empty($result)){
$xml?=?"<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[%s]]></MsgType>
<Content><![CDATA[%s]]></Content>
</xml>";
$result?=?sprintf($xml,$postObj->FromUserName,$postObj->ToUserName,time(),$postObj->MsgType,"多圖文信息沒有獲取到");
}
echo?$result;
break;
case?"image":
$result?=?$this->receiveImage($postObj);
if(empty($result)){
$xml?="<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[%s]]></MsgType>
<ArticleCount>1</ArticleCount>
<Articles>
<item>
<Title><![CDATA[%s]]></Title>?
<Description><![CDATA[%s]]></Description>
<PicUrl><![CDATA[%s]]></PicUrl>
<Url><![CDATA[%s]]></Url>
</item>
</Articles>
</xml>";
$result?=?sprintf($xml,$postObj->FromUserName,$postObj->ToUserName,time(),"news","跟老李壹起來做微信開發","微信開發即微信公眾平臺開發,將企業信息、服務、活動等內容通過微信網頁的方式進行表現,用戶通過簡單的設置,就能生成微信3G網站。通過微信公眾平臺將企業品牌展示給微信用戶,減少宣傳成本,建立企業與消費者、客戶的壹對壹互動和溝通,將消費者接入企業CRM系統,進行促銷、推廣、宣傳、售後等。形成了壹種主流的線上線下微信互動營銷方式。","/-Po3dSag_xI4khGkpoWK1HF6hhy/baike/w%3D268%3Bg%3D0/sign=a1070f7517dfa9ecfd2e51115aeb903e/b03533fa828ba61efb07a5464734970a314e59e9.jpg","");
}
echo?$result;
break;
case?"event":
$result?=?$this->receiveEvent($postObj);
if(empty($result)){
$xml?=?"<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[%s]]></MsgType>
<Content><![CDATA[%s]]></Content>
</xml>";
$result?=?sprintf($xml,$postObj->FromUserName,$postObj->ToUserName,time(),"text","感謝您關註微信接口測試服務號,我是李先生!");
}
echo?$result;
break;
default?:
$result?=?"妳發送的數據類型暫時不做處理:?"?.?$postObj->MsgType;
echo?$result;
break;
}
}
}
//log
private?function?logger($content){
$logSize=100000;
$log?=?"./log.txt";
if(file_exists($log)?&&?filesize($log)?>?$logSize){
unlink($log);
}
file_put_contents($log,?date("Y-m-d?H:i:s")."?".$content."\n",FILE_APPEND);
}
//關註自動回復信息
private?function?receiveEvent($postObj){
$xml?=?"<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[%s]]></MsgType>
<Content><![CDATA[%s]]></Content>
</xml>";
if($postObj->Event=="subscribe"){
$result?=?sprintf($xml,$postObj->FromUserName,$postObj->ToUserName,time(),"text","感謝您關註微信接口測試服務號,我是李先生!");
}else?if($postObj->Event=="CLICK"){
if($postObj->EventKey=="getSalary"){
$result?=?sprintf($xml,$postObj->FromUserName,$postObj->ToUserName,time(),"text","您點擊了查詢->工資按鈕");
}else?if($postObj->EventKey=="getAttendance"){
$result?=?sprintf($xml,$postObj->FromUserName,$postObj->ToUserName,time(),"text","您點擊了查詢->考勤記錄按鈕");
}else?if($postObj->EventKey=="getBonus"){
$result?=?sprintf($xml,$postObj->FromUserName,$postObj->ToUserName,time(),"text","您點擊了查詢->獎金明細按鈕");
}else?if($postObj->EventKey=="getAbout"){
$result?=?sprintf($xml,$postObj->FromUserName,$postObj->ToUserName,time(),"text","您點擊了關於我們->聯系按鈕");
}else?if($postObj->EventKey=="getJoin"){
$result?=?sprintf($xml,$postObj->FromUserName,$postObj->ToUserName,time(),"text","您點擊了關於我們->加入我們按鈕");
}else?if($postObj->EventKey=="getCustomer"){
$result?=?sprintf($xml,$postObj->FromUserName,$postObj->ToUserName,time(),"text","您點擊了關於我們->客服按鈕");
}else?if($postObj->EventKey=="getInternational"){
$result?=?sprintf($xml,$postObj->FromUserName,$postObj->ToUserName,time(),"text","您點擊了新聞->國際按鈕");
}else?if($postObj->EventKey=="getIndustry"){
$result?=?sprintf($xml,$postObj->FromUserName,$postObj->ToUserName,time(),"text","您點擊了新聞->行業按鈕");
}
}else?if($postObj->Event=="scancode_waitmsg"){
//掃碼帶提示的事件
$result?=?sprintf($xml,$postObj->FromUserName,$postObj->ToUserName,time(),"text","您使用了掃碼帶提示事件,事件KEY:{$postObj->EventKey}");
}else?if($postObj->Event=="scancode_push"){
//掃碼推事件
$result?=?sprintf($xml,$postObj->FromUserName,$postObj->ToUserName,time(),"text","您使用了掃碼推事件,事件KEY:{$postObj->EventKey}");
}else{
$result?=?sprintf($xml,$postObj->FromUserName,$postObj->ToUserName,time(),"text","您的操作有點奇葩");
}
return?$result;
}
//處理接收的文本信息並且回復給用戶
private?function?receiveText($postObj){
$content?=?trim($postObj->Content);
//if(strstr($content,"妳好")){
if(preg_match("/^\d*$/",$content)){
//回復多圖文信息
$result?=?$this->receiveNews($postObj);
return?$result; ?
}else?if($content=="圖片"){
//回復圖片信息
$xml?=?"<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[%s]]></MsgType>
<Image>
<MediaId><![CDATA[%s]]></MediaId>
</Image>
</xml>";
$result?=?sprintf($xml,$postObj->FromUserName,$postObj->ToUserName,time(),"image","t8ASWVXMl1vyPfFmDzNEzLq2Z2B6WiM4JI4pBc23quMuc91t9NM1GWFGajCDuMv-");
return?$result;
}else{
//回復文本信息
$xml?=?"<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[%s]]></MsgType>
<Content><![CDATA[%s]]></Content>
</xml>";
$result?=?sprintf($xml,$postObj->FromUserName,$postObj->ToUserName,time(),$postObj->MsgType,$content);
return?$result;
}
}
//處理接收的文本信息並且回復給用戶為單圖文信息
private?function?receiveImage($postObj){
$xml?="<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[%s]]></MsgType>
<ArticleCount>1</ArticleCount>
<Articles>
<item>
<Title><![CDATA[%s]]></Title>?
<Description><![CDATA[%s]]></Description>
<PicUrl><![CDATA[%s]]></PicUrl>
<Url><![CDATA[%s]]></Url>
</item>
</Articles>
</xml>";
$result?=?sprintf($xml,$postObj->FromUserName,$postObj->ToUserName,time(),"news","跟老李壹起來做微信開發","微信開發即微信公眾平臺開發,將企業信息、服務、活動等內容通過微信網頁的方式進行表現,用戶通過簡單的設置,就能生成微信3G網站。通過微信公眾平臺將企業品牌展示給微信用戶,減少宣傳成本,建立企業與消費者、客戶的壹對壹互動和溝通,將消費者接入企業CRM系統,進行促銷、推廣、宣傳、售後等。形成了壹種主流的線上線下微信互動營銷方式。","/-Po3dSag_xI4khGkpoWK1HF6hhy/baike/w%3D268%3Bg%3D0/sign=a1070f7517dfa9ecfd2e51115aeb903e/b03533fa828ba61efb07a5464734970a314e59e9.jpg","");
return?$result;
}
//處理接收的文本信息並且回復給用戶為多圖文信息
private?function?receiveNews($postObj){
$con?=?array(
array("Title"=>"觀前街","Description"=>"hjhhj","PicUrl"=>"/9fo3dSag_xI4khGko9WTAnF6hhy/image/pic/item/5243fbf2b211931382f8e0716c380cd790238db3.jpg","Url"=>"/9fo3dSag_xI4khGko9WTAnF6hhy/image/pic/item/5243fbf2b211931382f8e0716c380cd790238db3.jpg"),
array("Title"=>"平江路","Description"=>"mkbkbjj","PicUrl"=>"/upload/ttq/20160729/1469781927056.jpeg","Url"=>"/upload/ttq/20160729/1469781927056.jpeg"),
array("Title"=>"平江路","Description"=>"mkbkbjj","PicUrl"=>"/html/UploadPic/2010-3/201033173945493.jpg","Url"=>"/html/UploadPic/2010-3/201033173945493.jpg"),
array("Title"=>"觀前街","Description"=>"hjhhj","PicUrl"=>"/uploadfile/2013/0508/20130508102432191.jpg","Url"=>"/uploadfile/2013/0508/20130508102432191.jpg"),
array("Title"=>"平江路","Description"=>"mkbkbjj","PicUrl"=>"/it/u=995757682,3656700920&fm=214&gp=0.jpg","Url"=>"/it/u=995757682,3656700920&fm=214&gp=0.jpg"),
array("Title"=>"觀前街","Description"=>"hjhhj","PicUrl"=>"/tupian/201261510566.jpg","Url"=>"/tupian/201261510566.jpg"),
array("Title"=>"平江路","Description"=>"mkbkbjj","PicUrl"=>"/uploads/allimg/160528/9-16052Q54439-50.jpg","Url"=>"/uploads/allimg/160528/9-16052Q54439-50.jpg")
);
$bodys="<item>
<Title><![CDATA[%s]]></Title>
<Description><![CDATA[%s]]></Description>
<PicUrl><![CDATA[%s]]></PicUrl>
<Url><![CDATA[%s]]></Url>
</item>";
$tpl2?="";
foreach($con?as?$key=>$newArray)?{
$tpl2?.=?sprintf($bodys,$newArray["Title"],$newArray["Description"],$newArray["PicUrl"],$newArray["Url"]);
}
$fromUsername?=?$postObj->FromUserName;
$toUsername?=?$postObj->ToUserName;
$tpl1="<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[%s]]></MsgType>
<ArticleCount>%s</ArticleCount>
<Articles>";
$tpl3="</Articles>
</xml>";
$tpl1=sprintf($tpl1,$fromUsername,$toUsername,time(),"news",count($con));
$result?=?$tpl1.$tpl2.$tpl3;
return?$result;
}
}