php curl返回false填坑记-curl调用微信创建自定义菜单返回false

首先声明一点,这个错误可能在你的开发生涯中不会遇到,除非你直接复制了微信公众平台的api地址。不过这应该算是php中curl扩展的一个bug,为什么是bug呢?让我们仔细来看。

下边是示例代码,代码的功能是调用微信公众平台的创建自定义菜单接口来创建自定义菜单。


创建自定义菜单的业务代码:

$menuArr = [
    'button' => [
        [
            'name' => '动物世界',
            'type' => 'click',
            'key' => 'alimail'
        ],

        [
            'name' => '环球活动',
            'sub_button' => [
                [
                    'name' => '我要冒险',
                    'type' => 'view',
                    'url' => url('index/maoxian/index','','',true)
                ],
                [
                    'name' => '优惠活动',
                    'type' => 'scancode_push',
                    'key' => 'rselfmenu_0_1'
                ]
            ]
        ]
    ]
];
$accessToken = get_access_token();
$url = ' https://api.weixin.qq.com/cgi-bin/menu/create?access_token='.$accessToken;
$result = curl_request($url,'post',json_encode($menuArr,JSON_UNESCAPED_UNICODE));
dump($result);

封装的curl请求函数:

/**
 * @param $url
 * @param array $data
 * @return mixed
 * 模拟发送get  post 请求
 */
function curl_request($url, $type = "GET", $data = '')
{
    $ch = curl_init();
    curl_setopt($ch,CURLOPT_URL,$url);
    curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
    curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,0);
    curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,0);
    curl_setopt($ch,CURLOPT_HEADER,0);

    $type = strtolower($type);
    switch ($type){
        case 'get':
            break;
        case 'post':
            //post请求配置
            curl_setopt($ch, CURLOPT_POST,1);
            curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
            break;
    }
    $result = curl_exec($ch);
    curl_close($ch);
    return $result;
}

问题就出在第一部分的代码中。第一部分的代码中的:
$url = ' https://api.weixin.qq.com/cgi-bin/menu/create?access_token='.$accessToken;
在这行代码中url的开始有一个空格。这个空格导致了curl_exec($ch)的错误。
理论来讲:curl中出现错误的有两种可能,要么是微信的api抛出了错误,要么是curl本身抛出错误。
但是这两个错误都是可以人为的获取分析的。可是在curl请求的url中包含了空格。注意,是包含了
空格,也就是说在url的任何一个位置都不行。如果有则curl返回的结果就是false。然后我使用curl_error($ch)
来获取可视获取的结果为string ""也就是空字符串。所以这个就有点儿难判断了。最后发现是url中有了一个空格。
 
总结:使用curl来请求数据时curl的url地址中的任何地方不能有空格存在,不然会返回一个你琢磨不透的false

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MarsWill

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值