zoukankan      html  css  js  c++  java
  • 微信机器人 自动回复等等

    <?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;
        }
    }


    ?>
  • 相关阅读:
    Java程序员极力推荐的springboot全家桶干货系列——收藏必会系列
    mysql 远程连接数据库的二种方法
    mysql取以当前时间为中心的任意时间段的时间戳
    使用sql语句,查询 mysql 的安装地址
    MyEclipse中点击Deploy MyEclipse J2EE Project to Server无响应解决方法
    使用DOS访问数据库详解
    mysql查询字段为null 返回0
    MySQL触发器Trigger实例篇
    JAVA汉字转拼音(取首字母大写)
    阿里云上传文件
  • 原文地址:https://www.cnblogs.com/zhangtianle/p/7365376.html
Copyright © 2011-2022 走看看