一:获取access_token
access_token是公众号的全局唯一接口调用凭据,公众号调用各接口时都需使用access_token。开发者需要进行妥善保存。access_token的存储至少要保留512个字符空间。access_token的有效期目前为2个小时,需定时刷新,重复获取将导致上次获取的access_token失效。
1.首先定义一个函数用来获取正在使用的公众号
function getCurrentMp(){
$mp=M('mp')->where('is_use=1')->find();
return $mp;
}
2.获取正在使用的公众号的access_token
function getAccess_token(){
$mp=M('mp')->where('is_use=1')->find();
if(empty($mp)) return false;
$id=$mp['id'];
if(empty($mp['access_token']) || $mp['expire_time']<time()){
$appid=$mp['appid'];
$appsecret=$mp['appsecret'];
$url='https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid='.$appid.'&secret='.$appsecret;
include APP_PATH .'LaneWeChat/lanewechat.php';
$arr= \LaneWeChat\Core\Curl::callWebServer($url,'','GET');
if(isset($arr['access_token'])){
$data['access_token']=$arr['access_token'];
$data['expire_time']=$arr['expires_in']+time()-200;
M('mp')->where("id=$id")->save($data);
return $arr['access_token'];
}else{
return false;
}
}else{
return $mp['access_token'];
}
}
二:同步菜单
public function downmenu(){
$mp = $this->mp;
$mp_id = $mp['id'];
include APP_PATH . 'LaneWeChat/lanewechat.php';
$menu = Menu::getMenu($arr);
// print_r($menu);
// // exit;
// print_r($menu['menu']['button']);
// exit;
$menu = $menu['menu']['button'];
$arr = array();
$index = 1;
foreach ($menu as $key => &$value) {
$value['mp_id']= $mp_id;
$value['index'] = $index;
$value['pindex'] = 0;
$value['sort'] = $index;
if(!empty($value['sub_button'])){
$value['type'] = '';//设置一级菜单,默认值
$value['content'] = '';//设置一级菜单,默认值
$sub_menu = $value['sub_button']; //把二级菜单入到变量$sub_menu
unset($value['sub_button']);
$arr[] = $value;
$subindex = 1;
foreach ($sub_menu as $subkey=>&$subvalue) {
$subvalue['mp_id'] = $mp_id;
$subvalue['index'] = $index . $subindex;
$subvalue['pindex'] = $index;
$subvalue['sort'] = $subindex;
if($subvalue['type']== 'click'){
$subvalue['content'] = $subvalue['key'];
unset($subvalue['key']);
}else if($subvalue['type']=='view'){
$subvalue['content'] = $subvalue['url'];
unset($subvalue['url']);
}else {
$subvalue['content'] = $subvalue['type'];
$subvalue['type'] = 'event';
unset($subvalue['key']);
}
unset($subvalue['sub_button']);
$arr[] = $subvalue;
$subindex++;
}
}else{
if($value['type']== 'click'){
$value['content'] = $value['key'];
unset($value['key']);
}else if($value['type']=='view'){
$value['content'] = $value['url'];
unset($value['url']);
}else {
$value['content'] = $value['type'];
$value['type'] = 'event';
unset($value['key']);
}
unset($value['sub_button']);
$arr[] = $value;
}
$index++;
}
// print_r($arr);
// exit;
$model = M('mp_menu');
$model->where("mp_id={$mp['id']}")->delete();
foreach ($arr as $key => $value) {
$model->add($value);
}
$this->redirect('index');
}
三:创建自定义菜单
public function index(){
$mp=$this->mp;
$data=M('mp_menu')->where("mp_id={$mp['id']}")->order('id')->select();
// print_r($data);
// exit;
$data2=$data;
foreach ($data as $k => $v) {
foreach ($data2 as $k2 => $v2) {
if($v['index']==$v2['pindex']){
$data[$k]['sub'][]=$v2;
unset($data[$k2]);
}
}
}
// print_r($data);
// exit;
$this->assign('mpInfo',$mp);
$this->assign('list',$data);
$this->display();
}
public function menuedit(){
$mp=$this->mp;
$data1=I('post.data');
$arr=array();
foreach ($data1 as $key => $value){
$row=array();
$row['mp_id']=$mp['id'];
$row['index']=$value['index'];
$row['pindex']=$value['pindex'];
$row['type']=$value['type'];
$row['name']=$value['name'];
$row['content']=$value['code'];
$row['sort']=$value['sort'];
$arr[]=$row;
}
$model= M('mp_menu');
$model->where("mp_id={$mp['id']}") ->delete();
$model->addAll($arr);
//创建微信公众号的菜单
include APP_PATH.'LaneWeChat/lanewechat.php';
$ret=Menu::setMenu($arr);
if($ret===true){
$this->ajaxReturn(array('msg'=>"创建菜单成功"));
}else{
$this->ajaxReturn(array('msg'=>$ret));
}
}