上一節中,我們利用大淘客的API查詢商鋪的詳情數據,里面的數據也不是很完善,有些新產品我們還是會查詢不到,所以我們需要對它進行修改,我們這一節就暫時就放一放,我們留到下一節講解這個詳情如何修改,我們今天要說的如何是在這個淘寶客系統接入我們的微信公眾號,實現一個產品查詢的功能,比如我們輸入衣架就出現產品的信息數據。具體效果如下:




接入微信公眾號,那么一定需要開通微信公眾號,并且也打開了開發者模式,那么我這里就不做詳細的介紹,具體可以在微信公眾號平臺上面查看文檔了。
根據微信的開發文檔,我們要接入微信公眾號的回復需要做到以下三個步驟
1、填寫服務器配置
2、驗證服務器地址的有效性
3、依據接口文檔實現業務邏輯
我們直接跳過申請公眾號的步驟,然后看看如何驗證服務器,在微信公眾號平臺后臺,找到開發的基本配置,如下圖:


然后,我們需要在我們的服務器填入一個驗證服務器的PHP文件,我這里填寫了
http://www.yeehot.com/DaoGou/weixin.php,關于這個文件,等下我回講解如何實現。
這里的token我們可以填入我們自己的一個數據,類似密碼一樣。


上面我們有個weixin.php文件,我們這個文件需要放到我們外網的服務器進行驗證的。
那么里面有哪些信息,主要就是驗證信息以及回復信息
首先,我們說一下驗證信息的文件.同樣根據微信的文檔的說明,驗證微信服務器發生的數據算法主要如下:
1)將token、timestamp、nonce三個參數進行字典序排序
2)將三個參數字符串拼接成一個字符串進行sha1加密
3)開發者獲得加密后的字符串可與signature對比,標識該請求來源于微信
那么我們可以寫一個這樣的校驗函數。注意這里我們需要用到我們剛剛在微信后臺填寫的token。
private function checkSignature()
{
$signature= $_GET[“signature”];
$timestamp= $_GET[“timestamp”];
$nonce= $_GET[“nonce”];
$token=”wx111111″;
$signinfo = array();
$signinfo = array($timestamp,$nonce , $token);
sort($signinfo);
$result = sha1( implode($signinfo) );
if( $result == $signature ){
return true;
}else{
return false;
}
}
此外,我們知道微信根據客戶端的請求而會發送很多數據到我們的服務器,然而發送驗證數據是會帶上echostr這個字段,那么我們可以對這個字段進行判斷,判斷是驗證信息還是其他的信息。
剛剛有了這個校驗函數后,我們就可以校驗了,但是為了讓我們的代碼可以更加有重用性,我們寫了一個類,注意就是用于驗證。代碼如下:
class weixin{
public function checkWeixinInfo(){
$echostr=$_GET[“echostr”];
if($this->checkSignature()){
echo $echostr;
exit;
}
}
private function checkSignature()
{
$signature= $_GET[“signature”];
$timestamp= $_GET[“timestamp”];
$nonce= $_GET[“nonce”];
$token=”111″;
$signinfo = array();
$signinfo = array($timestamp,$nonce , $token);
sort($signinfo);
$result = sha1( implode($signinfo) );
if( $result == $signature ){
return true;
}else{
return false;
}
}
}
剛剛我們說到微信會根據客戶端的不同請求而發送不同的數據到我們的服務器,那么我們可以根據相應的邏輯而做出處理從而提取到我們的消息內容。
這里我們根據echostr有這個參數而做出不同的處理,如果不是的話我們就判斷是接受其他消息。
我們知道微信發送的消息都是XML格式的,所以我們將POST的原始數據進行處理,例如下面
$infoobj=simplexml_load_string($data,’SimpleXMLElement’,LIBXML_NOCDATA);
然后我們可以進行數據的處理了,對于收消息我們可以看一下這里文檔
首先我們判斷一下數據的類型
$msg_type=trim($infoobj->MsgType);
我們由于是根據用戶輸入的文本內容來查詢數據的,所以我們可以判斷$msg_type為text類型就可以了
,然后我們就可以提起用戶的內容,這個作為我們查詢商品的關鍵詞,然后進行數據庫操作。部分代碼如下:
case “text”:
{
$content=array();
$keyword=trim($infoobj->Content);
$res1 = mysql_query(“select * from yeehot_taobaoke_product where name like ‘%$keyword%’ order by shopid asc limit 0,7”);
while ($row1 = mysql_fetch_array($res1)) {
$content[]=array(“Title”=>$row1[‘name’],”Description”=>”銷售價格:”.$row1[‘price’], “PicUrl”=>$row1[‘image’], “Url” =>$row1[‘tbk_link’]);
}
完成上面的操作,我們需要回復內容給用戶。那么我們也需要看一下回復內容,可以看微信文檔發送的內容。
我們回復的是圖文,格式如下:
<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>12345678</CreateTime>
<MsgType><![CDATA[news]]></MsgType>
<ArticleCount>2</ArticleCount>
<Articles>
<item>
<Title><![CDATA[title1]]></Title>
<Description><![CDATA[description1]]></Description>
<PicUrl><![CDATA[picurl]]></PicUrl>
<Url><![CDATA[url]]></Url>
</item>
<item>
<Title><![CDATA[title]]></Title>
<Description><![CDATA[description]]></Description>
<PicUrl><![CDATA[picurl]]></PicUrl>
<Url><![CDATA[url]]></Url>
</item>
</Articles>
</xml>
那么我們可以根據剛剛數據庫查詢的數據進行處理
$info1= “<item>
<Title><![CDATA[%s]]></Title>
<Description><![CDATA[%s]]></Description>
<PicUrl><![CDATA[%s]]></PicUrl>
<Url><![CDATA[%s]]></Url>
</item>
“;
$info_str=””;
foreach ($content as $item){
$info_str.= sprintf($info1, $item[‘Title’], $item[‘Description’], $item[‘PicUrl’], $item[‘Url’]);
}
$responsTpl = “<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[news]]></MsgType>
<Content><![CDATA[]]></Content>
<ArticleCount>%s</ArticleCount>
<Articles>
%s
</Articles>
</xml>”;
$result =sprintf($responsTpl, $infoobj->FromUserName, $infoobj->ToUserName, time().””, count($content).””,$info_str);
然后我們將這些結果輸出給微信服務器就可以了。
版權聲明:本文內容由互聯網用戶自發貢獻,該文觀點僅代表作者本人。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如發現本站有涉嫌抄襲侵權/違法違規的內容, 請發送郵件至 舉報,一經查實,本站將立刻刪除。