ci框架微信自定义菜单
整理一下脑细胞,最近写了一个ci框架微信开发自定义菜单。
1.在微信公众号里设置基本配置

2.获取token,贴图

3.调用微信自定义菜单接口
//获取curl
public function http_curl($url,$type='get',$res='json',$arr=""){
/*
* $url 接口urlstring
* $type 请求类型string
* $res 返回数据类型 string
* $arr post请求参数
*/
//初始化curl
$ch=curl_init();
// 设置参数
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
if($type == 'post'){
curl_setopt($ch,CURLOPT_POST,1);
curl_setopt($ch,CURLOPT_POSTFIELDS,$arr);
}
//采集
$output = curl_exec($ch);
if($res == 'json'){
if(curl_errno($ch)){
//请求失败
return curl_error($ch);
}else{
//请求成功
return json_decode($output,true);
}
}
//关闭
curl_close($ch);
}
//获取access_token 的方法
public function getAccessToken(){
//将access_token存在session/cookie中
//如果access_token不存在或已过有效期则重新获取
$appid = $this->settings['weixinAPPID'];
$appsecret = $this->settings['weixinAPPSECRET'];
$url="https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$appid."&secret=".$appsecret;
$res=$this->http_curl($url,'get','json');
$access_token = $res['access_token'];
//将重新获取到的access_token 存在session中
$_SESSION['access_token'] = $res['access_token'];
$_SESSION['expire_time'] = time()+7200;
return $access_token;
}
4.创建栏目
public function defineItem(){
//创建微信菜单
//目前的微信接口的调用方式都是通过 curl post/get
//access_token的值//这个值是有实效的,所以要封装到一个方法 里
$access_token = $this->getAccessToken();
$url="https://api.weixin.qq.com/cgi-bin/menu/create?access_token=".$access_token;
$postArr = $this->getcolumns(); //调用创建栏目的发法
$postJson = urldecode(json_encode($postArr));
// {"button":[{"name":"\u83dc\u5355\u4e00","type":"cilck","key":"item1"},{"name":"\u83dc\u5355\u4e8c","sub_button":[{"name":"\u6b4c\u66f2","type":"click","key":"songs"},{"name":"\u7535\u5f71","type":"view","url":"http:\/\/baidu.com\/"}]},{"name":"\u83dc\u5355\u4e09","type":"view","url":"http:\/\/qq.com"}]}
//name中文值会转码成这样"name":"\u83dc\u5355\u4e00"
$res=$this->http_curl($url,'post','json',$postJson);
}
5.创建栏目的方法
//获取栏目名称
public function getcolumns(){
$this->load->model('Syscolumn_model','syscolumnModel');
$param = array();
$param['where']['parent_id']=169;
$param['where']['publish'] = 1;
$param['order_by'] = "position asc";
$menu=$this->syscolumnModel->getData($param);
$weixinMenu = array();
foreach ($menu as $key => $value) {
$m = array();
$m['name'] = urlencode($value['column_name']);
$param = array();
$param['where']['syscolumn_id'] = $value['syscolumn_id'];
$param['order_by'] = "sort asc";
$mlist = $this->model->getData($param);
foreach($mlist as $skey => $svl){
$m['sub_button'][$skey]['name'] = urlencode($svl['wechartmenu_name']);
$m['sub_button'][$skey]['type'] = 'view';
$m['sub_button'][$skey]['url'] = $svl['wechartmenu_link'];
}
$weixinMenu['button'][] = $m;
}
return $weixinMenu;
}
6.删除菜单
//删除菜单
public function delete(){
$access_token = $this->getAccessToken();
$delete="https://api.weixin.qq.com/cgi-bin/menu/delete?access_token=".$access_token;
$re=$this->http_curl($delete);
}
7.最后在方法里调用创建菜单的方法
public function wechartAction(){
$this->setDisplayStatus(false);
$column_id = $this->input->get('column_id');
$this->delete();
$this->defineItem();
redirect($_SERVER["HTTP_REFERER"]);//调用成功后,返回上一级地址
exit;
}
浙公网安备 33010602011771号