微信公众号自定义菜单post请求错误解决办法

最近做微信公众号开发,遇到一个扯淡的事情,自定义菜单出不来,然而在网页调试工具里面执行就成功了,这个事情就非常尴尬,附上代码给你们感受一下:
public function addMenu()
    {
        $url = " https://api.weixin.qq.com/cgi-bin/menu/create?access_token=" . getToken();
        $menu['button'] = [
            [
                "name" => "随便玩",
                "sub_button" => [
                    [   "type" => "click",
                        "name" => "听歌",
                        "key" => "Listen"   ],
                    [   "type" => "view",
                        "name" => "百度",
                        "url" => "http://www.baidu.com"
                    ]
                ]
            ],
            [
                "name" => "日常生活",
                "sub_button" => [
                    [   "type" => "view",
                        "name" => "天气",
                        "url" => "http://www.weather.com.cn/"
                    ],
                    [   "type" => "click",
                        "name" => "城市天气",
                        "key" => "city_weather"
                    ],
                    [   "type" => "click",
                        "name" => "星座运势",
                        "key" => "constellation"
                    ]
                ]
            ],
            [
                "name" => "图片",
                "sub_button" => [
                    [   "type" => "scancode_push",
                        "name" => "自动扫", 
                        "key" => "auto_scanf", 
                    ],
                    [   "type" => "scancode_waitmsg",
                        "name" => "扫一扫", 
                        "key" => "scanf", 
                    ],
                    [   "type" => "pic_photo_or_album",
                        "name" => "传图片",
                        "key" => "photo"
                    ],
                    [   "type" => "location_select",
                        "name" => "发送位置",
                        "key" => "position"
                    ]
                ]
            ]
        ];
        $str = json_encode($menu,JSON_UNESCAPED_UNICODE);
        file_put_contents('menu.txt',$str);
        var_dump(MyCurl::post($url,$str));
    }
因为输出结果一直是null,所以不停的找post的问题,代码如下:
public static function post($url,$data)
    {
        //创建curl资源
        $ch = curl_init() ;

        //设置参数
        curl_setopt($ch,CURLOPT_URL,$url);//设置请求地址
        curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);//设置是否返回数据
        curl_setopt($ch,CURLOPT_HEADER,false);//是否显示请求头
        curl_setopt($ch,CURLOPT_TIMEOUT,10);//设置超时时间,秒
        curl_setopt($ch,CURLOPT_POST,true);//设置post请求
        curl_setopt($ch,CURLOPT_POSTFIELDS,$data);//设置post请求参数
        curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);//是否启用ssl验证
        curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,false);//是否验证主机

        //发起请求
        $content = curl_exec($ch);

        //关闭
        curl_close($ch);
        return $content;
    }
对比网上的代码,实在找不出哪里有错,直到百度到一篇文章才找到问题,原来是在第一段代码的$url里面,刚开始有一个空格、一个空格、空格、、、我嘞个去,坑死人有木有。
以后注意一下吧,尽量少有空格(╥╯^╰╥)
在.NET Framework中使用MVC开发微信公众号应用,可以采用以下步骤来生成自定义菜单: 1. 在微信公众平台上创建自定义菜单。登录微信公众平台,在左侧菜单中选择“开发->基本配置”,在右侧的“接口配置信息”中可以找到“自定义菜单”,点击“创建自定义菜单”即可创建一个新的自定义菜单。 2. 在MVC应用中实现生成自定义菜单的功能。可以使用微信公众平台提供的API接口来生成自定义菜单。例如: ```csharp public ActionResult CreateMenu() { // 获取access_token string appId = "your app id"; string appSecret = "your app secret"; string url = $"https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={appId}&secret={appSecret}"; string result = Get(url); JObject obj = JObject.Parse(result); string accessToken = obj["access_token"].ToString(); // 创建自定义菜单 string menuUrl = $"https://api.weixin.qq.com/cgi-bin/menu/create?access_token={accessToken}"; string menuJson = @" { ""button"": [ { ""name"": ""菜单1"", ""sub_button"": [ { ""type"": ""view"", ""name"": ""子菜单1"", ""url"": ""http://www.example.com/submenu1"" }, { ""type"": ""view"", ""name"": ""子菜单2"", ""url"": ""http://www.example.com/submenu2"" } ] }, { ""type"": ""view"", ""name"": ""菜单2"", ""url"": ""http://www.example.com/menu2"" }, { ""type"": ""click"", ""name"": ""菜单3"", ""key"": ""menu3"" } ] }"; string result = Post(menuUrl, menuJson); return Content(result); } private string Get(string url) { HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); request.Method = "GET"; using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) using (StreamReader reader = new StreamReader(response.GetResponseStream())) { return reader.ReadToEnd(); } } private string Post(string url, string json) { HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); request.Method = "POST"; request.ContentType = "application/json"; using (StreamWriter writer = new StreamWriter(request.GetRequestStream())) { writer.Write(json); } using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) using (StreamReader reader = new StreamReader(response.GetResponseStream())) { return reader.ReadToEnd(); } } ``` 这个方法会向微信公众平台发送一个创建自定义菜单请求请求中包含了菜单的JSON数据。菜单的JSON数据格式可以参考微信公众平台文档中的说明。 3. 在微信公众平台上配置自定义菜单的链接,将链接指向你的MVC应用的某个Action方法。例如: ``` http://yourdomain.com/CreateMenu ``` 这样,当用户点击自定义菜单时,就会发送一个请求到你的MVC应用的`CreateMenu`方法,你可以在这个方法中调用微信公众平台API来创建自定义菜单。 4. 在MVC应用中实现响应自定义菜单的功能。可以在MVC应用中实现菜单点击事件的处理,例如: ```csharp public ActionResult MenuClick(string eventKey) { switch (eventKey) { case "menu1": // 处理菜单1的请求 break; case "menu2": // 处理菜单2的请求 break; case "menu3": // 处理菜单3的请求 break; default: // 处理其他菜单请求 break; } return Content(""); } ``` 这个方法会根据自定义菜单的`eventKey`参数来判断用户点击了哪个菜单,然后执行相应的操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值