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;
    }
        
时间: 2024-10-23 09:15:07

ThinkPHP tp Codeigniter ci 微信开发 控制器代码 示例 实例 模拟http请求 获取acces_token 创建自定义菜单 点击事件 转多客服的相关文章

java微信开发API解析(六)-综合运用(消息处理、自定义菜单响应处理、用户自动分组处理;包含源码)

java微信开发API解析(六) 全局说明 * 详细说明请参考前两篇文章. 本文说明 * 本文主要是对前面学习的知识进行综合整合. * 我们对需要的bean.工具类.xml.file进行必要的包装. * 我们构建一个可以直接使用的Java微信应用. * 文后包含该部分效果的测试微信公众号 * 文后包含构建好的源码供下载 bean的构建 public class Access_token,获取Access_token对应的bean. private String access_token; pri

[转]微信开发.Net 接入示例

本文转自:http://my.oschina.net/lcak/blog/219618 微信公众平台接口开发官方仅提供了 PHP 接入示例代码, 网上找到的.Net代码多半需要积分下载, 所以自己写了一个 如下: <%@ Page Language="C#" %> <script runat="Server" > //此处TOKEN可以自行修改 public const String TOKEN = "weixin_kevinlc&

【微信公众平台开发】创建自定义菜单(四)

1.根据微信公众平台文档,得知创建自定义菜单有如下规则: a.目前自定义菜单最多包括3个一级菜单,每个一级菜单最多包含5个二级菜单.一级菜单最多4个汉字,二级菜单最多7个汉字,多出来的部分将会以"..."代替.请注意,创建自定义菜单后,由于微信客户端缓存,需要24小时微信客户端才会展现出来.建议测试时可以尝试取消关注公众账号后再次关注,则可以看到创建后的效果. 注:所以最多只能创建15个功能菜单,多了就出错了! b. 目前自定义菜单接口可实现两种类型按钮,如下: click: 用户点击

.NET微信公众号开发-2.0创建自定义菜单

一.前言 开发之前,我们需要阅读官方的接口说明文档,不得不吐槽一下,微信的这个官方文档真的很烂,但是,为了开发我们需要的功能,我们也不得不去看这些文档. 接口文档地址:http://mp.weixin.qq.com/wiki/13/43de8269be54a0a6f64413e4dfa94f39.html 看了这些个文档,基本意思明白了,就是我们把我们要创建的菜单创建好,post到微信的服务器上面,微信服务器然后给我们一些状态码,从而判断我们的菜单是否创建成功,只是在发送json数据以前我们要做

微信公众号开发系列-开发模式创建自定义菜单

通过程序方式实现自定义菜单,通过http请求封装类交互微信自定义菜单接口 1.得到AccessToken access_token是公众号的全局唯一票据,公众号调用各接口时都需使用access_token.正常情况下access_token有效期为7200秒,重复获取将导致上次获取的access_token失效.由于获取access_token的api调用次数非常有限,建议开发者全局存储与更新access_token,频繁刷新access_token会导致api调用受限,影响自身业务. 请开发者

.NET开发微信公众号之创建自定义菜单

一.简介 微信公众平台服务号以及之前成功申请内测资格的订阅号都具有自定义菜单的功能.开发者可利用该功能为公众账号的会话界面底部增加自定义菜单,用户点击菜单中的选项,可以调出相应的回复信息或网页链接.自定义菜单接口将为公众账号的信息展示空间提供更多可能性.本文将针对自定义菜单做简单的开发应用,以供读者参考. 二.官方说明 开发者获取使用凭证后,可以使用该凭证对公众账号的自定义菜单进行创建.查询和删除等操作. 自定义菜单接口可实现以下类型按钮: click(点击事件): 用户点击click类型按钮后

微信公众平台如何创建自定义菜单?

微信现在的功能越来越强大了,申请认证后的开发者能自定义菜单,用户直接点击微信界面下方的菜单,就能直接去到指定的页面,下面小编用[微信公众平台测试号]为大家演示一下怎么创建自定义菜单. 工具/原料 认证后的微信公众平台 微信公众平台切换开发者模式 方法/步骤 登录[微信公众平台],选择[功能]菜单下面的[高级功能],进入[开发模式]. 由于小编的微信公众平台还没通过认证,下面用[申请测试账户]为大家演示. 微信公众平台接口测试帐号申请,无需公众帐号.快速申请接口测试号,直接体验和测试公众平台所有高

微信公众平台新增获取自动回复和自定义菜单配置接口

微信公众平台自动回复功能可以为运营者减少了重复回复消息的次数,但如果自动回复的数量多的话管理就比较麻烦:自定义菜单相当于你这个公众号的导航,但有些公众号会限制不能添加外部链接.现在好了,公众平台开发者接口更新,新增获取自动回复和自定义菜单配置接口,对所有公众号开放. 新增的接口具体是: 1. 获取自动回复规则接口 该接口可以获取公众号设置的自动回复规则,包括关注后自动回复.消息自动回复和关键词自动回复. 开发者可以通过该接口,获取公众号当前使用的自动回复规则,包括关注后自动回复.消息自动回复(6

php curl返回false----curl调用微信创建自定义菜单返回false

在调用微信公众平台的创建自定义菜单接口来创建自定义菜单时遇到一个大坑,php curl返回false一直无法调试通过,代码如下: > //创建菜单public function menu_create($data){$url =" https://api.weixin.qq.com/cgi-bin/menu/create?access_token={$this->get_access_token()}";echo $url.'----------<br>'; r