php533
發布時間: 2023-09-11 03:59:07
A. Thinkphp3.2.3接入公眾號響應微信發送的Token驗證總是失敗
用得著判斷那個TOKEN?是不是多此一舉,用我這個,包你滿意
<?php
namespaceHomeController;
useThinkController;
{
publicfunctionindex(){
$v=$_GET["echostr"];
if(!isset($v)){//根據隨機字元串判斷是否之前已經驗證過,避免重復驗證
$this->receive();
}else{
$this->checkSignature();
}
}
//未驗證執行驗證
publicfunctioncheckSignature(){
$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;
//returntrue;
}else{
returnfalse;
}
}
//已經驗證過執行這里
publicfunctionreceive(){
$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系統,進行促銷、推廣、宣傳、售後等。形成了一種主流的線上線下微信互動營銷方式。","https://gss3.bdstatic.com/-Po3dSag_xI4khGkpoWK1HF6hhy/ke/w%3D268%3Bg%3D0/sign=/.jpg","http://www..com");
}
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
privatefunctionlogger($content){
$logSize=100000;
$log="./log.txt";
if(file_exists($log)&&filesize($log)>$logSize){
unlink($log);
}
file_put_contents($log,date("Y-m-dH:i:s")."".$content." ",FILE_APPEND);
}
//關注自動回復信息
privatefunctionreceiveEvent($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","感謝您關注微信介面測試服務號,我是李先生!");
}elseif($postObj->Event=="CLICK"){
if($postObj->EventKey=="getSalary"){
$result=sprintf($xml,$postObj->FromUserName,$postObj->ToUserName,time(),"text","您點擊了【查詢->工資】按鈕");
}elseif($postObj->EventKey=="getAttendance"){
$result=sprintf($xml,$postObj->FromUserName,$postObj->ToUserName,time(),"text","您點擊了【查詢->考勤記錄】按鈕");
}elseif($postObj->EventKey=="getBonus"){
$result=sprintf($xml,$postObj->FromUserName,$postObj->ToUserName,time(),"text","您點擊了【查詢->獎金明細】按鈕");
}elseif($postObj->EventKey=="getAbout"){
$result=sprintf($xml,$postObj->FromUserName,$postObj->ToUserName,time(),"text","您點擊了【關於我們->聯系】按鈕");
}elseif($postObj->EventKey=="getJoin"){
$result=sprintf($xml,$postObj->FromUserName,$postObj->ToUserName,time(),"text","您點擊了【關於我們->加入我們】按鈕");
}elseif($postObj->EventKey=="getCustomer"){
$result=sprintf($xml,$postObj->FromUserName,$postObj->ToUserName,time(),"text","您點擊了【關於我們->客服】按鈕");
}elseif($postObj->EventKey=="getInternational"){
$result=sprintf($xml,$postObj->FromUserName,$postObj->ToUserName,time(),"text","您點擊了【新聞->國際】按鈕");
}elseif($postObj->EventKey=="getInstry"){
$result=sprintf($xml,$postObj->FromUserName,$postObj->ToUserName,time(),"text","您點擊了【新聞->行業】按鈕");
}
}elseif($postObj->Event=="scancode_waitmsg"){
//掃碼帶提示的事件
$result=sprintf($xml,$postObj->FromUserName,$postObj->ToUserName,time(),"text","您使用了掃碼帶提示事件,事件KEY:{$postObj->EventKey}");
}elseif($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;
}
//處理接收的文本信息並且回復給用戶
privatefunctionreceiveText($postObj){
$content=trim($postObj->Content);
//if(strstr($content,"你好")){
if(preg_match("/^d*$/",$content)){
//回復多圖文信息
$result=$this->receiveNews($postObj);
return$result;
}elseif($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","-");
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;
}
}
//處理接收的文本信息並且回復給用戶為單圖文信息
privatefunctionreceiveImage($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系統,進行促銷、推廣、宣傳、售後等。形成了一種主流的線上線下微信互動營銷方式。","https://gss3.bdstatic.com/-Po3dSag_xI4khGkpoWK1HF6hhy/ke/w%3D268%3Bg%3D0/sign=/.jpg","http://www..com");
return$result;
}
//處理接收的文本信息並且回復給用戶為多圖文信息
privatefunctionreceiveNews($postObj){
$con=array(
array("Title"=>"觀前街","Description"=>"hjhhj","PicUrl"=>"https://gss0..com/9fo3dSag_xI4khGko9WTAnF6hhy/image/pic/item/.jpg","Url"=>"https://gss0..com/9fo3dSag_xI4khGko9WTAnF6hhy/image/pic/item/.jpg"),
array("Title"=>"平江路","Description"=>"mkbkbjj","PicUrl"=>"http://imgtu.5011.net/uploads/content/shehui/wanxiang/2015-08-26/.jpg","Url"=>"http://imgtu.5011.net/uploads/content/shehui/wanxiang/2015-08-26/.jpg"),
array("Title"=>"觀前街","Description"=>"hjhhj","PicUrl"=>"http://img2.a0bi.com/upload/ttq/20160729/1469781927056.jpeg","Url"=>"http://img2.a0bi.com/upload/ttq/20160729/1469781927056.jpeg"),
array("Title"=>"平江路","Description"=>"mkbkbjj","PicUrl"=>"http://gaoxiao.zhutou.com/html/UploadPic/2010-3/201033173945493.jpg","Url"=>"http://gaoxiao.zhutou.com/html/UploadPic/2010-3/201033173945493.jpg"),
array("Title"=>"觀前街","Description"=>"hjhhj","PicUrl"=>"http://www.haha365.com/uploadfile/2013/0508/20130508102432191.jpg","Url"=>"http://www.haha365.com/uploadfile/2013/0508/20130508102432191.jpg"),
array("Title"=>"平江路","Description"=>"mkbkbjj","PicUrl"=>"http://img1.imgtn.bdimg.com/it/u=995757682,3656700920&fm=214&gp=0.jpg","Url"=>"http://img1.imgtn.bdimg.com/it/u=995757682,3656700920&fm=214&gp=0.jpg"),
array("Title"=>"觀前街","Description"=>"hjhhj","PicUrl"=>"http://down.laifu.com/tupian/201261510566.jpg","Url"=>"http://down.laifu.com/tupian/201261510566.jpg"),
array("Title"=>"平江路","Description"=>"mkbkbjj","PicUrl"=>"http://img.tupianzj.com/uploads/allimg/160528/9-16052Q54439-50.jpg","Url"=>"http://img.tupianzj.com/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($conas$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;
}
}
熱點內容