微信二次开发之自定义菜单

我们在进行微信开发时都得调用各个接口,调用接口前获取到access_token,它是公众号的全局唯一接口调用凭据,公众号调用各接口时都需使用到access_token。为了避免过度获取access_token我们把它存入数据库中。这是获取access_token的部分代码,因为access_token有着7200秒的有效期,需要对它进行处理(到期更新)。

https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$appid."&secret=".$appsecret  //获取access_token请求
function getCurrentMp()
{   //获取正在使用的公众号信息
	$mp = M('mp')->where("is_use=1")->find();
	return $mp;
}
function getAccess_token()
{
	$mp = M('mp')->where("is_use=1")->find();//获取正在使用的公众号信息
	if (empty($mp)) return false; //未获取到返回false
	$id = $mp['id']; // 获取公众号的id
	if (empty($mp['access_token']) || $mp['expire_time']<time()) {//如果未获取到数据库的access_token 或 过了有效期获取appid和appsecret
		$appid = $mp['appid'];
		$appsecret = $mp['appsecret'];

		$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$appid."&secret=".$appsecret;//获取access_token的接口
		include APP_PATH . 'LaneWeChat/lanewechat.php'; //调用LaneWeChat框架(一种微信开发的框架)
		$arr = \LaneWeChat\Core\Curl::callWebServer($url,'','GET');

		if (isset($arr['access_token'])) {//获取到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'];//返回$arr中的access_token
		}else{
			return false;//返回false
		}
	}else{
		return $mp['access_token'];//返回$mp中的access_token
	}

}

接下来是access_token接口的请求调用'https://api.weixin.qq.com/cgi-bin/menu/create?access_token='.$accessToken。上面说到这是用到LaneWeChat框架,所以第11,12行是去调用LaneWeChat框架代码。

public function _initialize()
	{    //_initialize()进行初始化
		$mp = getCurrentMp();
		if (empty($mp)) {
			$this->error('无此公众号',U('mp/index'));
		}else{
			$this->mp=$mp;
		}
	}
public function menuedit()
	{	
		$mp = $this->mp;
		$data1 = I('post.data');//获取表单信息

		foreach ($data1 as &$value) {//把id的值给mp_id
			$value['mp_id']=$mp['id'];
		}
		M('mp_menu')->where("mp_id={$mp['id']}")->delete();//把原先的数据删除
		M('mp_menu')->addAll($data1);//插入新的数据
	 	include APP_PATH . 'LaneWeChat/lanewechat.php';//调用框架
		$ret = Menu::setMenu($data1);
		// file_put_contents('menu.txt', $ret);
		
		if ($ret === true) {
			$this->ajaxReturn(array('msg'=>'菜单创建成功!'));
		}else{
			$this->ajaxReturn(array('msg'=>$ret));
		}
	}

基本就可以实现自定义菜单了!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值