微信公众号开发--自定义菜单

代码在最下面,转载请在明显位置加入本篇博客地址

需要注意的:

1、自定义菜单最多包括3个一级菜单,每个一级菜单最多包含5个二级菜单。
2、一级菜单最多4个汉字,二级菜单最多7个汉字,多出来的部分将会以“...”代替。
3、创建自定义菜单后,菜单的刷新策略是,在用户进入公众号会话页或公众号profile页时,如果发现上一次拉取菜单的请求在5分钟以前,就会拉取一下菜单,如果菜单有更新,就会刷新客户端的菜单。测试时可以尝试取消关注公众账号后再次关注,则可以看到创建后的效果。

自定义菜单接口可实现多种类型按钮,如下:

1、click:点击推事件
2、view:跳转URL
3、scancode_push:扫码推事件
4、scancode_waitmsg:扫码推事件且弹出“消息接收中”提示框
5、pic_sysphoto:弹出系统拍照发图
6、pic_photo_or_album:弹出拍照或者相册发图
7、pic_weixin:弹出微信相册发图器
8、location_select:弹出地理位置选择器
9、media_id:下发消息(除文本消息)
10、view_limited:跳转图文消息URL

一般常用1与2,其余或详细解说请到官方网站查看(http://mp.weixin.qq.com/wiki/10/0234e39a2025342c17a7d23595c6b40a.html)

先获取acces_token

接口地址:https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET

请求方式:GET

参数说明:

参数是否必须说明
grant_type获取access_token填写client_credential
appid第三方用户唯一凭证
secret第三方用户唯一凭证密钥,即appsecret

正常返回的数据格式:

{"access_token":"ACCESS_TOKEN","expires_in":7200}

access_token 获取到的凭证,自定义菜单会用到

expires_in 过期时间,用于缓存access_token,避免每次都获取。

错误时微信会返回错误码等信息:

{"errcode":40013,"errmsg":"invalid appid"}

errcode  错误码

errmsg 错误信息

创建自定义菜单

接口地址: https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_TOKEN   (此处的access_token上面已经获取到直接用)

请求方式: POST

提交数据(click与view示例,其余类型请查看官方文档):

{
     "button":[
     {  
          "type":"click",
          "name":"今日歌曲",
          "key":"V1001_TODAY_MUSIC"
      },
      {
           "name":"菜单",
           "sub_button":[
           {    
               "type":"view",
               "name":"搜索",
               "url":"http://www.soso.com/"
            },
            {
               "type":"view",
               "name":"视频",
               "url":"http://v.qq.com/"
            },
            {
               "type":"click",
               "name":"赞一下我们",
               "key":"V1001_GOOD"
            }]
       }]
 }

参数说明:

参数是否必须说明
button一级菜单数组,个数应为1~3个
sub_button二级菜单数组,个数应为1~5个
type菜单的响应动作类型
name菜单标题,不超过16个字节,子菜单不超过40个字节
keyclick等点击类型必须菜单KEY值,用于消息接口推送,不超过128字节
urlview类型必须网页链接,用户点击菜单可打开链接,不超过1024字节
media_idmedia_id类型和view_limited类型必须调用新增永久素材接口返回的合法media_id

返回结果:

正确时的返回JSON数据包如下:

{"errcode":0,"errmsg":"ok"}

错误时的返回JSON数据包如下(示例为无效菜单名长度):

{"errcode":40018,"errmsg":"invalid button name size"}

源码:

$appid        = '123456';
$appsecret    = '123456';
$apiUrlPrefix = 'https://api.weixin.qq.com/cgi-bin';

//注意,获取access_token有调用次数限制,请自行做缓存
$result = httpget($apiUrlPrefix.'/token?grant_type=client_credential&appid='.$appid.'&secret='.$appsecret);
if($result) {
    $json = json_decode($result,true);
    if (!$json || isset($json['errcode'])) {
        //获取失败,业务处理
        exit;
    }
    $expire = intval($json['expires_in'])-100; //过期时间
    $access_token = $json['access_token'];
} else {
    //获取失败,业务处理
    exit;
}


$data = ' {
     "button":[
     {  
          "type":"click",
          "name":"今日歌曲",
          "key":"V1001_TODAY_MUSIC"
      },
      {
           "name":"菜单",
           "sub_button":[
           {    
               "type":"view",
               "name":"搜索",
               "url":"http://www.soso.com/"
            },
            {
               "type":"view",
               "name":"视频",
               "url":"http://v.qq.com/"
            },
            {
               "type":"click",
               "name":"赞一下我们",
               "key":"V1001_GOOD"
            }]
       }]
 }';

$result = httppost($apiUrlPrefix.'/menu/create?access_token='.$access_token,$data);
if ($result) {
    $json = json_decode($result,true);
    if (!$json || !empty($json['errcode'])) {
        //失败,业务处理
        exit;
    }
    //成功
} else {
    //失败,业务处理
    exit;
}


function httpget($url){
    $oCurl = curl_init();
    if(stripos($url,"https://")!==FALSE){
        curl_setopt($oCurl, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($oCurl, CURLOPT_SSL_VERIFYHOST, FALSE);
        curl_setopt($oCurl, CURLOPT_SSLVERSION, 1); //CURL_SSLVERSION_TLSv1
    }
    curl_setopt($oCurl, CURLOPT_URL, $url);
    curl_setopt($oCurl, CURLOPT_RETURNTRANSFER, 1 );
    $sContent = curl_exec($oCurl);
    $aStatus = curl_getinfo($oCurl);
    curl_close($oCurl);
    if(intval($aStatus["http_code"])==200){
        return $sContent;
    }else{
        return false;
    }
}

function httppost($url,$param,$post_file=false){
    $oCurl = curl_init();
    if(stripos($url,"https://")!==FALSE){
        curl_setopt($oCurl, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($oCurl, CURLOPT_SSL_VERIFYHOST, false);
        curl_setopt($oCurl, CURLOPT_SSLVERSION, 1); //CURL_SSLVERSION_TLSv1
    }
    if (is_string($param) || $post_file) {
        $strPOST = $param;
    } else {
        $aPOST = array();
        foreach($param as $key=>$val){
            $aPOST[] = $key."=".urlencode($val);
        }
        $strPOST =  join("&", $aPOST);
    }
    curl_setopt($oCurl, CURLOPT_URL, $url);
    curl_setopt($oCurl, CURLOPT_RETURNTRANSFER, 1 );
    curl_setopt($oCurl, CURLOPT_POST,true);
    curl_setopt($oCurl, CURLOPT_POSTFIELDS,$strPOST);
    $sContent = curl_exec($oCurl);
    $aStatus = curl_getinfo($oCurl);
    curl_close($oCurl);
    if(intval($aStatus["http_code"])==200){
        return $sContent;
    }else{
        return false;
    }
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您的问题是关于在PHP开发微信公众号中,如何添加小程序菜单以及如何实现跳转小程序的问题,对吧? 首先,要在微信公众号中添加小程序菜单,您需要在微信公众平台的开发者中心中,通过自定义菜单功能添加一个小程序菜单。具体步骤如下: 1. 登录微信公众平台开发者中心,进入“公众号设置”页面; 2. 在左侧菜单栏中选择“菜单设置”,然后点击“自定义菜单”; 3. 在自定义菜单页面中,点击“添加菜单按钮; 4. 在添加菜单页面中,选择“小程序”类型; 5. 在小程序菜单设置页面中,填写小程序的AppID、小程序页面路径和小程序的名称; 6. 点击“保存”按钮,即可完成小程序菜单的添加。 接下来,要实现微信公众号中跳转小程序,您需要在PHP代码中调用微信公众号的JS-SDK,通过JS-SDK提供的API实现跳转小程序的功能。具体步骤如下: 1. 在PHP代码中引入微信公众号的JS-SDK文件; 2. 在PHP代码中调用微信公众号的JS-SDK初始化函数,传入微信公众号的AppID和当前页面的URL; 3. 在需要跳转小程序的地方,调用微信公众号的JS-SDK提供的API,传入小程序的AppID、小程序页面路径和其他参数(如是否要打开小程序的debug模式等); 4. 用户点击跳转小程序的按钮时,JS-SDK会自动调起微信客户端,并跳转到指定的小程序页面。 希望这个回答能够解决您的问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值