微信開發交互返回當前時間的說明

在公衆號提交URL和token驗證時,微信服務器將發送GET請求到我們在公衆號上填寫的URL中,會帶有四個參數:簽名signature,時間戳timestrap,隨機數nonce和echostr隨機字符串,我們在公衆號發送時間或者time時,微信服務器會將帶有簽名,時間戳,隨機數三個參數訪問開發者的URL,同時將XML消息POST到URL上。而消息不包含echostr這個變量,所以響應responseMsg方法。我們利用XML數據包進行信息的傳遞。




<?php

define("TOKEN","weixin");//定義token常量,在公衆號裏填寫的和這個應該一致。

$wechatObj=new wechatCallbackapiTest();//實例化

if(isset($_GET["echostr"])){//如果GET請求包含了echostr,執行valid方法,在這裏面又調用了checksignature,檢測簽名

$wechatObj->valid();//調用valid函數

}else{

$wechatObj->responseMsg();//否則調用回覆信息函數

}

//微信回調api類

class wechatCallbackapiTest{

public function valid(){

$echoStr=$_GET["echostr"];//獲得隨機字符串

if($this->checkSignature()){//檢測簽名

echo $echostr;

exit;

}

}

private function checkSignature(){//檢測簽名

$signature=$_GET["singature"];//獲的簽名

$timesatmp=$_GET["timestamp"];//獲得時間戳

$nonce=$_GET["nonce"];//獲得隨機數


$token=TOKEN;//前邊已經定義過這個常量

$tmpArr=array($signature,$timestamp,$nonce);//將前面或得到的三個值裝進數組

sort($tmpArr);//進行字典排序

$tmpStr=implode($tmpArr);//將數組轉化爲字符串

$tmpStr=sha1($tmpStr);//進行sha1加密

if($tmpStr==$singature){如果加密之後的結果和簽名一致

return true;//返回真

}else{

return false;

}

public function responseMsg(){

$postStr=$GLOBALS["HTTP_RAW_POST_DATA"];//原始的POST數據

if(!empty($postStr)){//post的數據非空的話,將數據載入對象SimpleXMLElement,

$postObj=simplexml_load_string($postStr,'SimpleXMLElement',LIBXML_NOCDATA);//,LIBXML_NOCDATA表示將CDATA合併爲文本節點

//獲取XML類對象的值,並且賦給新的變量,其中發送方變爲接收方,接收方變爲發送方

$fromUserName=$postObj->FromUserName;

$toUserName=$postObj->ToUserName;

$keyword=trim($postObj->Content);

$time=time();

//構造回覆的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>";

if($keyword=="時間"||$keyword=="time"){//判斷關鍵字

$msgType="text";//回覆消息類型爲text

$content=data("Y-m-d H:i:s",time());//內容爲年月日時分秒

$result=sprintf($textTpl,$fromeUserName,$ToUserName,$time,$msgType,$content);//封裝回復的XML數據包,向微信服務器進行輸出

echo $result;

}else{

echo " ";

exit;

}

}

}

}

?>

學會了這個之後,掌握原理,之後就可以進一步進行開發了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章