當前位置:編程學習大全網 - 源碼下載 - Thinkphp3.2.3接入公眾號響應微信發送的Token驗證總是失敗

Thinkphp3.2.3接入公眾號響應微信發送的Token驗證總是失敗

用得著判斷那個TOKEN?是不是多此壹舉,用我這個,包妳滿意

<?php

namespace?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;

}

}

  • 上一篇:如何設置按鍵向導30分鐘後自動停止並重啟腳本?
  • 下一篇:雪中悍刀行講的是什麽
  • copyright 2024編程學習大全網