微信公众平台机器人教程
琼中中立科技 | 2018-01-26 23:55:58 | 阅读:41346
首先要去微信公众平台申请一个帐号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);}}}?>复制代码