1、自定义菜单最多包括3个一级菜单,每个一级菜单最多包含5个二级菜单。
2、一级菜单最多4个汉字,二级菜单最多7个汉字,多出来的部分将会以“...”代替。
3、创建自定义菜单后,菜单的刷新策略是,在用户进入公众号会话页或公众号profile页时,如果发现上一次拉取菜单的请求在5分钟以前,就会拉取一下菜单,如果菜单有更新,就会刷新客户端的菜单。测试时可以尝试取消关注公众账号后再次关注,则可以看到创建后的效果。
accesstoken是公众号的全局唯一票据,公众号调用各接口时都需使用accesstoken。开发者需要进行妥善保存。accesstoken的存储至少要保留512个字符空间。accesstoken的有效期目前为2个小时,需定时刷新,重复获取将导致上次获取的access_token失效。请求地址 2小时期限 每天获取次数有限 需要保存下来,过期再重新获取 https://api.weixin.qq.com/cgi-bin/token?granttype=clientcredential&appid=APPID&secret=APPSECRET
获取access_token一般包含两个文件,access_token.php文件用于判断access_token.txt文件中的acess_token是否到期并重新获取放在access_token.txt文件中。为了安全考虑加个appsecret,用于验证公众号相关权限信息。如果每次都用2个参数唯一定位公众号不仅麻烦,而且也不安全,容易将消息暴露在公开环境,故微信出于安全及方便考虑,让开发者用appid和appsecret去拿access_token,即用access_token就可定位一个公众号,不仅安全,而且方便,当然也可以有其它的深意,这里不做深入研究。获得access_token的方式:
用get方式请求:
https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=myappid&secret=mysappsecret
<?php
define("APPID", "wxd956d47a2a7a90c5");
define("APPSECRET", "6add39f00f233b3985357d3b30bb401e");
define('TOKEN_FILE','access_token.txt');
// $access_token=access_token();
// echo $access_token;
//返回access_token
function access_token(){
//判断文件是否存在
if (is_file(TOKEN_FILE)) {
//读取文件
$str=file_get_contents(TOKEN_FILE);
$arr=json_decode($str,true);
//判断是否过期
if (time() - $arr['create_time'] > $arr['expires_in']-200) {
return getNewAccess_token();
}else{
return $arr['access_token'];
}
}else{
//不存在
return getNewAccess_token();
}
}
//得到新的access_token
function getNewAccess_token(){
$url="https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".APPID."&secret=".APPSECRET;
// echo $url;
//程序请求api
$ch = curl_init();//初始化一个cURL会话,创建一个新的cURL资源
// 设置URL和相应的选项
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch, CURLOPT_SSLVERSION, 1);
// 抓取URL并把它传递给浏览器
$str=curl_exec($ch);
//关闭cURL资源,并且释放系统资源
curl_close($ch);
//将str->数组
$arr=json_decode($str,true);
//添加新元素
$arr['create_time']=time();
//数组-》json
$str=json_encode($arr);
//保存access_token
file_put_contents(TOKEN_FILE, $str);
return $arr['access_token'];
// print_r($arr);
}
?>
<?php
include 'access_token.php';
$access_token=access_token();
$url= "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=$access_token";
$menu=<<<menu
{
"button":[
{
"type":"click",
"name":"今日歌曲",
"key":"V1001_TODAY_MUSIC"
},
{
"name":"菜单",
"sub_button":[
{
"type":"view",
"name":"搜索",
"url":"http://www.soso.com/"
},
{
"type":"click",
"name":"赞一下我们",
"key":"V1001_GOOD"
}]
}]
}
menu;
$ch = curl_init();//初始化一个cURL会话,创建一个新的cURL资源
// 设置URL和相应的选项
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch, CURLOPT_SSLVERSION, 1);
curl_setopt($ch, CURLOPT_POST, true );
curl_setopt($ch, CURLOPT_POSTFIELDS, $menu);
// 抓取URL并把它传递给浏览器
$str=curl_exec($ch);
//关闭cURL资源,并且释放系统资源
curl_close($ch);
echo $str;
?>