zoukankan      html  css  js  c++  java
  • 如何添加微信自定义菜单

    登录微信公众平台的管理界面,点击左边的菜单中的“自定义菜单”,可以进行自定义菜单的基本配置。

    如果已启用服务器配置的话,就不能在公众平台管理界面进行自定义菜单,而需要调用微信提供的接口进行自定义菜单的开发。

    开启和停止服务器配置在左边菜单中的开发→基本配置中可以找到。如果停止,用户可以自定义菜单,且向客户端推送消息,但不能接收客户端的请求。如果启用,必须由开发者调用API接口对自定义菜单进行开发,可以向客户端推送消息,也可以接收客户端的请求,对请求进行处理并相应(即被动回复消息)。

    自定义菜单的API是微信提供的高级接口,必须经过微信认证才可以调用。个人订阅号无法进行微信认证,只有企业/组织订阅号才可以进行微信认证。微信认证需每年向腾讯缴纳300元费用。

    自定义菜单实质上是一个JSON字符串,如下所示

     {
         "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"
                }]
           }]
     }
    

      

    其中的type指的是按钮的类型,有多种类型的按钮,此例中为click和view。更多类型按钮的说明请查看开发文档。

    接口调用使用POST方式,https协议:

     https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_TOKEN

    ACCESS_TOKEN获取方法如下:

    1、在基本配置中查看开发者ID(AppID)和开发者密码(AppSecret)。其中AppSecret具有极高的安全性,需要使用管理员账号(而非第三方授权用户)登录,点击重置后可看到AppSecret。

    2、得到AppID和AppSecret后,还需要设置白名单,即可以获取ACCESS_TOKEN值的IP地址,本机IP以微信提供的网站http://ip.qq.com/为准。

    3、点击开发→开发者工具,接口类型选择基础支持,接口列表选择获取access_token接口/token。输入刚才获取到的appid和secret。

    4、点击“检查问题”,可以得到access_token的值,expires_in是过期时间

    得到ACCESS_TOKEN后,访问以下网址创建自定义菜单:

     https://api.weixin.qq.com/cgibin/menu/create?access_token=zPTPP7eGoXtDQTYNlXsCODQhEgvJSDTFKfic7EJfdA_kNevPlW1lwcZXtfXXkonCzW0xagkD7jJ6qGAf7rBwGONw05-d17rso3QSlbmQS6yNBVbcgL1iaKnsMkBvbGgkJZWbAGAEUR

    5、ACCESS_TOKEN存在有效期,expire_in为7200秒即2个小时,如果超过2小时将失效。因此如果想实现在网页上点击按钮生成自定义菜单,应该通过代码获取ACCESS_TOKEN。

    首先定义全局变量AppID和AppSecret

        const string appid = "xxxxxxxxxxxxxxxxxx";
        const string secret = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxx";

    获取代码如下:

        /// <summary>
        /// 获取access_token
        /// </summary>
        /// <param name="grant_type">填写client_credential</param>
        /// <param name="appid">第三方用户唯一凭证</param>
        /// <param name="secret">第三方用户唯一凭证密钥,即appsecret</param>
        /// <returns>access_token</returns>
        public string GetAccessToken(string grant_type,string appid , string secret)  
        {
            string access_token = string.Empty;
            //接口格式:协议为https,请求方式为GET,需指定3个参数grant_type,appid和secret
            string tokenUrl = string.Format("https://api.weixin.qq.com/cgi-bin/token?grant_type={0}&appid={1}&secret={2}", grant_type, appid, secret);  
            WebClient wc = new WebClient();  
            string download_string = wc.DownloadString(tokenUrl); //获取以上接口url调用的结果字符串,即包含access_token的JSON数据
            //注意:由于.net 2.0不支持使用JavaScriptSerializer类反序列化,只能使用Newtonsoft.Json进行反序列化
            object obj = JsonConvert.DeserializeObject(download_string);  //使用Newtonsoft.Json反序列化JSON数据
            /*
                正确时的返回JSON数据包如下:
                {  
                     "access_token": "access_token的值",
                     "expires_in": 7200  
                }  
                错误时返回的JSON数据包如下:
                {
                  "errcode":错误代码,
                  "errmsg":"错误信息"
                 }
             */
            Newtonsoft.Json.Linq.JObject js = obj as Newtonsoft.Json.Linq.JObject; //获得JObject
            //Newtonsoft.Json.Linq.JToken jt; //根据键获取值
            if (js["access_token"] != null)  access_token = js["access_token"].ToString(); //如果正确返回,获取access_token
            else access_token = js["errcode"].ToString() + ":" + js["errmsg"].ToString() ; //如果发生错误,获取错误代码及错误消息
            /*
                返回码说明:
                -1:系统繁忙,此时请开发者稍候再试
                0:请求成功
                40001:AppSecret错误或者AppSecret不属于这个公众号,请开发者确认AppSecret的正确性
                40002:请确保grant_type字段值为client_credential
                40164:调用接口的IP地址不在白名单中,请在接口IP白名单中进行设置
             */
            return access_token;
        }

    调用代码:

    GetAccessToken("client_credential", appid, secret);
  • 相关阅读:
    静态成员 执行顺序
    排序之插入排序
    结构体字节对齐问题
    建模基础&UML
    C#中隐藏(new)和方法重载(overide)的区别
    培训记录
    C笔记
    用例
    .NET架构
    C#格式化日期
  • 原文地址:https://www.cnblogs.com/yaotome/p/7123073.html
Copyright © 2011-2022 走看看