一個PHP檔案搞定微信公眾號自定義選單建立
阿新 • • 發佈:2019-01-06
<?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);
}
}
?>