微信公眾平臺機器人教程
海南中立科技 | 2018-01-26 23:55:58 | 閱讀:33985
首先要去微信公眾平臺申請一個帳號http://mp.weixin.qq.com/申請一個SAE應用我的是http://weixintalk.sinaapp.com設置微信接口地址微信平臺->設置->回復設置->自定義回復->調用公眾平臺消息接口>>url寫這個url,token隨便定一個"helloczq"開啟SAE服務由于我們需要教機器人一些日常用語,所以我們必須要一個存儲他們的空間,這里暫時使用SAE的kvdb服務,請先到sae開啟。定義規則我們先給他定義一個簡單的規則,比如求助是help教他學東西是"_"+問題+":"+回答比如:_hi:hello,就是回復hello給hi如果一樣東西有很多人教他,機器人應該優先回復舊的東西。聊天代碼規則定好了,我們先寫一個聊天的類classtalk{publicfunctionreply($str){$kv=newSaeKV();$kv->init();//用戶輸入幫助語句,可以自定義幫助語法if($str=='help'||$str=='求助'){return"要教我讀書,請英文下劃線開頭,接著問題,接著英文冒號,接著回答";}//下劃線開頭的教學模式if(substr($str,0,1)=='_'){//教$pos=strpos($str,':');if($pos>-1){//問題$q=substr($str,1,$pos-1);//答案$a=substr($str,$pos+1);//加入知識庫$ret=$kv->get('know_'.md5($q));if($ret===false||!is_array($ret))$ret=array();$ret[]=$a;$kv->set('know_'.md5($q),$ret);return"known::".$q.'/'.$a;}}$ret=$kv->get('know_'.md5($str));//查詢數據庫,尋找問題答案if($ret===false||!is_array($ret)||count($ret)==0){return'我什么都不知道,輸入"help"求助';}else{//隨機一個while(count($ret)>1){$re=array_shift($ret);if(rand(0,1)==0)return$re;}returnarray_shift($ret);}}復制代碼這個類會自動回復,教學,大家可以簡單測試一下接入微信其實就是把上面那個類和官方的php代碼拼起來...以下是全部代碼,包括驗證部分define("TOKEN","helloczq");$wechatObj=newwechat();$wechatObj->valid();$wechatObj->responseMsg();classwechat{publicfunctionvalid(){$echoStr=$_GET["echostr"];if(!$this->checkSignature())exit();}publicfunctionresponseMsg(){$postStr=$GLOBALS["HTTP_RAW_POST_DATA"];if(!empty($postStr)){$postObj=simplexml_load_string($postStr,'SimpleXMLElement',LIBXML_NOCDATA);$fromUsername=$postObj->FromUserName;$toUsername=$postObj->ToUserName;$content=trim($postObj->Content);$time=time();$talk=newtalk();$textTpl="%s0";$msgType="text";$contentStr=$talk->reply($content);$resultStr=sprintf($textTpl,$fromUsername,$toUsername,$time,$msgType,$contentStr);echo$resultStr;}else{echo$_GET["echostr"];exit();}}privatefunctioncheckSignature(){$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){returntrue;}else{returnfalse;}}}classtalk{publicfunctionreply($str){$kv=newSaeKV();$kv->init();if($str=='help'||$str=='求助'){return"要教我讀書,請英文下劃線開頭,接著問題,接著英文冒號,接著回答";}if(substr($str,0,1)=='_'){$pos=strpos($str,':');if($pos>-1){$q=substr($str,1,$pos-1);$a=substr($str,$pos+1);$ret=$kv->get('know_'.md5($q));if($ret===false||!is_array($ret))$ret=array();$ret[]=$a;$kv->set('know_'.md5($q),$ret);return"known::".$q.'/'.$a;}}$ret=$kv->get('know_'.md5($str));if($ret===false||!is_array($ret)||count($ret)==0){return'我什么都不知道,輸入"help"求助';}else{//隨機一個while(count($ret)>1){$re=array_shift($ret);if(rand(0,1)==0)return$re;}returnarray_shift($ret);}}}?>復制代碼