微信机器人 自动回复等等

<?php
/**
* wechat php test
*/

//define your token
define("TOKEN", "weixin");

//file_put_contents("7.txt",$_GET["echostr"]."--echostr--".$_GET["signature"]."--sign--".$_GET["timestamp"]."--timestamp--".$_GET["nonce"]."--nonce--");

$wechatObj = new wechatCallbackapiTest();
//$wechatObj->valid();
$wechatObj->responseMsg();
class wechatCallbackapiTest
{
   
 public function valid()
    {
       
 $echoStr = $_GET["echostr"];

       
 //valid signature , option
       
 if($this->checkSignature()){
           
 echo $echoStr;
           
 exit;
        }
    }
   
 //处理消息
   
 public function responseMsg()
    {
       
 //get post data, May be due to the different environments
       
 $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
       
 //extract post data
       
 if (!empty($postStr)){

           
 $postObj simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
           
 $RX_TYPE trim($postObj->MsgType);
           
 $str = $postObj->Content;
            file_put_contents(
'a.txt',$str);


           
 switch($RX_TYPE)
            {
               
 case "voice":
                   
 $resultStr = $this->receiveVoice($postObj);
                   
 break;
               
 case "location":
                   
 $resultStr = $this->receiveLocation($postObj);
                   
 break;
               
 case "text":
                   
 $resultStr = $this->handleText($postObj);
                   
 break;
               
 case "event":
                   
 $resultStr = $this->handleEvent($postObj);
                   
 break;
               
 default:
                   
 $resultStr = "Unknow msg type: ".$RX_TYPE;
                   
 break;
            }
           
 echo $resultStr;
        }
else {
           
 echo "";
           
 exit;
        }
    }

   
 public function handleText($postObj)
    {
       
 $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";
           
 $str_trans mb_substr($keyword,0,2,"UTF-8");
           
 $str_valid mb_substr($keyword,0,-2,"UTF-8");

           
 if($str_trans == '翻译' && !empty($str_valid)) {

               
 $word mb_substr($keyword, 2, 202, "UTF-8");
               
 //调用有道词典
               
 $contentStr = $this->youdaoDic($word);
               
 //调用百度词典
//                $contentStr = $this->baiduDic($word)."【百度】";

           
 }elseif ($keyword == "你好") {
               
 $contentStr = "hello";
            }
 elseif ($keyword == "时间") {
               
 $contentStr date("Y-m-d H:i:s");
            }
 else {
              
 $contentStr = $this->qingyunDic($postObj,$keyword);
            }

           
 $resultStr sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
           
 echo $resultStr;
        }
 else {
           
 echo "Input something...";
        }
    }


       
 public function handleEvent($object)
    {
       
 $contentStr = "";
       
 switch ($object->Event)
        {
           
 case "subscribe":
               
 $contentStr = "感谢您关注【马俊杰的测试号】"." "."微信号:xiao1112521"." "."文学和艺术,有时指文学或表演艺术,是人们对生活的提炼,升华和表达"." "."目前平台功能如下:"." "."【1】 查天气,如输入:北京天气"." "."【2】 查公交,如输入:苏州公交178"." "."【3】 翻译,如输入:翻译I love you"." "."更多内容,敬请期待...";
               
 break;
           
 default :
               
 $contentStr = "Unknow Event: ".$object->Event;
               
 break;
           
 case "LOCATION":
               
 $contentStr = "上传位置:纬度 ".$object->Latitude.";经度 ".$object->Longitude;
               
 break;
           
 case "location_select":
               
 $contentStr = "发送位置:标签 ".$object->SendLocationInfo->Label;
               
 break;
        }

       
 $resultStr = $this->responseText($object, $contentStr);
       
 return $resultStr;
    }

   
 public function responseText($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;
    }

   
 //有道翻译
   
 public function youdaoDic($word){

       
 $keyfrom = "lswx1205";     //申请APIKEY时所填表的网站名称的内容
       
 $apikey = "1747864206" //从有道申请的APIKEY

       //有道翻译-xml格式
       
 $url_youdao = 'http://fanyi.youdao.com/fanyiapi.do?keyfrom='.$keyfrom.'&key='.$apikey.'&type=data&doctype=xml&version=1.1&q='.$word;

       
 $xmlStyle simplexml_load_file($url_youdao);

       
 $errorCode = $xmlStyle->errorCode;

       
 $paras = $xmlStyle->translation->paragraph;

       
 if($errorCode == 0){
           
 return $paras;
        }
else{
           
 return "无法进行有效的翻译";
        }
    }

       
 //图灵客机器人
       
 public function qingyunDic($obj,$keyword){

      
 $url_qingyun  'http://www.tuling123.com/openapi/api?key=8a85b002c1cb48b5a8946d7b6356ce53&info='.$keyword;

       
 $jsonStyle file_get_contents($url_qingyun);


       
 $result = json_decode($jsonStyle,true);

       
 $errorCode = $result['code'];

       
 $trans = '';

       
 if(isset($errorCode)){

           
 switch ($errorCode){
               
 case 100000:
                   
 $trans = $result['text'];
                   
 break;
               
 case 200000:
                   
 $trans = $this->tulingURL($obj,$result);
                   
 break;
               
 case 30:
                   
 $trans = '无法进行有效的翻译';
                   
 break;
               
 case 40:
                   
 $trans = '不支持的语言类型';
                   
 break;
               
 case 50:
                   
 $trans = '无效的key';
                   
 break;
               
 default:
                   
 $trans = '出现异常';
                   
 break;
            }
        }

       
 return $trans;
        }


   
 function tulingURL($object,$ob,$flag=0){
       
 $url=$ob['url'];
       
 $content=$ob['text'];
       
 $fromuser=$object->FromUserName;
       
 $touser=$object->ToUserName;

       
 $textTpl = "<xml>
                    <ToUserName><![CDATA[%s]]></ToUserName>
                    <FromUserName><![CDATA[%s]]></FromUserName>
                    <CreateTime>%s</CreateTime>
                    <MsgType><![CDATA[text]]></MsgType>
                    <Content><![CDATA[%s]]></Content>
                    <FuncFlag>%d</FuncFlag>
                    <URL><![CDATA[%s]]></URL>
                    </xml>"
;
       
 $resultStr sprintf($textTpl, $fromuser, $tousertime(), $content, $flag, $url);
       
 return $resultStr;

    }



   
 private function checkSignature()
    {
       
 // you must define TOKEN by yourself
       
 if (!defined("TOKEN")) {
           
 throw new Exception('TOKEN is not defined!');
        }

       
 $signature = $_GET["signature"];
       
 $timestamp = $_GET["timestamp"];
       
 $nonce = $_GET["nonce"];

       
 $token = TOKEN;
       
 $tmpArr = array($token, $timestamp, $nonce);
       
 // use SORT_STRING rule
       
 sort($tmpArr, SORT_STRING);
       
 $tmpStr implode( $tmpArr );
       
 $tmpStr sha1( $tmpStr );

       
 if( $tmpStr == $signature ){
           
 return true;
        }
else{
           
 return false;
        }
    }

   
 //接收语音消息
   
 private function receiveVoice($object)
    {
       
 if (isset($object->Recognition) && !empty($object->Recognition)){
           
 $content = "你刚才说的是:".$object->Recognition;
           
 $result = $this->transmitText($object, $content);
        }
else{
           
 $content = array("MediaId"=>$object->MediaId);
           
 $result = $this->transmitVoice($object, $content);
        }
       
 return $result;
    }

   
 //回复语音消息
   
 private function transmitVoice($object, $voiceArray)
    {
       
 $itemTpl = "<Voice>
                        <MediaId><![CDATA[%s]]></MediaId>
                    </Voice>"
;

       
 $item_str sprintf($itemTpl, $voiceArray['MediaId']);
       
 $xmlTpl = "<xml>
    <ToUserName><![CDATA[%s]]></ToUserName>
    <FromUserName><![CDATA[%s]]></FromUserName>
    <CreateTime>%s</CreateTime>
    <MsgType><![CDATA[voice]]></MsgType>
   
 $item_str
</xml>"
;

       
 $result sprintf($xmlTpl, $object->FromUserName, $object->ToUserName, time());
       
 return $result;
    }



   
 //接收位置消息
   
 private function receiveLocation($object)
    {
       
 $content = "你发送的是位置,经度为:".$object->Location_Y.";纬度为:".$object->Location_X.";缩放级别为:".$object->Scale.";位置为:".$object->Label;
       
 $result = $this->transmitText($object, $content);
       
 return $result;
    }
}


?>
原文地址:https://www.cnblogs.com/zhangtianle/p/7365376.html