晓夏

北漂的女孩

Good Luck To You!

php 微信菜单自定义管理

浏览量:436

  1. 微信菜单管理

CREATE TABLE `hhs_weixin_menu` (
 `id` smallint(5) NOT NULL DEFAULT ''  AUTO_INCREMENT,
 `cat_name` varchar(255) NOT NULL DEFAULT '' COMMENT '菜单栏名称',
 `cat_type` tinyint(1) unsigned NOT NULL DEFAULT '1' COMMENT '菜单动作类型 0:click 1:view',
 `keywords` varchar(255) NOT NULL DEFAULT '' COMMENT '关键描述',
 `weixin_key` varchar(255) NOT NULL DEFAULT '' COMMENT '微信keys地址',
 `links` varchar(255) NOT NULL DEFAULT '' COMMENT '链接地址',
 `sort_order` tinyint(3) unsigned NOT NULL DEFAULT '50' COMMENT '位置排序',
 `weixin_type` tinyint(1) unsigned NOT NULL DEFAULT '0',
 `parent_id` smallint(5) unsigned NOT NULL DEFAULT '0' COMMENT '类目级别',
 PRIMARY KEY (`id`),
 KEY `cat_type` (`cat_type`),
 KEY `sort_order` (`sort_order`),
 KEY `parent_id` (`parent_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8

新增菜单:

图片.png

菜单列表:

图片.png

创建菜单

<?php
/**
 * 生成菜单
 * @Author:  lianghuiju@chuchujie.com
 * @param:   [type]
 * @DateTime 2017-01-22T17:28:32+0800
 */
public function makeMenu()
{
    $this->load->model('WechatMenu');
    $this->load->model('WechatCurl');

    $menu_info = $this->WechatMenu->selectMenu();
    $menu = $this->sort($menu_info,0);
    foreach ($menu as $key => $val) {
        if($val['parent_id'] == 0 && $val['cat_type'] == 1) {
            $arr[$val['cat_id']] = array(
                'type' => 'view',
                'name' => $val['cat_name'],
                'url' => $val['links'],
                'sub_button' => array(),
                'sort_order' => $val['sort_order']
            );
        }
        if($val['parent_id'] == 0 && $val['cat_type'] == 0) {
            $arr[$val['cat_id']] = array(
                'name' => $val['cat_name'],
                'sub_button' => array(),
                'sort_order' => $val['sort_order']
            );
        }
        if($val['parent_id'] != 0 && $val['cat_type'] == 1) {
            $arr[$val['parent_id']]['sub_button'][] = array(
                'type' => 'view',
                'name' => $val['cat_name'],
                'url' => $val['links'],
                'sub_button' => array(),
                'sort_order' => $val['sort_order']
            );
        }
        if($val['parent_id'] != 0 && $val['cat_type'] == 0) {
            $arr[$val['parent_id']]['sub_button'][] = array(
                'type' => 'click',
                'name' => $val['cat_name'],
                'url' => $val['links'],
                'sub_button' => array(),
                'sort_order' => $val['sort_order']
            );
        }
    }
    uasort($arr,array(&$this,'compare'));
    if(count($arr) > 3) {
        $arr = array_slice($arr,0,3,true);
    }
    $i = 0;
    foreach ($arr as $key => $val) {
        if(!isset($val['type'])) {
            uasort($arr[$key]['sub_button'],array(&$this,'compare'));
            if(count($arr[$key]['sub_button']) > 5) {
                $arr[$key]['sub_button'] = array_slice($arr[$key]['sub_button'],0,5,true);
            }
            $j =0;
            $resort = array();
            foreach ($arr[$key]['sub_button'] as $k => $v) {
                unset($arr[$key]['sub_button'][$k]['sort_order']);
                $resort[$j] = $v;
                $j++;
            }
            $arr[$key]['sub_button'] = $resort;
        }
        unset($arr[$key]['sort_order']);
        $res[$i] = $arr[$key];
        $i++;
    }
    $token = $this->get_access_token();
    $data['button'] = $res;
    $data = json_encode($data, JSON_UNESCAPED_UNICODE);
    $result = $this->createMenu($token, $data);

    if ($result['errmsg'] == 'ok') {
        echo '<script>alert("创建自定义菜单成功");</script>';
        echo '<script>window.location.href = "wechat.php?c=menu&m=menuList";</script>';
        exit();
    } else {
        if(!isset($result['errcode'])) {
            log_message('error',$result);
        }
        $msg = "wx_makemenu_fail==========={$result['errcode']}=================={$result['errmsg']}";
        log_message('error',$msg);
        echo '<script>alert("创建自定义菜单失败");</script>';
        echo '<script>window.location.href = "wechat.php?c=menu&m=menuList";</script>';
        exit();
    }
}

/**
     * 获取token
     * @Author:  lianghuiju@chuchujie.com
     * @param:   [type]
     * @DateTime 2017-04-03 T09:58:25+0800
     * @return   [type]
     *grant_type 、appid 、 secret 根据自己的微信账号查询并填写真实的信息
     *
     */
    public function get_access_token()
    {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, "https://api.weixin.qq.com/cgi-bin/token?grant_type=#####&appid=#####&secret=####");
        curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET");
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
        curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)');
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
        curl_setopt($ch, CURLOPT_AUTOREFERER, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, array());
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        $tmpInfo = json_decode(curl_exec($ch),true);
        if (curl_errno($ch)) {
            return curl_error($ch);
        }
        curl_close($ch);
        return $tmpInfo['access_token'];
    }
    
    /**
     * 生成菜单
     * @Author:  lianghuiju@chuchujie.com
     * @param:   [type]
     * @DateTime 2017-02-03T09:58:44+0800
     * @param    [type]                   $token [description]
     * @param    [type]                   $data  [description]
     * @return   [type]
     */
    public function createMenu($token, $data)
    {

        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=" . $token);
        curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
        curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)');
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
        curl_setopt($ch, CURLOPT_AUTOREFERER, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        $tmpInfo = curl_exec($ch);
        if (curl_errno($ch)) {
           return curl_error($ch);
        }
        curl_close($ch);
        $arr = json_decode($tmpInfo, true);
        return $arr;
    }













神回复

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。