关于获取access_token、同步菜单以及创建自定义菜单

1.首先我们要有appid(wx4ff531ee8a470861)和appsecret(2ec9b2f1a1f67b8743d23f9fc70c1c97)。

2.这里我们用的是rh_mp与rh_mp_menu数据表。

3.首先我们在Common模块的Common文件夹下创建function.php文件,在里面我们写入以下获取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');
        // print_r($arr);
        // exit;
        if(isset($arr['access_token'])){
        	$data['access_token']=$arr['access_token'];
        	$data['expire_time']=$arr['expires_in']+ time()-200;
        	// print_r($data);
        	// exit;
        	// $data=M('mp')->create($data);
           M("mp")->where("id=$id")->save($data);
        
        	return $arr['access_token'];
        }else{
        	return false;
        }
	  }else{
	  	return $mp['access_token'];
	  }
function getCurrentMp(){
	$mp=M('mp')->where('is_use=1')->find();
	return  $mp;
}

在menuController.class.php中增加以下代码:

<?php
namespace Home\Controller;
use Think\Controller;
use LaneWeChat\Core\menu;
// define('WECHAT_APPID','wx4ff531ee8a470861');
// define('WECHAT_APPSECRET','2ec9b2f1a1f67b8743d23f9fc70c1c97');
class MenuController extends Controller {
	public function index(){
		$mp=getCurrentMp();
		if(empty($mp)){
			$this->error('无此公账号',U('mp/index'));
		}
		$data=M('mp_menu')->where("mp_id={$mp['id']}")->order('id')->select();
		$data2=$data;
		foreach ($data as $k => $v) {
			foreach ($data2 as $k2 => $v2) {
				if($v['index']==$v2['pindex']){
					$data[$k]['sub'][]=$v2;
					unset($data[$k2]);
				}
			}
		}

		$this->assign('mpInfo',$mp);
		$this->assign('list',$data);
		$this->display();
	}
	public function menuedit(){
		$mp=getCurrentMp();
		if(empty($mp)){
			$this->ajaxReturn(array('error'=>true,'msg'=>'无此公账号','url'=>U('mp/index')));
			exit;
		}
		$data=I('post.data');

		foreach ($data as  &$value) {
			$value['mp_id']=$mp['id'];
		}
		// }print_r($value);
		// exit;
		// $this->ajaxReturn($data);
		// $arr=array();
		// foreach ($data1 as $key => $value) {
		// 	$row=array();
		// 	$row['mp_id']=$mp['id'];
		// 	$row['index']=$value['id'];
		// 	$row['pindex']=$value['pid'];
		// 	$row['name']=$value['name'];
		// 	$row['content']=$value['code'];
		// 	$row['type']=$value['type'];
		// 	$row['sort']=$value['sort'];
		// 	$arr[]=$row;
		// }
		$model=M('mp_menu');
		$model->where("mp_id={$mp['id']}")->delete();
		$model->addAll($data);
		// $this->ajaxReturn(array('error'=>false,'data'=>$arr));
		// exit;
		// $data2=$data1;
		// foreach ($data1 as $key1 => $value1) {
		// 	foreach ($data2 as $key2 => $value2) {
		// 		if($value1['id']==$value2['pid']){
		// 			$data1[$key1]['type']='';
		// 			$data1[$key1]['code']='';
		// 			break;
		// 		}
		// 	}
		// 	unset($data1[$key1]['sort']);
		// 	if($value['type']='event'){
		// 		$value['type']=$value['code'];
		// 		$value['code']='k_'.rand(100,999);
		// 	}
		// }
		
			include APP_PATH.'LaneWeChat/lanewechat.php';
			$ret= Menu::setMenu($data);
		
			if($ret===true){
				$this->ajaxReturn(array('msg'=>'创建菜单成功'));
			}else{
				$this->ajaxReturn(array('msg'=>$ret));
			}
			// file_put_contents('menu.txt',$ret);
			// $this->ajaxReturn($ret);
	}
	public function downmenu(){
		$mp = getCurrentMp();
// 		print_r($mp);
// exit;
		$mp_id = $mp['id'];

		include APP_PATH . 'LaneWeChat/lanewechat.php';
		$menu = Menu::getMenu($data);

		// 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 delmenu(){
		// $mp=getCurrentMp();
	 //    include APP_PATH . 'LaneWeChat/lanewechat.php';
		// $menu = Menu::delMenu($data);
		// $this->display('index');
		$mp = getCurrentMp();
		$mp_id = $mp['id'];
		// print_r($mp_id);
		// exit;		
		
		include APP_PATH . 'LaneWeChat/lanewechat.php';
		$menu =  \LaneWeChat\Core\Menu::delMenu();
		// print_r($menu);
		// exit;
		$model = M('mp_menu');
		$ret=$model->where("mp_id={$mp['id']}")->delete();
		if($ret){
			$this->success('删除成功');
		}else{
			$this->error('删除失败');
		}
	}

}

最后在页面上创建菜单显示如下图:


这样说明创建菜单成功!

然后我们把数据库清空。


然后我们刷新页面:


当我们点击同步菜单后出现:

这样说明我们已经把服务器的菜单获取到了,并且已经写入数据库了。


猜你喜欢

转载自blog.csdn.net/mo3408/article/details/79918568