• 在上篇文章实现微信扫码获取带指定参数时,微信公众号后台启用了服务器配置,导致之前设置好的微信自定义菜单失效。 开启了服务器配置,就无法用之前的方式在微信公众平台配置自定义菜单 此时,我们要通过接口来...

    在上篇文章实现微信扫码获取带指定参数时,微信公众号后台启用了服务器配置,导致之前设置好的微信自定义菜单失效。
    这里写图片描述
    开启了服务器配置,就无法用之前的方式在微信公众平台配置自定义菜单
    此时,我们要通过接口来配置微信自定义菜单,微信自定义菜单接口链接

    这里写图片描述

    首先,我们打开微信公众平台接口调试工具 接口调试工具
    1.通过appid以及secret来获取access_token,
    这里写图片描述

    2.组织创建菜单内容。微信提供了许多不同功能的按钮类型,可根据实际需求组织创建。
    这里简单的创建两个1级view类型按钮:即用户点击按钮实现跳转URL。

    {
        "button": [
            {
                "type": "view", 
                "name": "百度", 
                "url": "http://www.baidu.com"
            }, 
            {
                "type": "view", 
                "name": "淘宝", 
                "url": "http://www.taobao.com"
            }
        ]
    }

    3.在接口调试工具- - -选择 ‘自定义菜单’的接口类型,填入access_token,以及刚刚构建好的菜单内容。

    这里写图片描述

    点击检查问题,如果填写参数正确,则请求成功。
    这里写图片描述

    此时,重新打开或重新关注公众号,即能看到刚刚构建的自定义菜单已经生效。

    展开全文
  • 但是一旦我们进入开发模式之后我们的自定义菜单就需要自己用代码实现,所以对于刚开始接触的人来说可能存在一定的疑惑,这里我说下平时我们在开发模式下常用的两种自定义菜单实现方式:①不用写实现代码,直接用...

    自定义菜单这个功能在我们普通的编辑模式下是可以直接在后台编辑的,但是一旦我们进入开发模式之后我们的自定义菜单就需要自己用代码实现,所以对于刚开始接触的人来说可能存在一定的疑惑,这里我说下平时我们在开发模式下常用的两种自定义菜单的实现方式:①不用写实现代码,直接用网页测试工具Post json字符串生成菜单;②就是在我们的开发中用代码实现菜单生成!(参考文档:http://mp.weixin.qq.com/wiki/10/0234e39a2025342c17a7d23595c6b40a.html  )在自定义菜单中菜单的类型分为两种,一种为view的视图菜单,点击之后直接跳转到url页面;还有一种是click类型的点击型,后端通过点击事件类型给与不同的相应;后面新增了各种特色功能的菜单其本质都还是Click类型的菜单,所以生成的规则都是一样的,其生成菜单的方式都是向微信服务器post json字符串生成菜单,下面讲述菜单生成的方法和规则!

    (一)使用网页调试工具生成菜单

    我们通过连接(https://mp.weixin.qq.com/debug/cgi-bin/apiinfo?t=index&type=%E8%87%AA%E5%AE%9A%E4%B9%89%E8%8F%9C%E5%8D%95&form=%E8%87%AA%E5%AE%9A%E4%B9%89%E8%8F%9C%E5%8D%95%E5%88%9B%E5%BB%BA%E6%8E%A5%E5%8F%A3%20/menu/create  )进入到网页调试工具,如下图:

    1.png

    在这里我们生成菜单的时候只需要我们账号的有效token和json字符串即可,这里的json字符串可以参照文档中的案例做出修改得到,我这里给出的一个案例如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    {
        "button": [
            {
                "name": "博客", 
                "type": "view", 
                "url": "http://www.cuiyongzhi.com"
            }, 
            {
                "name": "菜单", 
                "sub_button": [
                    {
                        "key": "text", 
                        "name": "回复图文", 
                        "type": "click"
                    }, 
                    {
                        "name": "博客", 
                        "type": "view", 
                        "url": "http://www.cuiyongzhi.com"
                    }
                ]
            }, 
            {
                "key": "text", 
                "name": "回复图文", 
                "type": "click"
            }
        ]
    }

    我们填入响应的token,点击检查问题如果返回结果Ok就可以了,如下:

    3.png

    到这里我们采用web测试工具生成菜单的方式就完成了,下面接着介绍用代码生成菜单!

    (二)采用代码实现菜单的生成

    前面我们有说道在菜单中有view和click两种类型的事件,这里我们首先在代码中建立两种类型对应的java实体,view类型建立实体ViewButton.java如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    package com.cuiyongzhi.wechat.menu;
     
    /**
     * ClassName: ViewButton
     * @Description: 视图型菜单事件
     * @author dapengniao
     * @date 2016年3月14日 下午5:31:38
     */
    public class ViewButton {
        private String type;
        private String name;
        private String url;
     
        public String getType() {
            return type;
        }
     
        public void setType(String type) {
            this.type = type;
        }
     
        public String getName() {
            return name;
        }
     
        public void setName(String name) {
            this.name = name;
        }
     
        public String getUrl() {
            return url;
        }
     
        public void setUrl(String url) {
            this.url = url;
        }
     
    }

    同样的建立click的实体ClickButton.java如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    package com.cuiyongzhi.wechat.menu;
     
    /**
     * ClassName: ClickButton
     * @Description: 点击型菜单事件
     * @author dapengniao
     * @date 2016年3月14日 下午5:31:50
     */
    public class ClickButton {
        private String type;
        private String name;
        private String key;
     
        public String getType() {
            return type;
        }
     
        public void setType(String type) {
            this.type = type;
        }
     
        public String getName() {
            return name;
        }
     
        public void setName(String name) {
            this.name = name;
        }
     
        public String getKey() {
            return key;
        }
     
        public void setKey(String key) {
            this.key = key;
        }
     
    }

    这里创建两个实体也是为了方便我们在自定义菜单中对json的封装,在这里我用代码的形式封装了上面给出的同样的json格式,并调用生成自定义菜单的接口发送到微信服务器,简单代码如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    package com.cuiyongzhi.wechat.menu;
     
    import com.alibaba.fastjson.JSONObject;
    import com.cuiyongzhi.wechat.util.HttpUtils;
     
    import net.sf.json.JSONArray;
     
    public class MenuMain {
     
        public static void main(String[] args) {
         
            ClickButton cbt=new ClickButton();
            cbt.setKey("image");
            cbt.setName("回复图片");
            cbt.setType("click");
             
             
            ViewButton vbt=new ViewButton();
            vbt.setUrl("http://www.cuiyongzhi.com");
            vbt.setName("博客");
            vbt.setType("view");
             
            JSONArray sub_button=new JSONArray();
            sub_button.add(cbt);
            sub_button.add(vbt);
             
             
            JSONObject buttonOne=new JSONObject();
            buttonOne.put("name""菜单");
            buttonOne.put("sub_button", sub_button);
             
            JSONArray button=new JSONArray();
            button.add(vbt);
            button.add(buttonOne);
            button.add(cbt);
             
            JSONObject menujson=new JSONObject();
            menujson.put("button", button);
            System.out.println(menujson);
            //这里为请求接口的url   +号后面的是token,这里就不做过多对token获取的方法解释
            String url="https://api.weixin.qq.com/cgi-bin/menu/create?access_token="+"upeDW-2pWrHgLx3fGqgsvAvf-HkQBA--5uHOo9OW16uNdL9zNPnnuIN01UDFXh_5d-QdcnBxux9tXigFwm1z0SInbdkXEKa1pMhTqaZVxK7sCPj7421YQGI0v3evwiwiWALjAHASWH";
             
            try{
                String rs=HttpUtils.sendPostBuffer(url, menujson.toJSONString());
                System.out.println(rs);
            }catch(Exception e){
                System.out.println("请求错误!");
            }
         
        }
     
    }

    上面代码的基本流程就是调用view和click两个实体封装json字符串menujson,最后调用发送方法将json发送给腾讯服务器,但是这里需要用到账号生成的token,我这里是直接写死的(token的获取方式可以参见http://www.cuiyongzhi.com/?id=44  ),最终运行返回结果ok即可,如下:

    4.png

    自定义菜单的功能实现基本就是这些,下一篇将讲述【微信公众平台(map.weixin.qq.com)/开放平台(open.weixin.qq.com)/商户平台(pay.weixin.qq.com)之间的关联关系】希望可以对你给出帮助,感谢你的翻阅,如有疑问可以留言讨论!

    展开全文
  • 不过现在个人订阅号是不可以使用高级开发者模式的,如自定义菜单,不过我们还是可以通过测试号来测试一下,然后移代码到服务号。 自定义类型包括如下: 1、click:点击推事件 • 用户点击click类型按钮后,微信...

    编辑模式和开发模式是有冲突的。所以我们启用微信公众号的开发模式之后,那些菜单是看不到的哦。不过现在个人订阅号是不可以使用高级开发者模式的,如自定义菜单,不过我们还是可以通过测试号来测试一下,然后移代码到服务号。

     自定义类型包括如下:
    1、click:点击推事件
    • 用户点击click类型按钮后,微信服务器会通过消息接口推送消息类型为event
    的结构给开发者(参考消息接口指南),并且带上按钮中开发者填写的key值
    ,开发者可以通过自定义的key值与用户进行交互;
    2、view:跳转URL
    • 用户点击view类型按钮后,微信客户端将会打开开发者在按钮中填写的网页
    URL,可与网页授权获取用户基本信息接口结合,获得用户基本信息。
    3、scancode_push:扫码推事件
    • 用户点击按钮后,微信客户端将调起扫一扫工具,完成扫码操作后显示扫描
    结果(如果是URL,将进入URL),且会将扫码的结果传给开发者,开发者可
    以下发消息。
    4、scancode_waitmsg:扫码推事件且弹出“消息接收中”提示框
    • 用户点击按钮后,微信客户端将调起扫一扫工具,完成扫码操作后,将扫码
    的结果传给开发者,同时收起扫一扫工具,然后弹出“消息接收中”提示框
    ,随后可能会收到开发者下发的消息。

    自定义类型包括如下:
    5、pic_sysphoto:弹出系统拍照发图用户点击按钮后,微信
    客户端将调起系统相机,完成拍照操作后,会将拍摄的相片
    发送给开发者,并推送事件给开发者,同时收起系统相机,
    随后可能会收到开发者下发的消息。
    6、pic_photo_or_album:弹出拍照或者相册发图用户点击按
    钮后,微信客户端将弹出选择器供用户选择“拍照”或者“
    从手机相册选择”。用户选择后即走其他两种流程。
    7、pic_weixin:弹出微信相册发图器用户点击按钮后,微信
    客户端将调起微信相册,完成选择操作后,将选择的相片发
    送给开发者的服务器,并推送事件给开发者,同时收起相册
    ,随后可能会收到开发者下发的消息。

     

    提供代码,只要上传代码到服务器,重新关注公众号就可以看到开发模式下的自定义菜单

    $appid = '微信公众号的appid';
    $appsecret = '微信公众号的appsecret';
    $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={$appid}&secret=$appsecret";
    $output = https_request($url);
    $jsoninfo = json_decode($output,true);
    $access_token = $jsoninfo["access_token"];
    $jsonmenu = '{
         "button":[
            {
              "name":"学校系统",
              "sub_button":[
                    {
                        "type":"click",
                        "name":"课程表",
                        "key":"课程表"
                    },
                    {
                        "type":"click",
                        "name":"个人信息",
                        "key":"个人信息"
                    },
                    {
                        "type":"click",
                        "name":"平时成绩",
                        "key":"平时成绩"
                    },
                    {
                        "type":"click",
                        "name":"奖惩记录",
                        "key":"奖惩记录"
                    }
              ]
            },
            {
                "name":"技术分享",
              "sub_button":[
                    {
                        "type":"click",
                        "name":"移动WEB开发",
                        "key":"移动WEB开发"
                    },
                    {
                        "type":"click",
                        "name":"J2EE框架",
                        "key":"J2EE框架"
                    },
                    {
                        "type":"click",
                        "name":"Android开发",
                        "key":"Android开发"
                    },
                    {
                        "type":"click",
                        "name":"PHP框架",
                        "key":"PHP框架"
                    }
              ]
            },{
                "name":"技术支持",
              "sub_button":[
                    {
                        "type":"click",
                        "name":"在线客服",
                        "key":"在线客服"
                    },
                    {
                        "type":"click",
                        "name":"技术分享",
                        "key":"技术分享"
                    },
                    {
                        "type":"view",
                        "name":"天气预报",
                        "url":"http://m.hao123.com/a/tianqi"
                    }
              ]
            }
    
        ]
        }';
    
    
      //创建菜单实现
      $url = 'https://api.weixin.qq.com/cgi-bin/menu/create?access_token='.$access_token;
      $result = https_request($url,$jsonmenu);
      var_dump($result);
      function https_request($url,$data = null){
          $curl = curl_init();
          curl_setopt($curl,CURLOPT_URL,$url);
          curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,0);
          curl_setopt($curl,CURLOPT_SSL_VERIFYHOST,0);
          if(!empty($data)){
              curl_setopt($curl,CURLOPT_POST,1);
              curl_setopt($curl,CURLOPT_POSTFIELDS,$data);
          }
          curl_setopt($curl,CURLOPT_RETURNTRANSFER,1);
          $output = curl_exec($curl);
          curl_close($curl);
          return $output;
      }

     

     

     

    

    展开全文
  • 所以我们启用微信公众号的开发模式之后,那些菜单是看不到的哦。不过现在个人订阅号是不可以使用高级开发者模式的,如自定义菜单,不过我们还是可以通过测试号来测试一下,然后移代码到服务号。 自定义类型包括如下...

    编辑模式和开发模式是有冲突的。所以我们启用微信公众号的开发模式之后,那些菜单是看不到的哦。不过现在个人订阅号是不可以使用高级开发者模式的,如自定义菜单,不过我们还是可以通过测试号来测试一下,然后移代码到服务号。

    自定义类型包括如下:
    1、click:点击推事件
    • 用户点击click类型按钮后,微信服务器会通过消息接口推送消息类型为event
    的结构给开发者(参考消息接口指南),并且带上按钮中开发者填写的key值
    ,开发者可以通过自定义的key值与用户进行交互;
    2、view:跳转URL
    • 用户点击view类型按钮后,微信客户端将会打开开发者在按钮中填写的网页
    URL,可与网页授权获取用户基本信息接口结合,获得用户基本信息。
    3、scancode_push:扫码推事件
    • 用户点击按钮后,微信客户端将调起扫一扫工具,完成扫码操作后显示扫描
    结果(如果是URL,将进入URL),且会将扫码的结果传给开发者,开发者可
    以下发消息。
    4、scancode_waitmsg:扫码推事件且弹出“消息接收中”提示框
    • 用户点击按钮后,微信客户端将调起扫一扫工具,完成扫码操作后,将扫码
    的结果传给开发者,同时收起扫一扫工具,然后弹出“消息接收中”提示框
    ,随后可能会收到开发者下发的消息。

    自定义类型包括如下:
    5、pic_sysphoto:弹出系统拍照发图用户点击按钮后,微信
    客户端将调起系统相机,完成拍照操作后,会将拍摄的相片
    发送给开发者,并推送事件给开发者,同时收起系统相机,
    随后可能会收到开发者下发的消息。
    6、pic_photo_or_album:弹出拍照或者相册发图用户点击按
    钮后,微信客户端将弹出选择器供用户选择“拍照”或者“
    从手机相册选择”。用户选择后即走其他两种流程。
    7、pic_weixin:弹出微信相册发图器用户点击按钮后,微信
    客户端将调起微信相册,完成选择操作后,将选择的相片发
    送给开发者的服务器,并推送事件给开发者,同时收起相册
    ,随后可能会收到开发者下发的消息。


    提供代码,只要上传代码到服务器,重新关注公众号就可以看到开发模式下的自定义菜单

    $appid = '微信公众号的appid';
    $appsecret = '微信公众号的appsecret';
    $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={$appid}&secret=$appsecret";
    $output = https_request($url);
    $jsoninfo = json_decode($output,true);
    $access_token = $jsoninfo["access_token"];
    $jsonmenu = '{
         "button":[
            {
              "name":"学校系统",
              "sub_button":[
                    {
                        "type":"click",
                        "name":"课程表",
                        "key":"课程表"
                    },
                    {
                        "type":"click",
                        "name":"个人信息",
                        "key":"个人信息"
                    },
                    {
                        "type":"click",
                        "name":"平时成绩",
                        "key":"平时成绩"
                    },
                    {
                        "type":"click",
                        "name":"奖惩记录",
                        "key":"奖惩记录"
                    }
              ]
            },
            {
                "name":"技术分享",
              "sub_button":[
                    {
                        "type":"click",
                        "name":"移动WEB开发",
                        "key":"移动WEB开发"
                    },
                    {
                        "type":"click",
                        "name":"J2EE框架",
                        "key":"J2EE框架"
                    },
                    {
                        "type":"click",
                        "name":"Android开发",
                        "key":"Android开发"
                    },
                    {
                        "type":"click",
                        "name":"PHP框架",
                        "key":"PHP框架"
                    }
              ]
            },{
                "name":"技术支持",
              "sub_button":[
                    {
                        "type":"click",
                        "name":"在线客服",
                        "key":"在线客服"
                    },
                    {
                        "type":"click",
                        "name":"技术分享",
                        "key":"技术分享"
                    },
                    {
                        "type":"view",
                        "name":"天气预报",
                        "url":"http://m.hao123.com/a/tianqi"
                    }
              ]
            }
    
        ]
        }';
    
    
      //创建菜单实现
      $url = 'https://api.weixin.qq.com/cgi-bin/menu/create?access_token='.$access_token;
      $result = https_request($url,$jsonmenu);
      var_dump($result);
      function https_request($url,$data = null){
          $curl = curl_init();
          curl_setopt($curl,CURLOPT_URL,$url);
          curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,0);
          curl_setopt($curl,CURLOPT_SSL_VERIFYHOST,0);
          if(!empty($data)){
              curl_setopt($curl,CURLOPT_POST,1);
              curl_setopt($curl,CURLOPT_POSTFIELDS,$data);
          }
          curl_setopt($curl,CURLOPT_RETURNTRANSFER,1);
          $output = curl_exec($curl);
          curl_close($curl);
          return $output;
      }




    
    展开全文
  • 微信打开开发者模式后,以前通过微信后台配置的菜单就失效了,需要通过我们自己服务器后台配置(需要开发),还有一种比较简单的方法,就是通过微信提供的“微信公众平台接口测试工具”进行配置。下面重点说一下通过...

    微信打开开发者模式后,以前通过微信后台配置的菜单就失效了,需要通过我们自己服务器后台配置(需要开发),还有一种比较简单的方法,就是通过微信提供的“微信公众平台接口测试工具”进行配置。下面重点说一下通过微信提供的测试工具进行配置的过程。

    一、进入微信接口调试页面

    地址:https://mp.weixin.qq.com/debug


    接口类型选择“自定义菜单”

    接口列表选择“自定义菜单创建接口/menu/create”

    接口参数:

    access_token: 是公众号访问接口用的,需要填写要修改的公众号access_token

    body: 创建菜单的JSON串。示例如下:

    示例一:(创建两个一级按钮菜单)

    {
        "button": [
            {
                "type": "view", 
                "name": "报名邀请", 
                "url": "https://blog.csdn.net/u014740338"
            }, 
            {
                "type": "view", 
                "name": "我的博客", 
                "url": "https://blog.csdn.net/u014740338"
            }
        ]
    }

    我创建的是连个view类型的菜单,也可以创建click类型的。

    示例二:(创建一级菜单+二级菜单)

    {
    	"button": [{
    		"type": "view",
    		"name": "技术积累",
    		"url": "https://blog.csdn.net/u014740338"
    	},
    	{
    		"name": "工作",
    		"sub_button": [{
    			"type": "view",
    			"name": "遇到的bug",
    			"url": "https://blog.csdn.net/u014740338"
    		},
    		{
    			"type": "view",
    			"name": "工作记录",
    			"url": "https://blog.csdn.net/u014740338"
    		}]
    	},
    	{
    		"type": "view",
    		"name": "我的博客",
    		"url": "https://blog.csdn.net/u014740338"
    	}]
    }

    body写好之后点击“检查问题”按钮。若创建成功会返回一下信息:


    若创建失败,检查access_token是否正确。

    若没有公众号来玩,可以自己申请一个测试账号,具体流程可以参考我上篇博客。

    展开全文
  • 微信开发交流群:148540125系列文章参考地址 极速开发微信公众号欢迎留言、转发 项目源码参考地址 点我点我–欢迎Start 前几篇文章已讲完如何导入项目,如何启动配置项目,如何成为开发者,重源码分析消息是如何...
  • 微信打开开发者模式后,以前通过微信后台配置的菜单就失效了,需要通过我们自己服务器后台配置(需要开发),还有一种比较简单的方法,就是通过微信提供的“微信公众平台接口测试工具”进行配置。下面重点说一下通过...
  • java版微信公众号开发之自定义菜单的创建
  • 此时,我们要通过接口来配置微信自定义菜单微信自定义菜单接口链接 先查看官方文档的自定义菜单: 然后,我们打开微信公众平台接口调试工具 接口调试工具 首先,通过appid以及secret来获取access_token: 获取到...
  • 微信接口自定义菜单在线客服微信支付
  • 点开开发模式,原菜单一定失效了。 点击微信公众平台,左侧添加功能插件 点击自定义菜单 点击开启
  • 纯属分享 var config = require('./admin/wx/config/config'); var API = require('wechat-api'); ...var api = new API(config.appid, config.appsecret);...api.getAccessToken(function (err, token) { ...
  • 2)服务号可以申请自定义菜单; 3)使用QQ登录的公众号,可以升级为邮箱登录; 4)使用邮箱登录的公众号,可以修改登录邮箱; 5)编辑图文消息可选填作者; 6)群发消息可以同步到腾讯微博。 其中,大家议论...
  • 我们在进行微信开发时都得调用各个接口,调用接口前获取到access_token,它是公众号的全局唯一接口调用凭据,公众号调用各接口时都需使用到access_token。为了避免过度获取access_token我们把它存入数据库中。这是...
  • 1.很多同学都吐槽,搞了个服务号,自然要好好发挥自定义菜单这个得天独厚的功能。 但在开发者模式下,要么通过本地代码上传,但这个很容易失败; 要么编辑好菜单的JSON数据,使用在线生成的办法,但这会遇到一个...
  • 前几天在修改某平台微信公众号自定义创建菜单时有个奇怪的现象。 我是先查询该公众号的菜单,然后再根据查询后的结果修改公众号菜单,但我对其中一个url带&符号的url并未修改。修改成完后调用自定义创建菜单接口,...
  • 微信5.0以前,自定义菜单是作为一种内测资格使用的,只有少数公众帐号拥有菜单,因此出现很多企业为了弄到菜单不惜重金求购。现如今,一大批帐号从订阅号转为服务号,很多都是奔着自定义菜单去的。而且,经测试...
  • 微信开发公众平台自定义菜单需要花钱认证才能实现,不想花钱只能玩测试账号了,不过这并不影响开发。我的开发都是基于柳峰老师的微信公众平台应用开发做的。 只要我们使用公众平台测试账号就可以开发自定义菜单了...
1 2 3 4 5 ... 20
收藏数 7,844
精华内容 3,137