第一部分 基於模擬請求的方式
一、模擬請求數據
先看一下小黃雞的網頁版界面
我們通過模擬http請求來實現,上面對話抓包如下:
發送消息的包
接收消息的包:
根據上面的包,模擬發起請求如下:
二、與微信對接
小黃雞還可以使用API方式調用,但免費時間有限,代碼和上面基本一樣,就不多寫了。
三、演示效果
第二部分 基於接口的方式
一、申請小黃雞接口
SimSimi,發音為〝shim-shimee〞,中文翻譯:小黃雞,由韓文simsim(심심)演變而成。 “심심”原意為“無聊”。SimSimi 由ISMaker於2002年建立流行的人工智能對話系統。
官方網站 http://www.simsimi.com/
接口申請地址: http://developer.simsimi.com/pricing
接口申請流程:
1. 注冊賬號
2. 激活賬號
3. 申請7天試用接口(或者付費購買接口,價格30美元10 萬次)
4. 獲得Key:d4899e2a-7ea8-40ab-a0d2-f258ddd7de15
二、接口分析
請求 URL
http://sandbox.api.simsimi.com/request.p?key=your_trial_key&lc=en&ft=1.0&text=hi
請求參數說明
key:授權key
text:查詢消息
lc: 語言代碼
ft: 過濾器參數
響應示例
{ “result”: 100, “response”: “Who are you?!”, “id”: 13185569, “msg”: “OK.” }
響應參數說明
result: 調用結果,成功時為100
id: 響應id
response: 響應消息內容
msg: 調用結果對應的內容
三、程序實現
構造Url參數
$params['key'] = "d4899e2a-7ea8-40ab-a0d2-f258ddd7de15"; $params['lc'] = "ch"; $params['ft'] = "1.0"; $params['text'] = $keyword; $url = "http://sandbox.api.simsimi.com/request.p?".http_build_query($params);
CURL獲取內容
$ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $output = curl_exec($ch); curl_close($ch);
獲取回復內容
$message = json_decode($output,true); $result = ""; if ($message['result'] == 100){ $result = $message['response']; }else{ $result = $message['result'].$message['msg']; }
小黃雞完整代碼simsimi.php
function callSimsimi($keyword) { $params['key'] = "d4899e2a-7ea8-40ab-a0d2-f258ddd7de15"; $params['lc'] = "ch"; $params['ft'] = "1.0"; $params['text'] = $keyword; $url = "http://sandbox.api.simsimi.com/request.p?".http_build_query($params); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $output = curl_exec($ch); curl_close($ch); $message = json_decode($output,true); $result = ""; if ($message['result'] == 100){ $result = $message['response']; }else{ $result = $message['result']."-".$message['msg']; } return $result; }
接入微信公眾平台
將官方文件的$contentStr = “Welcome to wechat world!”; 修改為接口調用$contentStr = callSimsimi($keyword);
define("TOKEN", "pondbay"); $wechatObj = new wechatCallbackapiTest(); if (isset($_GET['echostr'])) { $wechatObj->valid(); }else{ $wechatObj->responseMsg(); } class wechatCallbackapiTest { 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; } } public function responseMsg() { $postStr = $GLOBALS["HTTP_RAW_POST_DATA"]; if (!empty($postStr)){ $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA); $RX_TYPE = trim($postObj->MsgType); switch ($RX_TYPE) { case "text": $resultStr = $this->receiveText($postObj); break; case "event": $resultStr = $this->receiveEvent($postObj); break; } echo $resultStr; }else { echo ""; exit; } } private function receiveText($object) { $funcFlag = 0; $keyword = trim($object->Content); include('simsimi.php'); $contentStr = callSimsimi($keyword); $resultStr = $this->transmitText($object, $contentStr, $funcFlag); return $resultStr; } private function receiveEvent($object) { $contentStr = ""; switch ($object->Event) { case "subscribe": $contentStr = "歡迎關注方倍工作室\n小黃雞為您服務!"; } $resultStr = $this->transmitText($object, $contentStr); return $resultStr; } private function transmitText($object, $content, $flag = 0) { $textTpl = "<xml> <ToUserName><![CDATA[%s]]></ToUserName> <FromUserName><![CDATA[%s]]></FromUserName> <CreateTime>%s</CreateTime> <MsgType><![CDATA[text]]></MsgType> <Content><![CDATA[%s]]></Content> <FuncFlag>%d</FuncFlag> </xml>"; $resultStr = sprintf($textTpl, $object->FromUserName, $object->ToUserName, time(), $content, $flag); return $resultStr; } }
更多內容,請關注方倍工作室微信,然后回復 “教程”,