<?php

// +----------------------------------------------------------------------

// | ThinkPHP [ WE CAN DO IT JUST THINK IT ]

// +----------------------------------------------------------------------

// | Copyright (c) 2006-2014 http://thinkphp.cn All rights reserved.

// +----------------------------------------------------------------------

// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )

// +----------------------------------------------------------------------

// | Author: 麦当苗儿 <zuojiazi@vip.qq.com> <http://www.zjzit.cn>

// +----------------------------------------------------------------------



namespace Sdk\Controller;



use Think\Controller;

use Com\Wechat;

use Com\WechatAuth;



class WechatController extends Controller{

    /**

     * 微信消息接口入口

     * 所有发送到微信的消息都会推送到该操作

     * 所以,微信公众平台后台填写的api地址则为该操作的访问地址

     */

    public function index($id = ''){

        //调试

        try{

            

            $appid = C('wechat.appid'); //AppID(应用ID)

            $token = C('wechat.token'); //微信后台填写的TOKEN

            $crypt = C('wechat.key'); //消息加密KEY(EncodingAESKey)

            $secret= C('wechat.appsecret');

            /* 加载微信SDK */

            $wechat = new Wechat($token, $appid, $crypt);

            /* 获取请求信息 */

            $data = $wechat->request();

            if($data && is_array($data)){

                //执行Demo

                $this->demo($wechat, $data);

                //记录微信推送过来的数据

                file_put_contents('./data.json', $wechatauth->accessToken);

                //$this->wechat_menu();

            }

        } catch(\Exception $e){

            file_put_contents('./error.json', json_encode($e->getMessage()));

        }

        

    }

    private function set_admin_openid($data){

        $openidmap['id']=substr($data['EventKey'],0,-3);

        $type=substr($data['EventKey'],-1);

        // wite_text($type,dirname(__FILE__).'/pc11.txt');

        $openiddata['admin_openid']=$data['FromUserName'];

        $openiddata['openid_sign']=$data['EventKey'];

        if($type!=0){

            $admindata=M('ucenter_member')->where($openidmap)->find();

        }

        if($type==1){

            if($admindata['admin_openid']!=''){

                return date('Y-m-d H:i:s').' 请先解绑微信';

            }elseif($admindata['openid_sign']==$data['EventKey']){

                return date('Y-m-d H:i:s').' 页面错误,请刷新页面重试';

            }else{

                $opres=M('ucenter_member')->where($openidmap)->save($openiddata);

                if($opres){

                    return date('Y-m-d H:i:s').' 微信绑定成功';

                }else{

                    return date('Y-m-d H:i:s').' 微信绑定失败';

                }

            }

        }elseif($type==2){

            if($admindata['admin_openid']!=$data['FromUserName']){

                return date('Y-m-d H:i:s').' 对不起,你没有权限';

            }

            if($admindata['admin_openid']==''){

                return date('Y-m-d H:i:s').' 该管理员账号暂未绑定微信';

            }elseif($admindata['openid_sign']==$data['EventKey']){

                return date('Y-m-d H:i:s').' 页面错误,请刷新页面重试';

            }else{

                $opres=M('ucenter_member')->where($openidmap)->setField("admin_openid",'');
                $opres=M('ucenter_member')->where($openidmap)->setField("openid_sign",$data['EventKey']);

                if($opres){

                    return date('Y-m-d H:i:s').' 微信解绑成功';

                }else{

                    return date('Y-m-d H:i:s').' 微信解绑失败';

                }

            }

        }elseif($type==0){

            $qrop['uid']=$data['FromUserName'];

            $qrop['token']=$data['EventKey'];

            $qrop['status']=1;

            $qrop['create_time']=time();

            M('qr_login','tab_')->add($qrop);

            // $re=M('qr_login','tab_')->getlastsql();

            // wite_text($re,dirname(__FILE__).'/pc11.txt');

            R('Media/QrLogin/send',array('token'=>$data['EventKey']));

            return date('Y-m-d H:i:s').' 管理员扫码登录';

        }else{

            return date('Y-m-d H:i:s').' 数据错误,请刷新页面重试';

        }

    }

    /**

     * DEMO

     * @param  Object $wechat Wechat对象

     * @param  array  $data   接受到微信推送的消息

     */

    private function demo($wechat, $data){

        $wechatname=C('wechat.wechatname');

        switch ($data['MsgType']) {

            case Wechat::MSG_TYPE_EVENT:

                $msg = C('wechat.message');

                switch ($data['Event']) {

                    case Wechat::MSG_EVENT_SUBSCRIBE:

                        if(strstr($data['EventKey'],'qrscene_')){//扫描带参数的二维码 绑定用户使用yyh

                            $data['EventKey']=str_replace('qrscene_', '', $data['EventKey']);

                            $opentt=$this->set_admin_openid($data);

                            $wechat->replyText($opentt);

                        }else{

                            $wechat->replyText($data['EventKey']);

                        }

                        break;

                    case Wechat::MSG_EVENT_UNSUBSCRIBE:

                        //取消关注,记录日志

                        break;

                    case Wechat::MSG_EVENT_SCAN:

                        $opentt=$this->set_admin_openid($data);

                        $wechat->replyText($opentt);

                        break;

                    default:

                        $wechat->replyText($msg['default_msg']);

                        break;

                }

                break;

            case Wechat::MSG_TYPE_TEXT:

                switch ($data['Content']) {



                    case '图文':

                        $wechat->replyNewsOnce(

                            "全民创业蒙的就是你,来一盆冷水吧!",

                            "全民创业已经如火如荼,然而创业是一个非常自我的过程,它是一种生活方式的选择。从外部的推动有助于提高创业的存活率,但是未必能够提高创新的成功率。第一次创业的人,至少90%以上都会以失败而告终。创业成功者大部分年龄在30岁到38岁之间,而且创业成功最高的概率是第三次创业。", 

                            "http://www.topthink.com/topic/11991.html",

                            "http://yun.topthink.com/Uploads/Editor/2015-07-30/55b991cad4c48.jpg"

                        ); //回复单条图文消息

                        break;



                    case '多图文':

                        $news = array(

                            "全民创业蒙的就是你,来一盆冷水吧!",

                            "全民创业已经如火如荼,然而创业是一个非常自我的过程,它是一种生活方式的选择。从外部的推动有助于提高创业的存活率,但是未必能够提高创新的成功率。第一次创业的人,至少90%以上都会以失败而告终。创业成功者大部分年龄在30岁到38岁之间,而且创业成功最高的概率是第三次创业。", 

                            "http://www.topthink.com/topic/11991.html",

                            "http://yun.topthink.com/Uploads/Editor/2015-07-30/55b991cad4c48.jpg"

                        ); //回复单条图文消息

                        $wechat->replyNews($news, $news, $news, $news, $news);

                        break;

                    default:

                        $map['game_name']=array("like","%".$data['Content']."%");

                        $game = M("game","tab_")

                                ->field("tab_game.game_name,tab_game.introduction,tab_game.icon,tab_game_set.login_notify_url")

                                ->join("tab_game_set  on tab_game.id=tab_game_set.id")

                                ->where($map)

                                ->find();

                        if(!empty($game)){

                            $picture = M('Picture')->where(array('status'=>1))->getById($game['icon']);

                            $picture['path'] = $_SERVER['HTTP_HOST'].$picture['path'];

                            $_key = 'jCTVfkOz2nQPLBwYM2f1as4MtFTe9wm9';//游戏放提供

                            $data['uid']   = $uid;//uid同步平台uid唯一值,

                            $data['email'] = "xx";//同步平台账号

                            $data['t']     = time();

                            $data['sign']  = md5($data['uid']."&".$data['email']."&".$data['t']."&".$_key);     

                            $wechat->replyNewsOnce(

                                $game['game_name'],

                                $game['introduction'], 

                                $game['login_notify_url']."?".http_build_query($data),

                                "http://yun.topthink.com/Uploads/Editor/2015-07-30/55b991cad4c48.jpg"

                            ); //回复单条图文消息

                        }

                        $wechat->replyText("欢迎访问".$wechatname."公众平台!您输入的内容是:{$data['Content']}");

                        break;

                }

                break;

            

            default:

                # code...

                break;

        }

    }



    /**

     * 资源文件上传方法

     * @param  string $type 上传的资源类型

     * @return string       媒体资源ID

     */

    private function upload($type){

        $appid     = C('wechat.appid');

        $appsecret = C('wechat.appsecret');

        $token = session("token");

        if($token){

            $auth = new WechatAuth($appid, $appsecret, $token);

        } else {

            $auth  = new WechatAuth($appid, $appsecret);

            $token = $auth->getAccessToken();



            session(array('expire' => $token['expires_in']));

            session("token", $token['access_token']);

        }



        switch ($type) {

            case 'image':

                $filename = './Public/image.jpg';

                $media    = $auth->materialAddMaterial($filename, $type);

                break;



            case 'voice':

                $filename = './Public/voice.mp3';

                $media    = $auth->materialAddMaterial($filename, $type);

                break;



            case 'video':

                $filename    = './Public/video.mp4';

                $discription = array('title' => '视频标题', 'introduction' => '视频描述');

                $media       = $auth->materialAddMaterial($filename, $type, $discription);

                break;



            case 'thumb':

                $filename = './Public/music.jpg';

                $media    = $auth->materialAddMaterial($filename, $type);

                break;

            default:

                return '';

        }



        if($media["errcode"] == 42001){ //access_token expired

            session("token", null);

            $this->upload($type);

        }

        return $media['media_id'];

    }



    /**

    *微信 菜单设置

    */

    private function wechat_menu(){

        $appid     = C('wechat.appid');

        $appsecret = C('wechat.appsecret');

        $token = session("token");

        if($token){

            $auth = new WechatAuth($appid, $appsecret, $token);

        } else {

            $auth  = new WechatAuth($appid, $appsecret);

            $token = $auth->getAccessToken();

            session(array('expire' => $token['expires_in']));

            session("token", $token['access_token']);

        }

        $newmenu =  array(         

            array('type'=>'click','name'=>'测试菜单','key'=>'MENU_KEY_NEWS'),

            array('type'=>'view','name'=>'我要搜索','url'=>'http://www.baidu.com'),

            array('name'=>'菜单',"sub_button"=>array(

                array('type'=>'click','name'=>'最新消息','key'=>'MENU_KEY_NEWS'),

                array('type'=>'view','name'=>'我要搜索','url'=>'http://www.baidu.com'),

            )),                  

        );

        $data = $auth->menuCreate($newmenu);

        file_put_contents(dirname(__FILE__).'/data.json', json_encode($data));

    }

}