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

园子里面的微信公众号的开发已经很多了,个人随笔记录得傻瓜式开发........最最最基础的开发   

从上到下一步一步的走

  1  #region 公众号自定义菜单管理
  2         /// <summary>
  3         /// 菜单数据
  4         /// </summary>
  5         /// <returns></returns>
  6         public string PageConent()
  7         {
  8 
  9             var json = "{\"button\":[{\"name\":\"We\",\"sub_button\":[{\"type\":\"view\",\"name\":\"回顾一下\",\"url\":\"https://www.baidu.com\"}]},{\"name\":\"Are\",\"sub_button\":[{\"type\":\"view\",\"name\":\"活动一下\",\"url\":\"https://tieba.baidu.com/index.html\"}]},{\"name\":\"伐木累\",\"sub_button\":[{\"type\":\"view\",\"name\":\"吃一下\",\"url\":\"https://tieba.baidu.com/index.html\"},{\"type\":\"view\",\"name\":\"个人中心\",\"url\":\"https://tieba.baidu.com/index.html\"},{\"type\":\"click\",\"name\":\"我的订单\",\"key\":\"clickdd\"},{\"type\":\"click\",\"name\":\"WIFI密码\",\"key\":\"clickmm\"}]}]}";
 10             return json;
 11         }
 12 
 13         /// <summary>
 14         /// 创建菜单
 15         /// </summary>
 16         /// <returns></returns>
 17         public JsonResult PostInsertPage()
 18         {
 19             var result = new WxReturnModel();
 20             //开发阶段每次获取Token
 21             var power = new WeixinPowerModel
 22             {
 23                 AppID = WxAppId,
 24                 AppSecret = appsecret,
 25                 AccessToken = WxApi.GetToken(WxAppId, appsecret),
 26             };
 27             LogUtil.WriteLog("token:" + power.AccessToken);
 28             //组合参数传输
 29             var conent = PageConent();
 30             result = WxApi.PostHttp<WxReturnModel>("https://api.weixin.qq.com/cgi-bin/menu/create?access_token=" + power.AccessToken, conent);
 31             LogUtil.WriteLog("json数据:" + conent);
 32             LogUtil.WriteLog("自定义菜单创建:" + conent);
 33             return Json(result, JsonRequestBehavior.AllowGet);
 34         }
 35 
 36         /// <summary>
 37         /// 查询菜单
 38         /// </summary>
 39         /// <returns></returns>
 40         public string GetPage()
 41         {
 42             //GetToken();
 43             var url = "https://api.weixin.qq.com/cgi-bin/menu/get?access_token=" + GetToken();
 44             var result = WxApi.RequestUrl(url, "Get");
 45             return result;
 46         }
 47         /// <summary>
 48         /// 删除菜单接口
 49         /// </summary>
 50         /// <returns></returns>
 51         public string DeletePage()
 52         {
 53             //GetToken();
 54             var url = "https://api.weixin.qq.com/cgi-bin/menu/delete?access_token=" + GetToken();
 55             var result = WxApi.RequestUrl(url, "Get");
 56             return result;
 57         }
 58         #endregion
 59 
 60         #region 公众号个性化菜单管理
 61         /// <summary>
 62         /// 菜单数据
 63         /// </summary>
 64         /// <returns></returns>
 65         public string PageconditionalConent()
 66         {
 67 
 68             var json = "{\"button\":[{\"name\":\"We\",\"sub_button\":[{\"type\":\"view\",\"name\":\"回顾一下\",\"url\":\"https://www.baidu.com\"}]},{\"name\":\"Are\",\"sub_button\":[{\"type\":\"view\",\"name\":\"活动一下\",\"url\":\"https://tieba.baidu.com/index.html\"}]},{\"name\":\"伐木累\",\"sub_button\":[{\"type\":\"view\",\"name\":\"吃一下\",\"url\":\"https://tieba.baidu.com/index.html\"},{\"type\":\"view\",\"name\":\"个人中心\",\"url\":\"https://tieba.baidu.com/index.html\"},{\"type\":\"click\",\"name\":\"上海订单\",\"key\":\"clickdd\"},{\"type\":\"click\",\"name\":\"WIFI密码\",\"key\":\"clickmm\"}]}],\"matchrule\":{\"country\":\"中国\",\"province\":\"上海\"}}";
 69             return json;
 70         }
 71 
 72         /// <summary>
 73         /// 新增个性化菜单
 74         /// </summary>
 75         /// <returns></returns>
 76         public JsonResult PageconditionalInsert()
 77         {
 78             var result = new WxReturnModel();
 79             //开发阶段每次获取Token
 80             var power = new WeixinPowerModel
 81             {
 82                 AppID = WxAppId,
 83                 AppSecret = appsecret,
 84                 AccessToken = WxApi.GetToken(WxAppId, appsecret),
 85             };
 86             LogUtil.WriteLog("token:" + power.AccessToken);
 87             //组合参数传输
 88             var conent = PageconditionalConent();
 89             result = WxApi.PostHttp<WxReturnModel>("https://api.weixin.qq.com/cgi-bin/menu/addconditional?access_token=" + power.AccessToken, conent);
 90             LogUtil.WriteLog("json数据:" + conent);
 91             LogUtil.WriteLog("自定义菜单创建:" + conent);
 92             return Json(result, JsonRequestBehavior.AllowGet);
 93         }
 94 
 95         /// <summary>
 96         /// 删除个性化菜单
 97         /// </summary>
 98         /// <returns></returns>
 99         public JsonResult PageDealerconditional(string menuid)
100         {
101             var result=new WxReturnModel();
102             //开发阶段每次获取Token(正式代码出现wxID冲突,目前所有Token现用现取,独立微信开发下存Webconfig)
103            
104             var token = GetToken();
105             result =
106                WxApi.PostHttp<WxReturnModel>(
107                    "https://api.weixin.qq.com/cgi-bin/menu/delconditional?access_token=" + token, "{\"menuid\":\""+ menuid + "\"}");
108             return Json(result, JsonRequestBehavior.AllowGet);
109         }
110         #endregion
View Code

当中用到的一些类及方法

 #region 获取Token

        /// <summary>
        /// 获取Token
        /// </summary>
        public static string GetToken(string appid, string secret)
        {
            string strJson =
                RequestUrl(
                    string.Format(
                        "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={0}&secret={1}",
                        appid, secret));
            return GetJsonValue(strJson, "access_token");
        }

        #endregion
   #region 获取Json字符串某节点的值

        /// <summary>
        /// 获取Json字符串某节点的值
        /// </summary>
        public static string GetJsonValue(string jsonStr, string key)
        {
            string result = string.Empty;
            if (!string.IsNullOrEmpty(jsonStr))
            {
                key = "\"" + key.Trim('"') + "\"";
                int index = jsonStr.IndexOf(key) + key.Length + 1;
                if (index > key.Length + 1)
                {
                    //先截逗号,若是最后一个,截"}"号,取最小值
                    int end = jsonStr.IndexOf(',', index);
                    if (end == -1)
                    {
                        end = jsonStr.IndexOf('}', index);
                    }
                    result = jsonStr.Substring(index, end - index);
                    result = result.Trim(new [] {'"', ' ', '\"'}); //过滤引号或空格
                }
            }
            return result;
        }

        #endregion
 public static T PostHttp<T>(string url, string dic)
        {
            LogUtil.WriteLog("第一种请求:"+dic);
            var returnJson = PostHttp(url, dic);
            return JsonConvert.DeserializeObject<T>(returnJson);
        }
        public static string PostHttp(string url, string dic)
        {
            //HttpWebRequest对象实例:该类用于获取和操作HTTP请求 创建WebRequest对象
            var request = (HttpWebRequest)WebRequest.Create(url);
            request.Method = "POST";
            var payload = Encoding.UTF8.GetBytes(dic);
            //填充POST数据
            request.ContentLength = payload.Length;
            request.ContentType = "application/x-www-form-urlencoded";
            var writer = request.GetRequestStream();
            writer.Write(payload, 0, payload.Length);
            writer.Close();

            //HttpWebResponse对象实例:该类用于获取和操作HTTP应答 
            var response = (HttpWebResponse)request.GetResponse();
            //构造字节流
            StreamReader reader = new StreamReader(response.GetResponseStream());
            //流从头读至尾
            string jsonp = reader.ReadToEnd();
            //LogUtil.WriteLog("结果:" + jsonp);
            //LogUtil.WriteLog("---------------------------------------------------------------------");
            reader.Close();
            response.Close();
            return jsonp;
        }
  public class WxReturnModel
    {
        public string errcode { get; set; }
        public string errmsg { get; set; }
        public string menuid { get; set; }
    }

 

posted @ 2017-09-05 15:19  猿大头  阅读(287)  评论(0)    收藏  举报