zoukankan      html  css  js  c++  java
  • ThinkPHP tp Codeigniter ci 微信开发 控制器代码 示例 实例 模拟http请求 获取acces_token 创建自定义菜单 点击事件 转多客服

    0

        public function index(){
            //echo $this->getAccessToken();
            //$this->selectMenu();
            //$this->creatMenu();
            //$this->deleteMenu();
    
    
        /*     //用于验证的代码 勿动!!
            $tmpArr = array('xcjr2015', $_GET["timestamp"], $_GET["nonce"]);
            sort($tmpArr, SORT_STRING);
            $tmpStr = implode( $tmpArr );
            $tmpStr = sha1( $tmpStr );
            if( $tmpStr != $_GET["signature"] ){        exit;    }else{echo $_GET["echostr"];exit;}
             */
             
            $postStr         = file_get_contents("php://input");    if ( empty( $postStr ) ){        exit;    }
            $postObj        = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
            $to                = $postObj->ToUserName;
            $from            = $postObj->FromUserName;
            $openid            = sprintf('%s',$postObj->FromUserName);
            $content        = sprintf('%s',$postObj->Content);
    
            $textTpl= "<xml>
            <ToUserName><![CDATA[%s]]></ToUserName>
            <FromUserName><![CDATA[%s]]></FromUserName>
            <CreateTime>%s</CreateTime>
            <MsgType><![CDATA[%s]]></MsgType>
            <Content><![CDATA[%s]]></Content>
            </xml>";
    
            $transferTpl='<xml>
            <ToUserName><![CDATA[%s]]></ToUserName>
            <FromUserName><![CDATA[%s]]></FromUserName>
            <CreateTime>%s</CreateTime>
            <MsgType><![CDATA[%s]]></MsgType>
            </xml>';
    
            $news = "<xml>
            <ToUserName><![CDATA[%s]]></ToUserName>
            <FromUserName><![CDATA[%s]]></FromUserName>
            <CreateTime>%s</CreateTime>
            <MsgType><![CDATA[%s]]></MsgType>
            <ArticleCount>%s</ArticleCount>
            <Articles>
            <item>
            <Title><![CDATA[%s]]></Title> 
            <Description><![CDATA[%s]]></Description>
            <PicUrl><![CDATA[%s]]></PicUrl>
            <Url><![CDATA[%s]]></Url>
            </item>
            </Articles>                                                                    
            </xml>";
           exit( sprintf( $textTpl, $from, $to, $_SERVER['REQUEST_TIME'], 'text',$openid) ); 
    
    
            //接收消息/////////////////
            switch($postObj->MsgType){
                case 'event':
                            switch(sprintf('%s',$postObj->Event)){
                                case 'LOCATION':
                                    
                                break;    
                                case 'subscribe':
    
                                break;
                                case 'scancode_waitmsg':    
                                
                                break;
                                
                                case "CLICK":
                                    switch ($postObj->EventKey)
                                    {
                                        case "service":
                                            //exit( sprintf( $textTpl, $from, $to, $_SERVER['REQUEST_TIME'], 'text',$openid) ); 
                                            //转到客服
                                            $custom_url = "https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=".$this->getAccessToken();
                                            $customPostString = '{
                                                "touser":"'.$openid.'",
                                                "msgtype":"text",
                                                "text":
                                                {
                                                     "content":"正在接入...若客服不在请致电400-800-8957"
                                                }
                                            }';
                                            echo https_request($custom_url,$customPostString);
                                            
                                            exit( sprintf( $transferTpl, $from, $to, $_SERVER['REQUEST_TIME'],'transfer_customer_service') );     
    
                                        case 'one_login':    
                                        
                                        break;
                                        
                                        default:
                                            $content = "点击菜单:".$postObj->EventKey;
                                            return $this->transmitText($postObj, $content);
                                    }
                                break;
    
                            }//switch(sprintf('%s',$postObj->Event))结束
                    
                break;
    
                case 'text':
                    switch ($content)
                    {
                        case "测试":
                        exit( sprintf( $textTpl, $from, $to, $_SERVER['REQUEST_TIME'], 'text','成功') ); 
                        
                        case "kf":
                        $custom_url = "https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=".$this->getAccessToken();
                        $customPostString = 
                        '{
                            "touser":"'.$openid.'",
                            "msgtype":"text",
                            "text":
                            {
                                 "content":"正常"
                            }
                        }';
                        https_request($custom_url,$customPostString);
    
                        break;
                        
                        default://转到客服
                        exit( sprintf( $transferTpl, $from, $to, $_SERVER['REQUEST_TIME'],'transfer_customer_service') );
                    }     
    
                default://转到客服
                exit( sprintf( $transferTpl, $from, $to, $_SERVER['REQUEST_TIME'],'transfer_customer_service') );
            }//switch结束
    
        }//index//////////////////////////方法结束
    
    
        public function creatMenu()//创建菜单
        {
        $menuPostString = //构造POST给微信服务器的菜单结构体
        '{
            "button":[
            {
                "name":"我的账号",
                "sub_button":[
                {    
                    "type":"view",
                    "name":"用户登录",
                    "url":"http://www.econgfin.com/mobile/login.html"
                },
                {    
                    "type":"view",
                    "name":"用户注册",
                    "url":"http://www.econgfin.com/mobile/reg.html"
                },
                {    
                    "type":"view",
                    "name":"立即投标",
                    "url":"http://www.econgfin.com/mobile/borrow/blist.html"
                }]
            },    
            {
                "name":"关于e葱",
                "sub_button":[
                {    
                    "type":"view",
                    "name":"公司简介",
                    "url":"http://www.econgfin.com/mobile/site/gsjs.html"
                },
                {    
                    "type":"view",
                    "name":"联系我们",
                    "url":"http://www.econgfin.com/mobile/site/contact.html"
                },
                {    
                    "type":"view",
                    "name":"加入e葱",
                    "url":"http://www.econgfin.com/mobile/site/zhaopin.html"
                }]
            },
            {
                "type":"view",
                "name":"新手指引",
                "url":"http://www.econgfin.com/mobile/safes/index.html",
            }]
         }';
    
            $menuPostUrl = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=".$this->getAccessToken();//POST的url
            echo $this->https_request($menuPostUrl,$menuPostString);
            
        }
    
    
        public function deleteMenu(){//删除菜单
            $MENU_URL="https://api.weixin.qq.com/cgi-bin/menu/delete?access_token=".$this->getAccessToken();
            echo $this->https_request($MENU_URL);
        }
    
        public function selectMenu(){//菜单
            $MENU_URL="https://api.weixin.qq.com/cgi-bin/menu/get?access_token=".$this->getAccessToken();
            echo $this->https_request($MENU_URL);
        }    
    
        //获取Access Token///////
        function getAccessToken()
        {
            //从mysql中获取access_token
            $query = $this->db->get('ych_token');
            $token = $query->row_array();
    
            if(time() > ($token['last_time'] + 7200)){
                $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=wx9b5736a2e8185044&secret=c4a5797a7e8843d14dc0278eb0013dd8";
                $res = $this->https_request($url);
                $result = json_decode($res, true);
                
                $data['access_token'] = $result["access_token"];
                $data['last_time'] = time();
                $this->db->where('id',1);
                $this->db->update('ych_token',$data);
    
                return $result["access_token"]; 
            }
            
            return $token["access_token"];
        }    
        
        //https请求(支持GET和POST)/////////////
        function https_request($url, $data = null)
        {
            $curl = curl_init();
            curl_setopt($curl, CURLOPT_URL, $url);
            curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
            curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
            if (!empty($data)){
                curl_setopt($curl, CURLOPT_POST, 1);
                curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
            }
            curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
            $output = curl_exec($curl);
            curl_close($curl);
            return $output;
        }
            
  • 相关阅读:
    非域,非匿名用户访问远程企业服务的详细步骤
    调用远程的企业服务的安全问题
    未能加载文件或程序集“****”或它的某一个依赖项的一种情况
    XAMPP使用非80端口的安装配置修改
    Lucene 的存储结构概述
    .NET Framework 4.0 SDK的安装
    lucene 文件存储相关的几个类
    ASP.NET 状态服务 及 session丢失问题解决方案总结
    不安装.net framework框架运行.Net 程序的方法<收藏>
    net面试题集及答案
  • 原文地址:https://www.cnblogs.com/shaoing/p/5502511.html
Copyright © 2011-2022 走看看