Asp.net MVC微信开发——创建自定义菜单

第一步,通过APPID和APPSecret获得access_token

我把自定义菜单的json内容写在了一个单独的文件里,放在项目的根目录,取名WeChatMenu

自定义菜单的设置规则和字数限制,在微信开发文档里都说的很清楚,url要写清楚能访问的asp.net项目网址,随便写的话会报错,遇到报错可以在这里查询报错代码:https://developers.weixin.qq.com/doc/offiaccount/Getting_Started/Global_Return_Code.html

下面是json内容

{
    "button": [
        {
            "name": "doyoxia",
            "sub_button": [
                {
                    "type": "view",
                    "name": "doyoxia官网",
                    "url": "#"
                },
                {
                    "type": "view",
                    "name": "doyoxia小程序",
                    "url": "#"
                }
            ]
        },
        {
            "name": "APP下载",
            "sub_button": [
                {
                    "type": "view",
                    "name": "安卓",
                    "url": "#"
                },
                {
                    "type": "view",
                    "name": "IOS",
                    "url": "#"
                }
            ]
        },
        {
            "name": "关于我们",
            "sub_button": [
                {
                    "type": "view",
                    "name": "商业合作",
                    "url": "#"
                },
                {
                    "type": "view",
                    "name": "联系客服",
                    "url": "#"
                },
                {
                    "type": "view",
                    "name": "关于我们",
                    "url": "#"
                }
                    ]
                }
            ]
}

然后通过代码读取文件中的内容,读取内容后获得access_token,然后通过acces_token和自己写的自定义菜单的json内容访问接口,微信就会返回设置是否成功的代码,如果全部正确只需要访问一次,新的菜单就好了,可以取关再重新关注自己的公众号来查看新的菜单。

上代码

        [HttpPost]
        public IHttpActionResult WechatMenu(dynamic data)
        {

            string path = System.Web.Hosting.HostingEnvironment.MapPath(@"~/WechatMenu.json");


            //get access_token
            string url = string.Format("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=*****&secret=******");
            var wm = new System.Net.Http.HttpClient().GetAsync(url).Result.Content.ReadAsStringAsync().Result;
            WechatModels info = JsonConvert.DeserializeObject<WechatModels>(wm);

            //create menu  
            string turl = string.Format("https://api.weixin.qq.com/cgi-bin/menu/create?access_token={0}", info.access_token);
            using (StreamReader r = new StreamReader(path))
            {
                string json = r.ReadToEnd();
                HttpContent httpContent = new StringContent(json);
                httpContent.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/json");
                var menu = new System.Net.Http.HttpClient().PostAsync(turl, httpContent).Result.Content.ReadAsStringAsync().Result;
                return Json(menu);
            }
        }

几个关键点,首先是WebApi里面如何获取json文件读取json内容

string path = System.Web.Hosting.HostingEnvironment.MapPath(@"~/WechatMenu.json");

尝试了几次,发现用这种方式获取文档地址最稳妥也不会出错,先通过相对路径查询文件位置,再通过物理路径读取文件

这是我的笨方法,可能不是最优解

 

WechatModels info = JsonConvert.DeserializeObject<WechatModels>(wm);

这句代码是把获取到的access_token返回代码转为实体类

    public class WechatModels
    {
        public string access_token { get; set; }
        public string expires_in { get; set; }
    }

基本上就是这些,所有这些都需要在配置好的服务器上面运行访问,才能返回想要的结果。

希望这篇文档有一定的帮助!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值