PHP微信公众平台开发高级篇--自定义菜单

说明

  • 自定义菜单最多包括3个一级菜单,每个一级菜单最多包含5个二级菜单
  • 一级菜单最多4个汉字,二级菜单最多7个汉字,多出部分用省略号代替
  • 测试时可以尝试取消/关注公众账号后,则可以看到菜单的变化

按钮类型

  • click:点击推事件
  • view:跳转URL

文档

https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1445241432

PS:需要使用认证账号或者测试号

实例

<?php
/**
 * 自定义菜单--创建
 * 文档地址:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141013
 */
//获取access_token,写入文件保存
header("Content-type: text/html; charset=utf-8");
$accessTokenInfo = file_get_contents("access_token.log");
if($accessTokenInfo){
    $tokenArr = json_decode($accessTokenInfo,true);
//    var_dump($tokenArr);
    if((time() + $tokenArr['expires_in'] -200) >time()){//保证不过期,减去200秒,做缓冲
        $access_token = $tokenArr['access_token'];
        $url = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=" . $access_token;
        $postArr['button'] = [
            [
                'type'=>'click',
                'name'=>urlencode('歌曲'),//中文得处理一下,否则报错
                'key'=>'V1001_TODAY_MUSIC'
            ],//第一个一级菜单
            [
                'name'=>urlencode('菜单'),
                'sub_button'=>[
                        [
                            "type"=>"view",
                            "name"=>urlencode('搜索'),
                            "url"=>"http://www.soso.com/"
                        ],
                        [
                            "type"=>"view",
                            "name"=>urlencode('百度'),
                            "url"=>"http://www.baidu.com/"
                        ]
                    ]
            ],//第二个一级菜单
        ];
        $postJson = urldecode(json_encode($postArr));
        //CURL发送请求
        $ch = curl_init();
        curl_setopt($ch,CURLOPT_URL,$url);
        curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
        curl_setopt($ch,CURLOPT_POST,1);
        curl_setopt($ch,CURLOPT_POSTFIELDS,$postJson);
        $output = curl_exec($ch);
        curl_close($ch);
        var_dump(json_decode($output,true));

    }
}else{
    //重新请求access_token写入文件
    $ch = curl_init();
    $appId = "wxc7991ed87e25dc13";
    $appSecret = "3c1be9b400aae7042afb78dbd577f206";
    $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$appId."&secret=".$appSecret;
    curl_setopt($ch,CURLOPT_URL,$url);
    curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
    $outPut = curl_exec($ch);
    curl_close($ch);
    file_put_contents("access_token.log",$outPut);
}

自定义菜单推送事件

文档地址:

https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140454

实例

<?php
$postArr = file_get_contents('php://input');
$postObj = simplexml_load_string($postArr,'SimpleXMLElement', LIBXML_NOCDATA);
if(strtolower($postObj->MsgType) == 'event' && strtoupper($postObj->Event) == "CLICK") {//click事件
    if(strtoupper($postObj->EventKey) == "V1001_TODAY_MUSIC"){
        $Content = "这是一级菜单的click的事件";
    }
    $ToUserName = $postObj->FromUserName;
    $FromUserName = $postObj->ToUserName;
    $CreateTime = time();
    $MsgType = 'text';
    $template = "<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[%s]]></MsgType><Content><![CDATA[%s]]></Content></xml>";
    $info = sprintf($template,$ToUserName,$FromUserName,$CreateTime,$MsgType,$Content);
    echo $info;
}
if(strtolower($postObj->MsgType) == 'event' && strtoupper($postObj->Event) == "VIEW") {//view事件
    //直接跳转到指定的url地址上
}

猜你喜欢

转载自blog.csdn.net/qq_29627497/article/details/81099000