参考微信开发接口:http://mp.weixin.qq.com/wiki/13/43de8269be54a0a6f64413e4dfa94f39.html
表格结构:
主菜单:
二级菜单:
思路:通过存储的appid和appsecret获取access_token--->通过存储的菜单拼接提交的body--->通过微信的接口post提交
代码:
<?php
class WeixinAction extends Action{
//创建自定义菜单
public function create(){
$api=M('wx_weixin_inf')->find();//取出数据库中保存的appid和appsecret
$url_get='https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid='.$api['wei_appID'].'&secret='.$api['wei_appSecret'];
$json=json_decode(file_get_contents("$url_get"));
if($api['wei_appID']==false||$api['wei_appSecret']==false){
$this->error('必须先填写【AppId】【 AppSecret】');exit;}
//开始拼接数据
$data = '{"button":[';
$class=M('wx_menu1_inf')->limit(3)->order('men1_order')->select();//取出顶级菜单
$k=1;
foreach($class as $key=>$vo){
//主菜单
$data.='{"name":"'.$vo['men1_name'].'",';
//取出二级菜单
$c=M('wx_menu2_inf')->where(array('men1_id'=>$vo['men1_id']))->order('men2_order')->limit(5)->select();
$count=M('wx_menu2_inf')->where(array('men1_id'=>$vo['men1_id']))->limit(5)->count();
$num=1;
//拼接子菜单
if($c!=false){
$data.='"sub_button":[';
foreach($c as $voo){
if($num==$count) $data.='{"type":"view","name":"'.$voo['men2_name'].'","url":"'.$voo['men2_url'].'"}';
else $data.='{"type":"view","name":"'.$voo['men2_name'].'","url":"'.$voo['men2_url'].'"},';
$num++;
}
$data.=']';
}else{
$data.='"type":"view","url":"'.$vo['men1_url'].'"';
}
if($k==3){
$data.='}';
}else{
$data.='},';
}
$k++;
}
$data.=']}';
$url='https://api.weixin.qq.com/cgi-bin/menu/create?access_token='.$json->access_token;
// P($data);
//exit;
file_get_contents('https://api.weixin.qq.com/cgi-bin/menu/delete?access_token='.$json->access_token);
if($this->api_notice_increment($url,$data)==false){
$this->error('操作失败',U("System/defineMenu"));
}else{
$this->success('操作成功',U("System/defineMenu"));
}
exit;
}
//POST提交方法
function api_notice_increment($url, $data){
$ch = curl_init();
$header = "Accept-Charset: utf-8";
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
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);
// p($tmpInfo);
if (curl_errno($ch)) {
return false;
}else{
return true;
}
}
}
?>