一個PHP文件搞定微信公衆號自定義菜單創建

先看最終效果:
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);
    }
}
?>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章