微信公众平台

微信公众平台

只需要3个文件

其他的文件夹存放图片和音乐

需要通过微信平台注册测试账号 , 并且需要在新浪云 或者 百度云 或 其他的服务器上有自己的SAE

入口文件代码:

    <?php
header('Content-Type: text/html; charset=utf8');
require './WeChat.class.php';
require './TuringRobot.php';
define('APPID', 'wx295360e8f4db8905' );
define('APPSECRET' , '2832b301052fa2a6707d9917d49d099f');
define('TOKEN' , 'liuchen');
$wechat = new Wechat( APPID,APPSECRET , TOKEN);
//验证获取的token的值
//$access_token = $wechat->getAccessToken();
//var_dump($access_token);
//验证获取的ticket的字符串
//$wechat->_getQRCodeTicket('http');
//验证生成二维码
//$wechat->getQRCode(123,'./123.jpg' , WeChat::QRCODE_TYPE_TEMP);
//第一次认证
//$wechat->firstValid();
//测试上传文件素材
//$file = './LightHouse.jpg';
//$result = $wechat->uploadTmp($file , 'image');
//var_export($result);
//删除菜单
//$wechat->menuDelete();
//设置菜单
/*$menu = <<<JSON
{
    "button": [
        {
            "name": "扫码",
            "sub_button": [
                {
                    "type": "scancode_waitmsg",
                    "name": "扫码带提示",
                    "key": "scancode_waitmsg",
                    "sub_button": [ ]
                },
                {
                    "type": "scancode_push",
                    "name": "扫码推事件",
                    "key": "scancode_push",
                    "sub_button": [ ]
                }
            ]
        },
        {
            "name": "发图",
            "sub_button": [
                {
                    "type": "pic_sysphoto",
                    "name": "系统拍照发图",
                    "key": "pic_sysphoto",
                   "sub_button": [ ]
                 },
                {
                    "type": "pic_photo_or_album",
                    "name": "拍照或者相册发图",
                    "key": "pic_photo_or_album",
                    "sub_button": [ ]
                },
                {
                    "type": "pic_weixin",
                    "name": "微信相册发图",
                    "key": "pic_weixin",
                    "sub_button": [ ]
                }
            ]
        },
        {
            "name": "快捷操作",
            "sub_button" : [
                {
                    "name": "地理位置",
                    "type": "location_select",
                    "key": "location_select"
                },
                {
                    "name": "天气",
                    "type": "view",
                    "url": "http://m.tianqi.com/"
                },
                {
                    "name": "soso",
                    "type": "view",
                    "url" : "http://www.soso.com/"
                },
            ]
        },
    ]
}
JSON;
$result = $wechat->menuSet($menu);
var_dump($result);*/
//处理消息的方法
$wechat->responseMSG();

微信类代码:

    <?php

class Wechat{    
    private $_appid;            //微信平台的id    
    private $_appsecret;        //微信凭条的secret
    private $_token;            //公众平台请求开发者时的token
    //表示QRCode的类型
    const QRCODE_TYPE_TEMP = 1 ; 
    const QRCODE_TYPE_LIMIT = 2 ; 
    const QRCODE_TYPE_LIMIT_STR = 3 ;

    private $_msg_template = array(
        'text' => '<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[text]]></MsgType><Content><![CDATA[%s]]></Content></xml>',//文本回复XML模板
        'image' => '<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[image]]></MsgType><Image><MediaId><![CDATA[%s]]></MediaId></Image></xml>',//图片回复XML模板
        'music' => '<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[music]]></MsgType><Music><Title><![CDATA[%s]]></Title><Description><![CDATA[%s]]></Description><MusicUrl><![CDATA[%s]]></MusicUrl><HQMusicUrl><![CDATA[%s]]></HQMusicUrl><ThumbMediaId><![CDATA[%s]]></ThumbMediaId></Music></xml>',//音乐模板
        'news' => '<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[news]]></MsgType><ArticleCount>%s</ArticleCount><Articles>%s</Articles></xml>',// 新闻主体
        'news_item' => '<item><Title><![CDATA[%s]]></Title><Description><![CDATA[%s]]></Description><PicUrl><![CDATA[%s]]></PicUrl><Url><![CDATA[%s]]></Url></item>',//某个新闻模板
        );

    public function __construct($id , $secret ,$token) {
        $this->_appid = $id ; 
        $this->_appsecret = $secret ;
        $this->_token = $token;
    }

    /**
     * 接收入口
     */
    public function responseMSG(){
        //获取请求的post的xml的字符串 
        $xml_str = $GLOBALS['HTTP_RAW_POST_DATA'];
        //如果没有post数据, 则响应空字符串表示结束
        if(empty($xml_str)){
            die('');
        }
        //解析该xml的字符串,利用simpleXML
        libxml_disable_entity_loader(true);
        //从字符串获取simpleXML对象
        $request_xml = simplexml_load_string($xml_str, 'SimpleXMLElement', LIBXML_NOCDATA);
        //判断该消息的类型通过元素:MsgType
        switch ($request_xml->MsgType) {
            case 'event':
                //判断具体的时间类型(‘关注 , 取消 ,点击’)
                $event = $request_xml->Event;
                if('subscribe'==$event){
                    $this->_doSubScribe($request_xml);
                }
                break;
            case 'text':
                //处理文本消息
                $this->_doText($request_xml);
                break;
             case 'image':
                //处理图片消息
                $this->_doImage($request_xml);
                break;
             case 'voice':
                //处理语音消息
                $this->_doVoice($request_xml);
                break;
             case 'video':
                //处理视频消息
                $this->_doVideo($request_xml);
                break;
            case 'shortvideo':
                //处理短视频消息
                $this->_doShortVideo($request_xml);
                break;
            case 'location':
                //处理位置消息
                $this->_doLocation($request_xml);
                break;
            case 'link':
                //处理连接消息
                $this->_doLink($request_xml);
                break;
            default:
                break;
        }
    }

    /**
     * 上传文件素材
     * @param type $file 文件地址
     * @param type $type 媒体文件类型,分别有图片(image)、语音(voice)、视频(video)和缩略图(thumb)
     * @return type
     */
    public function uploadTmp($file , $type){
        $url = "https://api.weixin.qq.com/cgi-bin/media/upload?access_token=".$this->_getAccessToken()."&type=".$type;
        $data = array(
          'media' => '@'.$file,  
        );
        $result = $this->_requestPost($url, $data);
        $result_obj = json_decode($result);
        return $result_obj;
    }

    /**
     * 处理位置响应信息
     * @param type $request_xml
     */
    private function _doLocation($request_xml){
        // $content = '你的坐标为,经度:'.$request_xml->Location_Y.',纬度:'.$request_xml->Location_X . "\n" . '你所在的位置为:' . $request_xml->Label;
        // $this->_msgText($request_xml->FromUserName, $request_xml->ToUserName, $content);
        // 利用位置获取信息
        //百度LBS圆形范围查询:
        $url = 'http://api.map.baidu.com/place/v2/search?query=%s&location=%s&radius=%s&output=%s&ak=%s';
        $query = isset($_SESSION['need'])?$_SESSION['need']:'银行';
        $location  = $request_xml->Location_X . ',' . $request_xml->Location_Y;
        $radius = 2000;
        $output = 'json';
        $ak = 'OBDl6igKrng0V6VqT5RWIP6z';
        $url = sprintf($url, urlencode($query), $location, $radius, $output, $ak);
        $result = $this->_requestGet($url, false);
        $result_obj = json_decode($result);
        $re_list = array();
        foreach($result_obj->results as $re) {
                $r['name'] = $re->name;
                $r['address'] = $re->address;
                $re_list[] = implode('-', $r);
        }
        $re_str = implode("\n", $re_list);
        //清空session
        $_SESSION['need'] = NUlL;
        $this->_msgText($request_xml->FromUserName, $request_xml->ToUserName, $re_str);
    }

    /**
     * 处理图片响应信息
     * @param type $request_xml
     */
    private function _doImage($request_xml){
        $content = '你所上传的图片的Media_ID:' . $request_xml->MediaId;
        $this->_msgText($request_xml->FromUserName, $request_xml->ToUserName, $content);
    }

    /**
     * 处理文本信息的方法
     * @param type $request_xml
     */
    private function _doText($request_xml){
        // 获取文本内容
        $content = $request_xml->Content;        
        // 对内容进行判断
        if ('帮助' == $content) {
                // 显示帮助信息
                $response_content = '输入对应序号或名称,获取相应资源' . "\n" . '[1]看美女'."\n". '[2]看帅哥' . "\n" . '[3]看屌丝';
                // 将处理好的响应数据回复给用户
                $this->_msgText($request_xml->FromUserName, $request_xml->ToUserName, $response_content);               
        } 
        elseif ('1' == strtolower($content) || 'php'==strtolower($content)) {
                $response_content = '看美女: ' . "\n" . 'http://tu.duowan.com/m/meinv';
                // 将处理好的响应数据回复给用户
                $this->_msgText($request_xml->FromUserName, $request_xml->ToUserName, $response_content);
        }
        elseif ('2' == strtolower($content) || 'java'==strtolower($content)) {
                $response_content = '看帅哥: ' . "\n" . 'http://www.shuaigepic.com/';
                // 将处理好的响应数据回复给用户
                $this->_msgText($request_xml->FromUserName, $request_xml->ToUserName, $response_content);
        }
        elseif ('3' == strtolower($content) || 'c++'==strtolower($content)) {
                $response_content = '看屌丝: ' . "\n" . 'http://www.qqtn.com/article/article_105173_1.html';
                // 将处理好的响应数据回复给用户
                $this->_msgText($request_xml->FromUserName, $request_xml->ToUserName, $response_content);
        }
        elseif ('图片' == $content ) {            
            $id_list = array(
                './image/1.jpg',
                './image/2.jpg',
                './image/3.jpg',
                './image/4.jpg',
                './image/5.jpg',
                './image/6.jpg',                
            );
            $rand_index = mt_rand(0, count($id_list)-1);
            $this->_msgImage( $request_xml->FromUserName, $request_xml->ToUserName ,$id_list[$rand_index] , false);
        }
        elseif ('音乐' == $content) {
            $music_url = 'http://icoice.applinzi.com/mp3/BIGBANG-IF YOU (JPN Ver.).mp3';
            $ha_music_url = 'http://icoice.applinzi.com/mp3/BIGBANG-IF YOU (JPN Ver.).mp3';
            $thumb_media_id = 'CS6c54j3NCW6kv1AynZ2kx-g1RMOR678d2c3vZGoIIYA6J6_j3nOwXsILpxfJXXE';
            $title = 'IF YOU';
            $desc = 'IF YOU LOVE';
            $this->_msgMusic($request_xml->FromUserName, $request_xml->ToUserName, $music_url, $hq_music_url, $thumb_media_id, $title, $desc);
        }
        elseif ('新闻测试' == $content) {
            $item_list = array(
                    array('title'=>'其实你该用母亲的方式回报母亲', 'desc'=>'母亲节快乐', 'picurl'=>'http://icoice.applinzi.com/news/2.jpg', 'url'=>'http://www.soso.com/'),
                    array('title'=>'母亲节宠爱不手软,黄金秒杀豪礼特惠值到爆', 'desc'=>'母亲节快乐', 'picurl'=>'http://icoice.applinzi.com/news/3.jpg', 'url'=>'http://www.soso.com/'),
                    array('title'=>'浅从财富管理视角看巴菲特思想', 'desc'=>'母亲节快乐', 'picurl'=>'http://icoice.applinzi.com/news/4.jpg', 'url'=>'http://www.soso.com/'),
                    array('title'=>'广邀好友打气,赢取万元旅游金', 'desc'=>'母亲节快乐', 'picurl'=>'http://icoice.applinzi.com/news/5.jpg', 'url'=>'http://www.soso.com/'),
                    );
            $this->_msgNews($request_xml->FromUserName, $request_xml->ToUserName, $item_list);
        }
        elseif('附近' == substr ($content, 0 , 6)){
                // 保存session
                $_SESSION['need'] = substr ($content, 6 );
                $response_content = '你发送你的位置信息?';
                // 将处理好的响应数据回复给用户
                $this->_msgText($request_xml->FromUserName, $request_xml->ToUserName, $response_content);
        }
        else {
            $this->receiveText($request_xml);
        }
    }

    /**
     * 其他的文本消息使用机器人
     *
     * @param $obj
     * @return string
     */
    private function receiveText($request_xml){
       $content = $request_xml->Content;

       // 图灵机器人消息处理
       $robot = new TuringRobot();
       $info = $robot->getInfo($content, $request_xml->FromUserName);
       switch ($info["code"]) {
           case 100000:   // 文本类               
               $this->_msgText($request_xml->FromUserName, $request_xml->ToUserName, $robot->textInfo($info) );
           case 200000:   // 链接类               
               $this->_msgText($request_xml->FromUserName, $request_xml->ToUserName, $robot->linkInfo($info) );
           case 302000:   // 新闻类                              
               return $this->_msgText($request_xml->FromUserName, $request_xml->ToUserName, $robot->newsInfo($info) );
           case 308000:   // 菜谱类                 
               return $this->_msgNews($request_xml->FromUserName, $request_xml->ToUserName, $robot->cookbookInfo($info) );
           case 313000:   // 儿歌类(儿童版)
           case 314000:   // 诗歌类(儿童版)
           default:
               return "亲,你能说的再简单点吗?我有点理解不过来啦!";
       }
    }

    /**
     * 用于处理关注时间的方法
     * @param type $request_xml 事件信息对象
     */
    private function _doSubScribe($request_xml){
        //利用消息发送,完成向关注账号发信息
        $content = '感谢你关注, 会向你发送优惠信息,请查收';      
        $this->_msgText($request_xml->FromUserName, $request_xml->ToUserName,$content);
    }

    /**
     * 发送新闻消息
     * @param type $to
     * @param type $from
     * @param type $item_list
     */
    private function _msgNews($to, $from, $item_list=array()) {
        // 拼凑文章部分
        $item_str = '';
        foreach($item_list as $item) {
                $item_str .= sprintf($this->_msg_template['news_item'], $item['title'], $item['desc'], $item['picurl'], $item['url']);
        }
        //拼凑整体图文部分
        $response = sprintf($this->_msg_template['news'], $to, $from, time(), count($item_list), $item_str);
        die($response);
    }

    /**
     * 发送音乐消息
     * @param type $to
     * @param type $from
     * @param type $music_url
     * @param type $hq_music_url
     * @param type $thumb_media_id
     * @param type $title
     * @param type $desc
     */
    private function _msgMusic($to, $from, $music_url ,$hq_music_url , $thumb_media_id , $title='' ,$desc=''){
        //拼凑图像类xml文件
        $response = sprintf($this->_msg_template['music'],$to , $from , time() ,$title ,$desc , $music_url , $hq_music_url,$thumb_media_id );
        die($response);
    }

    /**
     * 发送图片消息
     * @param type $to
     * @param type $from 
     * @param type $file    图片的文件地址
     * @param type $is_id $file文件是否是media_id
     */
    private function _msgImage($to, $from, $file , $is_id=false){
        if($is_id){
            $media_id = $file ;
        }else{
             //上传图片带微信公众服务器,获取mediaID
            $result_obj = $this->uploadTmp($file , 'image');
            $media_id =  $result_obj->media_id;
        }

        //拼凑图像类xml文件
        $response = sprintf($this->_msg_template['image'],$to , $from , time() ,$media_id);
        die($response);
    }

    /**
    * 发送文本信息
    * @param  [type] $to      目标用户ID
    * @param  [type] $from    来源用户ID
    * @param  [type] $content 内容
    * @return [type]          [description]
    */
   private function _msgText($to, $from, $content) {
           $response = sprintf($this->_msg_template['text'], $to, $from, time(), $content);
           die($response);
   }

    /**
     * 第一次认证微信与服务器的连接
     */
    public function firstValid(){
        //检验签名的合法性
        if($this->_checkSignature()){
            //签名合法, 告知微信公众平台服务器 , 随便什么字
            echo $_GET['echostr'];
        }
    }

    /**
     * 验证签名加密码是否一至
     * @return boolean 
     */
    private function _checkSignature(){
       // 获得由微信公众平台请求的验证数据
        $signature = $_GET['signature'];
        $timestamp = $_GET['timestamp'];
        $nonce = $_GET['nonce'];
        // 将时间戳,随机字符串,token按照字母顺序排序并连接
        $tmp_arr = array($this->_token, $timestamp, $nonce);
        sort($tmp_arr, SORT_STRING);// 字典顺序
        $tmp_str = implode($tmp_arr);//连接
        $tmp_str = sha1($tmp_str);// sha1签名

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


    /**
     * 获取access_token
     * @param string $token_file 用来储存token的临时文件
     * @return string 返回token字符串
     */
    private function _getAccessToken($token_file = './access_token'){
        //考虑是否过期的问题
        $life_time = 7200;

        if(file_exists($token_file) && time()-filemtime($token_file)<$life_time){
            return file_get_contents($token_file);
        }

        //目标
        $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={$this->_appid}&secret={$this->_appsecret}";
        //向url发送get请求

        $result = $this->_requestGet($url);
        if(!$result){
            return false;
        }
        $result_obj =  json_decode($result);
        //写入文件
        file_put_contents($token_file, $result_obj->access_token);  

        return $result_obj->access_token;
    }

    /**
     * 私有的方法获取Ticket
     * @param string $content 内容
     * @param type $type QR码类型是否是临时的或永久的
     * @param type $expire 如果是临时需要带此参数表示有效期
     * @return string ticket 的字符串
     */
    public function _getQRCodeTicket( $content , $type=1 , $expire = 604800){
        $access_token = $this->_getAccessToken();  //获取token来获取ticket
        $url = "https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=$access_token";
        $type_list = array(
            self::QRCODE_TYPE_TEMP=>'QR_SCENE',
            self::QRCODE_TYPE_LIMIT=>'QR_LIMIT_SCENE',
            self::QRCODE_TYPE_LIMIT_STR=>'QR_LIMIT_STR_SCENE',
        );
        $action_name = $type_list[$type];
        switch ($type) {
            case self::QRCODE_TYPE_TEMP:
                $data_arr['expire_seconds'] = $expire ; 
                $data_arr['action_name']    = $action_name;
                $data_arr['action_info']['scene']['scene_id'] = $content;
                break;
            case self::QRCODE_TYPE_LIMIT:    
            case self::QRCODE_TYPE_LIMIT_STR:               
                $data_arr['action_name']    = $action_name;
                $data_arr['action_info']['scene']['scene_id'] = $content;
                break;
            default:
                break;
        }

        $data = json_encode($data_arr);

        $result = $this->_requestPost($url , $data);
        if(!$result){
            return false;
        }
        $result_obj = json_decode($result);
        return $result_obj->ticket;
    }

    /**
     * 获取二维码的接口
     * @param string/int $content 内容标志
     * @param type $file    文件的地址,如果为null表示直接输出
     * @param int $type     QR码类型是否是临时的或永久的
     * @param int $expire   如果是临时需要带此参数表示有效期
     * @return 二维码图片
     */
    public function getQRCode($content ,$file=NULL , $type=1 , $expire = 604800){
        //首先获取ticket
        $ticket = $this->_getQRCodeTicket($content , $type=1 , $expire = 604800);
        $url = "https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=$ticket";
        $result = $this->_requestGet($url);
        if($file){
            file_put_contents( $file ,  $result);
        }
        header('Content-Type: image/jpeg');
        echo $result;
    }

    /*########################菜单管理#########################*/

    /**
    * 设置菜单
    */
    public function menuSet($menu) {
        $url = 'https://api.weixin.qq.com/cgi-bin/menu/create?access_token=' . $this->_getAccessToken();
        $data = $menu;
        $result = $this->_requestPost($url, $data);
        $result_obj = json_decode($result);
        if ($result_obj->errcode == 0) {
                return true;
        } else {
                echo $result_obj->errmsg, '<br>';
                return false;
        }
    }

    /**
    * 菜单删除
    */
    public function menuDelete() {
        $url = 'https://api.weixin.qq.com/cgi-bin/menu/delete?access_token=' . $this->_getAccessToken();
        $result = $this->_requestGet($url);
        $result_obj = json_decode($result);
        if ($result_obj->errcode == 0) {
                return true;
        } else {
                return false;
        }
    }
    /*###################一下私有的方法######################*/

     /**
     * 发送post请求的方式
     * @param string $url 
      *@param type $data 传递的数据
     * @param bool $ssl  是否为https协议
     * @return string 响应主体Content
     */
    private function _requestPost($url, $data, $ssl=true){
        // curl完成
        $curl = curl_init();

        //设置curl选项
        curl_setopt($curl, CURLOPT_URL, $url);//URL
        $user_agent = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : '
Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101 Firefox/38.0 FirePHP/0.7.4';
        curl_setopt($curl, CURLOPT_USERAGENT, $user_agent);//user_agent,请求代理信息
        curl_setopt($curl, CURLOPT_AUTOREFERER, true);//referer头,请求来源
        curl_setopt($curl, CURLOPT_TIMEOUT, 30);//设置超时时间
        //SSL相关
        if ($ssl) {
                curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);//禁用后cURL将终止从服务端进行验证
                curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 2);//检查服务器SSL证书中是否存在一个公用名(common name)。
        }
        // 处理post相关选项
        curl_setopt($curl, CURLOPT_POST, true);// 是否为POST请求
        curl_setopt($curl, CURLOPT_POSTFIELDS, $data);// 处理请求数据
        // 处理响应结果
        curl_setopt($curl, CURLOPT_HEADER, false);//是否处理响应头
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);//curl_exec()是否返回响应结果

        // 发出请求
        $response = curl_exec($curl);
        if (false === $response) {
                echo '<br>', curl_error($curl), '<br>';
                return false;
        }
        curl_close($curl);
        return $response;
    }

    /**
     * 发送get请求的方式
     * @param string $url 
     * @param bool $ssl  是否为https协议
     * @return string 响应主体Content
     */
    private function _requestGet($url , $ssl = true){
        // curl完成
        $curl = curl_init();
        //设置curl选项
        curl_setopt($curl, CURLOPT_URL, $url);//URL
        $user_agent = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101 Firefox/38.0 FirePHP/0.7.4';
        curl_setopt($curl, CURLOPT_USERAGENT, $user_agent);//user_agent,请求代理信息
        curl_setopt($curl, CURLOPT_AUTOREFERER, true);//referer头,请求来源
        curl_setopt($curl, CURLOPT_TIMEOUT, 30);//设置超时时间
        //SSL相关
        if ($ssl) {
                curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);//禁用后cURL将终止从服务端进行验证
                curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 2);//检查服务器SSL证书中是否存在一个公用名(common name)。
        }
        curl_setopt($curl, CURLOPT_HEADER, false);//是否处理响应头
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);//curl_exec()是否返回响应结果 , 或输出

        $response = curl_exec($curl);
        if(false == $response ){
            echo '<br>',  curl_error($curl),'<br/>';
            return false;
        }
        curl_close($curl);
        return $response;
    }
}

机器人类代码:

    <?php
/**
 * Created by PhpStorm.
 * User: Ainsworth
 * Date: 16/4/9
 * Time: 下午5:20
 */

define("TURING_API_URL", "http://www.tuling123.com/openapi/api");
define("TURING_API_KEY", "0c7d39a230f84b98903f61be912fdf06");

class TuringRobot
{
   /**
     * 获取图灵机器人的回复
     *
     * @param $content
     * @param $user_id
     * @return string
     */
   public function getInfo($content, $user_id)
    {
       $url = TURING_API_URL . "?key=" . TURING_API_KEY . "&info=" . $content . "&userid=" . $user_id;

       $ch = curl_init();
       curl_setopt($ch, CURLOPT_URL, $url);
       curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
       $output = curl_exec($ch);
       curl_close($ch);
       return json_decode($output, true);
   }

   /**
     * 回复文本消息
     *
     * @param $info
     * @return mixed
     */
   public function textInfo($info)
    {
       return $info["text"];
   }

   /**
     * 回复链接消息
     *
     * @param $info
     * @return string
     */
   public function linkInfo($info)
    {
       return $info["text"] . "\n" . $info["url"];
   }

   /**
     * 回复新闻消息
     *
     * @param $info
     * @return string
     */
   public function newsInfo($info)
    {
       $news = $info["text"] . "\n\n";
       $list = $info["list"];
       //foreach ($list as $l) {
       for ($i = 0; $i < count($list); $i++) {
           if ($i > 8) break;
            error_log($list[$i]["icon"]);
           $news .= $list[$i]["article"] . "\n" . $list[$i]["detailurl"] . "\n";
       }
       return $news;
   }

   /**
     * 回复菜谱消息
     *
     * @param $info
     * @return array
     */
   public function cookbookInfo($info)
    {
       $new_list = array();
       $list = $info["list"];
       for ($i = 0; $i < count($list); $i++) {
           // 由于微信图文消息最多发8条, 所以这边限制下
           if ($i > 5) break;
           $new_list[$i] = array("title" => $list[$i]["name"],
               "desc" => $list[$i]["info"],
               "picurl" => $list[$i]["icon"],
               "url" => $list[$i]["detailurl"]);
       }      

       return $new_list;
   }

}

转载于:https://my.oschina.net/u/3175093/blog/836937

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值