欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

一个PHP文件搞定微信公众号自定义菜单创建

程序员文章站 2023-12-24 11:52:03
...

先看最终效果:
一个PHP文件搞定微信公众号自定义菜单创建

环境要求:PHP5.3+

这里只实现view类型的按钮,其他的请自行修改,代码如下:

<?php
header('Content-type:text/html; Charset=utf-8');
$appid='xxxxx';  //你的appid
$appsecret='xxxxx';  //你的app**
$wx = new WxService($appid,$appsecret);

$data[0]['name'] = array('菜单1','#');
$data[1]['name'] = array('菜单2','#');
$data[2]['name'] = array('菜单3','#');

$data[0]['sub_button'][0] = array('菜单1-1','http://www.baidu.com');
$data[0]['sub_button'][1] = array('菜单1-2','http://www.baidu.com');

$data[1]['sub_button'][0] = array('菜单2-1','http://www.baidu.com');
$data[1]['sub_button'][1] = array('菜单2-2','http://www.baidu.com');

$data[2]['sub_button'][0] = array('菜单3-1','http://www.baidu.com');
$data[2]['sub_button'][1] = array('菜单3-2','http://www.baidu.com');

$result = $wx->menuCreate($data);

if($result['errcode']==0){
    echo '<h1>创建菜单成功!</h1>';
}else{
    echo '<h1>创建菜单失败:'.$result['errmsg'].'</h1>';
}

class WxService
{
    protected $appid;
    protected $appsecret;
    protected $templateId;
    protected $token = null;
    public $data = null;
    public function __construct($appid, $appsecret)
    {
        $this->appid = $appid;
        $this->appsecret = $appsecret;
        $this->token = $this->getToken();
    }

    public function menuCreate($data)
    {
        $url = 'https://api.weixin.qq.com/cgi-bin/menu/create?access_token='.$this->getToken();
        $menu = array();
        $i=0;
        foreach ($data as $item){
            $menu['button'][$i]['name'] = $item['name'][0];
            if($item['sub_button']){
                $j=0;
                foreach ($item['sub_button'] as $sub){
                    $menu['button'][$i]['sub_button'][$j]['type'] = 'view';
                    $menu['button'][$i]['sub_button'][$j]['name'] = $sub[0];
                    $menu['button'][$i]['sub_button'][$j]['url'] = $sub[1];
                    $j++;
                }
            }else{
                $menu['button'][$i]['type'] = 'view';
                $menu['button'][$i]['url'] = $item['name'][1];
            }
            $i++;
        }

        $data = self::xjson_encode($menu);
        $data = str_replace('\/','/',$data);
        $result = self::curlPost($url,$data);
        return json_decode($result,true);
    }


    function getToken() {
        if($this->token) return $this->token;
        $url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid='.$this->appid.'&secret='.$this->appsecret;
        $res = self::curlGet($url);
        $result = json_decode($res, true);
        if($result['errmsg']){
            echo $res;exit();
        }
        return $result['access_token'];
    }

    public static function curlGet($url = '', $options = array())
    {
        $ch = curl_init($url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_TIMEOUT, 30);
        if (!empty($options)) {
            curl_setopt_array($ch, $options);
        }
        //https请求 不验证证书和host
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
        $data = curl_exec($ch);
        curl_close($ch);
        return $data;
    }
    public static function curlPost($url = '', $postData = '', $options = array())
    {
        $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, $postData);
        curl_setopt($ch, CURLOPT_TIMEOUT, 30); //设置cURL允许执行的最长秒数
        if (!empty($options)) {
            curl_setopt_array($ch, $options);
        }
        //https请求 不验证证书和host
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
        $data = curl_exec($ch);
        if($data === false)
        {
            echo 'Curl error: ' . curl_error($ch);exit();
        }
        curl_close($ch);
        return $data;
    }

    public static function xjson_encode($data)
    {
        if(version_compare(PHP_VERSION,'5.4.0','<')){
            $str = json_encode($data);
            $str = preg_replace_callback("#\\\u([0-9a-f]{4})#i",function($matchs){
                return iconv('UCS-2BE', 'UTF-8', pack('H4', $matchs[1]));
            },$str);
            return $str;
        }
        return json_encode($data, JSON_UNESCAPED_UNICODE);
    }
}
?>
相关标签: 微信公众号

上一篇:

下一篇: