• 技术文章 >php教程 >php手册

    php版微信公众平台账号自定义菜单类

    2016-06-02 09:14:46原创539
    微信公众平台服务号可申请自定义菜单了,其它的号暂时不支持自定义菜单了,这个不但可以使用api来操作,还可以直接在后台定义菜单与参数哦。

    申请自定义菜单

    服务号可以申请自定义菜单;使用QQ登录的公众号,可以升级为邮箱登录;使用邮箱登录的公众号,可以修改登录邮箱;群发消息可以同步到腾讯微博。

    微信公众平台升级:服务号可申请自定义菜单

    微信公众平台账号api程序

    Run();
    class wechatCallbackapiTest {
        private $fromUsername;
        private $toUsername;
        private $times;
        private $keyword;
        private $app_id;
        private $app_secret;
        public function __construct($appid, $appsecret) {
            // code...
            $this->app_id = $appid;
            $this->app_secret = $appsecret;
        }
        public function valid() {
            $echoStr = $_GET["echostr"];
            if ($this->checkSignature()) {
                echo $echoStr;
                exit;
            }
        }
        /**
         * 运行程序
         * @param string $value [description]
         */
        public function Run() {
            $this->responseMsg();
            $arr[] = "您好,这是自动回复,我现在不在,有事请留言,我会尽快回复你的^_^";
            echo $this->make_xml("text", $arr);
        }
        public function responseMsg() {
            $postStr = $GLOBALS["HTTP_RAW_POST_DATA"]; //返回回复数据
            if (!empty($postStr)) {
                $access_token = $this->get_access_token(); //获取access_token
                $this->createmenu($access_token); //创建菜单
                //$this->delmenu($access_token);//删除菜单
                $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
                $this->fromUsername = $postObj->FromUserName; //发送消息方ID
                $this->toUsername = $postObj->ToUserName; //接收消息方ID
                $this->keyword = trim($postObj->Content); //用户发送的消息
                $this->times = time(); //发送时间
                $MsgType = $postObj->MsgType; //消息类型
                if ($MsgType == 'event') {
                    $MsgEvent = $postObj->Event; //获取事件类型
                    if ($MsgEvent == 'subscribe') { //订阅事件
                        $arr[] = "你好,我是xxx,现在我们是好友咯![愉快][玫瑰]";
                        echo $this->make_xml("text", $arr);
                        exit;
                    } elseif ($MsgEvent == 'CLICK') { //点击事件
                        $EventKey = $postObj->EventKey; //菜单的自定义的key值,可以根据此值判断用户点击了什么内容,从而推送不同信息
                        $arr[] = $EventKey;
                        echo $this->make_xml("text", $arr);
                        exit;
                    }
                }
            } else {
                echo "this a file for weixin API!";
                exit;
            }
        }
        /**
         * 获取access_token
         */
        private function get_access_token() {
            $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" . $this->app_id . "&secret=" . $this->app_secret;
            $data = json_decode(file_get_contents($url) , true);
            if ($data['access_token']) {
                return $data['access_token'];
            } else {
                return "获取access_token错误";
            }
        }
        /**
         * 创建菜单
         * @param $access_token 已获取的ACCESS_TOKEN
         */
        public function createmenu($access_token) {
            $url = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=" . $access_token;
            $arr = array(
                'button' => array(
                    array(
                        'name' => urlencode("生活查询") ,
                        'sub_button' => array(
                            array(
                                'name' => urlencode("天气查询") ,
                                'type' => 'click',
                                'key' => 'VCX_WEATHER'
                            ) ,
                            array(
                                'name' => urlencode("身份证查询") ,
                                'type' => 'click',
                                'key' => 'VCX_IDENT'
                            )
                        )
                    ) ,
                    array(
                        'name' => urlencode("轻松娱乐") ,
                        'sub_button' => array(
                            array(
                                'name' => urlencode("刮刮乐") ,
                                'type' => 'click',
                                'key' => 'VCX_GUAHAPPY'
                            ) ,
                            array(
                                'name' => urlencode("幸运大转盘") ,
                                'type' => 'click',
                                'key' => 'VCX_LUCKPAN'
                            )
                        )
                    ) ,
                    array(
                        'name' => urlencode("我的信息") ,
                        'sub_button' => array(
                            array(
                                'name' => urlencode("关于我") ,
                                'type' => 'click',
                                'key' => 'VCX_ABOUTME'
                            ) ,
                            array(
                                'name' => urlencode("工作信息") ,
                                'type' => 'click',
                                'key' => 'VCX_JOBINFORMATION'
                            )
                        )
                    )
                )
            );
            $jsondata = urldecode(json_encode($arr));
            $ch = curl_init();
            curl_setopt($ch, CURLOPT_URL, $url);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
            curl_setopt($ch, CURLOPT_POST, 1);
            curl_setopt($ch, CURLOPT_POSTFIELDS, $jsondata);
            curl_exec($ch);
            curl_close($ch);
        }
        /**
         * 查询菜单
         * @param $access_token 已获取的ACCESS_TOKEN
         */
        private function getmenu($access_token) {
            // code...
            $url = "https://api.weixin.qq.com/cgi-bin/menu/get?access_token=" . $access_token;
            $data = file_get_contents($url);
            return $data;
        }
        /**
         * 删除菜单
         * @param $access_token 已获取的ACCESS_TOKEN
         */
        private function delmenu($access_token) {
            // code...
            $url = "https://api.weixin.qq.com/cgi-bin/menu/delete?access_token=" . $access_token;
            $data = json_decode(file_get_contents($url) , true);
            if ($data['errcode'] == 0) {
                // code...
                return true;
            } else {
                return false;
            }
        }
        /**
         *@param type: text 文本类型, news 图文类型
         *@param value_arr array(内容),array(ID)
         *@param o_arr array(array(标题,介绍,图片,超链接),...小于10条),array(条数,ID)
         */
        private function make_xml($type, $value_arr, $o_arr = array(
            0
        )) {
            //=================xml header============
            $con = "
                        fromUsername}]]>
                        toUsername}]]>
                        {$this->times}
                        ";
            //=================type content============
            switch ($type) {
                case "text":
                    $con.= "
                        {$o_arr}";
                    break;
    
                case "news":
                    $con.= "{$o_arr[0]}
                         ";
                    foreach ($value_arr as $id => $v) {
                        if ($id >= $o_arr[0]) break;
                        else null; //判断数组数不超过设置数
                        $con.= "
                             <![CDATA[{$v[0]}]]> 
                             
                             
                             
                             ";
                    }
                    $con.= "
                         {$o_arr[1]}";
                    break;
                } //end switch
                //=================end return============
                $con.= "";
                return $con;
            }
            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;
                }
            }
    }
    ?>
    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:foreach curl_setopt
    上一篇:php 赋值和引用赋值使用说明 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • 学习PHP重定向的三种方法• 关于UEditor编辑器远程图片上传失败的解决办法• 基于php实现七牛抓取远程图片• ThinkPHP框架里隐藏index.php,thinkphpindex.php• PHP针对JSON操作实例分析,phpjson实例分析
    1/1

    PHP中文网