PHP-微信开发之图灵机器人--天气接口调用

微信开发中,图灵机器人回复、天气、翻译、美食、地图、二维码功能,随处可见。大小网站、APP都在运用这项技术在项目中。今天简单介绍一下图灵机器人回复,天气接口调用、翻译接口,希望对朋友们有用。

效果案例:

思路很简单,首先,token要一致,然后在浏览器上跑起来, 回到微信平台配置后进行提交,显示配置成功,则OK!配置失败,检查token和代码规范,如果还不行,百度上有很多解决办法,不过有的没有用。可以试一试不用框架可不可以执行。

下面不多说,上代码:

<?php
/**
  * wechat php test
  */
 
//define your token
define("TOKEN","token可以随意些");//定义常量token值,与微信中的值进行对比
$wechatObj = new wechatCallbackapiTest();//实例化下面的类
//判断微信传过来的值是否存在
if(!isset($_GET['echostr'])){
//如果微信传过来的值存在执行下面方法
$wechatObj->responseMsg();
}else{
//不存在执行下面方法
$wechatObj->valid();
}
//$wechatObj->valid();
 //封装文件类
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 = file_get_contents('php://input');    //全局变量的信息    可以接收
 
        //extract post data
        if (!empty($postStr)){
                //如果$postStr不为空
                $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
                $RX_TYPE = trim($postObj->MsgType);
 
                switch($RX_TYPE)
                {
                    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";
        	if($keyword=="博客"){
                $contentStr = "YFeng888的博客地址是:https://blog.csdn.net/weixin_42980713";
            }else if($keyword=="天气"){
                 //创建函数调用图灵机器人接口
                $url = "http://apis.haoservice.com/weather?cityname=北京&key=99ae8b89d4a14c0881c2ac64c831cdd6"; 
              $send_info = file_get_contents($url);
              $c = json_decode($send_info,true);
              $contentStr = "【".$c['result']['today']['city']."天气预报】\n"." ".$c['result']['today']['date_y']."时发布"."\n\n实时天气\n".$c['result']['today']['weather'].$c['result']['today']['temperature'].$c['result']['today']['wind']."\n\n温馨提示:".$c['result']['today']['dressing_advice']."\n\n明天\n".$c['result']['future'][1]['temperature']." \n\n后天".$c['result']['future'][2]['temperature']."\n";
          }elseif($keyword=="经典语录"){
             //创建函数调用图灵机器人接口
            $url="http://apis.haoservice.com/lifeservice/JingDianYulu/getTypes?key=你自己的key";
              $send_info = file_get_contents($url);
              $json = json_decode($send_info,true);
              $contentStr=$json['result'];
          }else{
            //翻译接口
            $url = "http://apis.haoservice.com/efficient/robot?info=$keyword&address=&key=你自己的key";
              $send_info = file_get_contents($url);
              $json = json_decode($send_info,true);
              $contentStr =$json['result']['text'];
               file_put_contents("haoyu.txt",$contenStr);//写入日志到haoyu.txt文件内
          }
           
            // $contentStr = "Welcome to wechat world!";
            $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 = "感谢您关注【最帅男人帮】"."\n"."微信号:shuaigege"."\n"."卓越锦绣,名城苏州,我们为您提供苏州本地生活指南,苏州相关信息查询,做最好的苏州微信平台。"."\n"."目前平台功能如下:"."\n"."【1】 查天气,如输入:苏州天气"."\n"."【2】 查公交,如输入:苏州公交178"."\n"."【3】 翻译,如输入:翻译I love you"."\n"."【4】 苏州信息查询,如输入:苏州观前街"."\n"."更多内容,敬请期待...";
                break;
            default :
                $contentStr = "Unknow Event: ".$object->Event;
                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;
    }
 
    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;
        }
    }
}
 
?>

ok,亲测可行!

猜你喜欢

转载自blog.csdn.net/weixin_42980713/article/details/86007723
今日推荐