我们在进行微信开发时都得调用各个接口,调用接口前获取到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));
}
}
基本就可以实现自定义菜单了!