前两节说的都是微信开发的初级篇,这一节说高级篇。微信公众号关注以后,下面都是有菜单的,底部有三个一级菜单,每个一级菜单可以添加5个二级菜单。一级菜单最多四个汉字,二级菜单最多7个汉字,多出来的汉字用“......”号,菜单自定义以后,由于缓存原因,需要取消再次关注才能生效。微信的菜单本质上就是一个按钮,既然是按钮,他就是有多种属性的按钮,微信开发中我们最常用的按钮类型是click
、view
,其他的按钮类型还有scancode_push
(调用扫一扫)、scancode_waitmsg
、pic_sysphoto
、pic_photo_or_album
、pic_weixin
等等,这些不常用而已。所以我主要说的菜单类型click,view这两种,创建菜单,代码如下:
<?php
//自定义菜单需要access_token,所以我们这里先获取票据access_token,这里可以写一个方法,
public function getToken(){
//由于token一天的访问次数是两千次,并且每次的有效时长是7200秒,所以我们可以给他做一存储,可以在cookie,session,redis,memcache,mysql中都可以,我们这里存储在session中
if( $SESSION['token'] && $SESSION[keeptime]>time() ){
//直接返回票据access_token()
return $SESSION['token'];
}else{
$appid = ""; //这里填写你自己的公众号里的appid
$appsecret = ""; //这里填写你自己的公众号里的appsecret
$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$appid."&secret=
".$appsecret;
//初始化curl
$ch = curl_init();
//设置参数
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_RETURNTRNSFER,1);
//执行curl
$token = curl_exec($ch);
//关闭curl
curl_close();
//由于返回的数据是json个格式,需要进行转换
$token = json_decode($token,true);
$SESSION['token'] = $token['access_token
'];
$SESSION['keeptime'] = $tokenp['exprires_in']+time();
}
}
//定义自定义菜单的方法
public function createcai(){
//获取token
$token = $this->$getToken();
//api请求URL,这里用的是POST方法
$url = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=".$token;
//数据设置
/**
下面是微信公众平台官方提供的数据格式
{
"button":[
{
"type":"click",
"name":"今日歌曲",
"key":"V1001_TODAY_MUSIC"
},
{
"name":"菜单",
"sub_button":[
{
"type":"view",
"name":"搜索",
"url":"http://www.soso.com/"
},
{
"type":"miniprogram",
"name":"wxa",
"url":"http://mp.weixin.qq.com",
"appid":"wx286b93c14bbf93aa",
"pagepath":"pages/lunar/index"
},
{
"type":"click",
"name":"赞一下我们",
"key":"V1001_GOOD"
}]
}]
}
**/
//数据设置
$arr = array(
"button"=>array(
array("type"=>"click","name"=>"今日新闻","key"=>"item1"),
array("name"=>"网红新闻","sub_button"=>array(
array("type"=>"view","name"=>"网红天佑","url"=>"http://www.baidu.com"),
array("type"=>"click","name"=>"网红大事件","key"=>"item2"),
),
array("type"=>"click","name"=>"关于我们","key"=>"item3")
);
);
//把上面的数据的转换为json个格式,这里需要注意一个问题,json_encode()函数在转换时,中文的会乱码,所以这里需要urlencode()函数
$arr = urldecode(json_decode(urlencode($arr)));
//使用curl的post请求,curl在微信开发中的使用非常的频繁,可以写一个方法封装好,我这里为了方便大家学习就没有封装
$ch = curl_init();
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_HEADER,false);
curl_setopt($ch,CURLOPT_POSTFILDS,$arr);
curl_setopt($ch,CURLOPT_POST,true);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
$res = curl_exec();
if(curl_errno($ch)){
return curl_error($ch);
}else{
return json_decode($res,true);
}
curl_close();
}
这样自定义菜单就实现了,其实还是非常简单的,需要大家反复的联系。
微信公众号群发功能也是一个常见的功能,群发功能是订阅号每天一次,服务号是一个月4次,所以开发的时候切记不要直接用群发接口,可以使用预览接口,这样可以防止错误后不能再发顺。群发可以是文本,图片,视频,音频等。这个功能实现起来也是非常简单,话不多说,代码如下:
<?php
//这里我调用的接口是预览接口,其实是一样的,只是把请求的URL换掉就可以了
public function qunfa(){
//获取token
$token = $this->getToken();
//这是预览接口的url,POST请求
$url = "https://api.weixin.qq.com/cgi-bin/message/mass/preview?access_token=
".$token;
/**
这是文本的格式
{
"touser":"OPENID",
"text":{
"content":"CONTENT"
},
"msgtype":"text"
}
**/
//设置数据,按照文档给的文本格式
$arr = array(
"touser"=>" 填写用户ID","text"=>array("content"=>"大家好,新年快乐!"),"msgtype"=>"text"
);
//curl发顺请求
$ch = curl_init();
//设置参数
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch,CURLOPT_POSTFIELDS,$arr);
curl_setopt($ch,CURLOPT_POST,true);
$res = curl_exec();
if(curl_errno($ch)){
return curl_error($ch);
}else{
return json_decode($res,true);
}
}
以上就是预览群发功能,接下来是给大家讲一讲网页授权的功能
网页授权是微信开发非常重要的知识点,也是必须要掌握的,在公司的营销,以及业务场景中是经常用到的,学习的时候建议结合开发文档进行,应用场景:如果用户在微信客户端中访问第三方网页,公众号可以通过微信网页授权机制,来获取用户基本信息,进而实现业务逻辑。今天有点累了,后边明天给大家分享。