一个微信接口的简单聊天机器人

<?php
define("TOKEN","此处填写你在微信后台设置的TOKEN");
$wechatObj = new wechatCallbackapiTest();
//$wechatObj->valid();  //首次验证时放开此句注释掉下面一句,验证完成时恢复
$wechatObj->responseMsg();

class wechatCallbackapiTest
{
  public function valid()
  {
  $echoStr = $_GET["echostr"];
  if($this->checkSignature())
  {
  echo $echoStr;
  exit;
  }
  }

  public function responseMsg()
  {
  $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
  if (!empty($postStr))
  {
  $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
  $fromUsername = $postObj->FromUserName;
  $toUsername = $postObj->ToUserName;
  $keyword = trim($postObj->Content);
  $time = time();        
  $textTpl = "<xml>
  <ToUserName><![CDATA[%s]]></ToUserName>
  <FromUserName><![CDATA[%s]]></FromUserName>
  <CreateTime>%s</CreateTime>
  <MsgType><![CDATA[%s]]></MsgType>
  <Content><![CDATA[%s]]></Content>
  <FuncFlag>0</FuncFlag>
  </xml>";
  
  if(!empty( $keyword ))
  {
    $msgType = "text";
    $commonInfo = new commonInfo();
    $ipaddr = $commonInfo->getClientIp();
    $cityinfo = $commonInfo->getIpCity($ipaddr);
    $cityname = $cityinfo;
    $exinfo = $cityinfo;
    $pos = strpos($cityinfo, ' ', 3);
    if ($pos > -1)
    {
    $cityname = substr($cityinfo, 0, $pos); 
    $exinfo = substr($cityinfo, $pos + 1, strlen($cityinfo) - $pos - 1);
    }
    if (strlen($cityname) > 3)
    {
    $cityflag = substr($cityname, 0, strlen($cityname) - 3);
    }
    else
    {
    $cityflag = "地球";
    }
    $welcomeinfo = "灵感机器人欢迎你!";
    $contentStr = "来自".$cityflag.$exinfo."的朋友".$welcomeinfo."\r\n";
    $contentStr .= "你的IP地址是:" . $ipaddr . "\r\n";
    
    if(strtolower($keyword) == 'weather' || $keyword == '天气')
    {
    //Wether Report
    $contentStr .= $commonInfo->getWeatherInfo($cityflag);
    }
    else
    {
    //Robot
    $talk = new talk();
    $reply = $talk->reply($keyword);
    if (empty($reply)) 
    {
    //虫洞查询 
    $tipinfo = "你可以输入‘help’教我学习聊天,或者输入‘天气’看看天气情况。\r\n你说的内容我不太懂,所以上网查了一下 ^_^\r\n\r\n";
    $queryinfo = file_get_contents("http://wap.unidust.cn/api/searchout.do?type=client&ch=1001&info=".$keyword);
    $pos = strpos($queryinfo,$keyword);
    $queryinfo = mb_strcut($queryinfo,$pos,1024,'utf-8');
    $queryinfo = str_replace("uzoo.cn","www.easyapple.net",$queryinfo);
    $queryinfo = str_replace("虫洞","EasyApple",$queryinfo);
    $reply = $tipinfo.$queryinfo;

    //自主学习
    $answer = $talk->getAnswer($keyword, substr($queryinfo,strlen($keyword),512));    
    if(empty($answer))
    {
      $contentStr .= $reply;
    }
    else
    {
      $contentStr = $answer;
    }
    }
    else
    {
    $contentStr = $reply;
    }    
    }
    
    if (empty($contentStr)) 
    {
    $contentStr = "亲爱的,跟你聊天我学到了不少东西,此时我不知道说什么好。。。";
    }
    $resultStr = sprintf ( $textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr );
    echo $resultStr;
  }
  else
  {
    echo "Input something…";
  }
  }
  else
  {
  echo "";
  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;
  }
  }
}

 

posted on 2013-04-13 16:06  J.L_  阅读(458)  评论(0)    收藏  举报

导航