小黃雞機器人是微信公眾帳號中一個比較經典的功能,對於學習微信開發的童鞋來學,先從小黃雞入手。可以練練手。以下,微市場就給大家介紹一下小黃雞機器人的開發過程。
首先,我們先來了解一下微信訊息互動流程:
這裡有兩個地方我們需要注意的:
URL:你上傳程式碼的伺服器
token:可以隨便填,將會生成你個人簽名,如“wei43”
我們先將下面的程式碼儲存為index.php上傳到伺服器進行驗證
define("TOKEN", "wei43"); //TOKEN值
$wechatObj = new wechat();
$wechatObj->valid();
class wechat {
public function valid() {
$echoStr = $_GET["echostr"];
if($this->checkSignature()){
echo $echoStr;
exit;
}
}
private function checkSignature() {
$signature = $_GET["signature"];
$timestamp = $_GET["timestamp"];
$nonce = $_GET["nonce"];
$token = TOKEN;
$tmpArr = array($token, $timestamp, $nonce);
sort($tmpArr);
$tmpStr = implode( $tmpArr );
$tmpStr = sha1( $tmpStr );
if( $tmpStr == $signature ) {
return true;
} else {
return false;
}
}
}
?>
上面的程式碼是我們改寫的微信公眾平臺校驗URL是否正確接入的程式碼。
上面提到了,微信公眾平臺與開發者之間的資料互動是通過XML完成的,既然用到XML,當然得遵循規範,所以在著手開發之前先看看官方介面文件提供的XML規範,以文字訊息為例: 當用戶向微信公眾賬號傳送訊息時,微信伺服器會POST給開發者一些資料:
開發者在處理完訊息後需要返回資料給微信伺服器:
除文字訊息外,微信公眾平臺還支援使用者傳送圖片訊息、地理位置訊息、連結訊息、事件推送,而開發者還可以向微信公眾平臺回覆音樂訊息和圖文訊息,各類訊息XML規範也可以參見官方文件。
下面的程式碼是精簡了微信公眾平臺官方程式碼的
$wechatObj = new wechat();
$wechatObj->responseMsg();
class wechat {
public function responseMsg() {
//---------- 接 收 數 據 ---------- //
$postStr = $GLOBALS["HTTP_RAW_POST_DATA"]; //獲取POST資料
//用SimpleXML解析POST過來的XML資料
$postObj = simplexml_load_string($postStr,'SimpleXMLElement',LIBXML_NOCDATA);
$fromUsername = $postObj->FromUserName; //獲取傳送方帳號(OpenID)
$toUsername = $postObj->ToUserName; //獲取接收方賬號
$keyword = trim($postObj->Content); //獲取訊息內容
$time = time(); //獲取當前時間戳
//---------- 返 回 數 據 ---------- //
//返回訊息模板
$textTpl = "
";
$msgType = "text"; //訊息型別
$contentStr = 'wei43net; //返回訊息內容
//格式化訊息模板
$resultStr = sprintf($textTpl,$fromUsername,$toUsername,
$time,$msgType,$contentStr);
echo $resultStr; //輸出結果
}
}
?>
將上面的程式碼儲存為index.php並上傳到你的伺服器覆蓋掉剛才上傳的index.php。
現在使用者通過微信公眾平臺傳送任何訊息公眾賬號均會返回“wei43net”這個訊息了!
下面我們再來分享一個用CURL開發的一個微信小黃雞的簡易程式碼。大家可以練習一下!
function SimSimi($keyword) {
//----------- 獲取COOKIE ----------//
$url = "simsimi/";
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HEADER,1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
$content = curl_exec($ch);
list($header, $body) = explode("
", $content);
preg_match("/set-cookie:([^
]*);/iU", $header, $matches);
$cookie = $matches[1];
curl_close($ch);
//----------- 抓 取 回 復 ----------//
$url = "wei43net";
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_REFERER, "http://www.simsimi.com/talk.htm?lc=ch");
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_COOKIE, $cookie);
$content = json_decode(curl_exec($ch),1);
curl_close($ch);
if($content['result']=='100') {
$content['response'];
return $content['response'];
} else {
return '我還不會回答這個問題...';
}
}
?>
好了,將這兩個程式碼整合了,我們就能實現一個簡易的機器人聊天程式了