有人出现这个奇怪的问题吗? 请求微信api,返回“”

bug描述

请求API:https://api.weixin.qq.com/wxa/img_sec_check?access_token=token
问题:用postman模拟get和post请求都有返回
截图

截图

程序代码或配置

$url = 'https://api.weixin.qq.com/wxa/img_sec_check?access_token=611';
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
        curl_setopt($ch, CURLOPT_HEADER, $header);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
        $output = curl_exec($ch);
        curl_close($ch);
        return $output;

重现bug的步骤

token可以用错误的,微信都会返回状态码
但是我在框架里通过curl模拟请求,无论token是否正确,图片传递与否,返回值均为“”【空的】
群里有人出现类型情况,postman测试,都是正常的。如果在webman框架通过curl模拟get请求(正常)post请求(返回空,不正常),代码确信100%无误,本人已困扰一下午没解决,不清楚是哪里问题,示例代码是从以前正常业务代码复制过来的

难道是微信api拦截了webman框架发起来的请求?

截图
截图
截图

系统环境及workerman/webman等具体版本

这里写具体的系统环境相关信息
截图

1157 14 1
14个回答

PHP甩JAVA一条街

不用问微信API,传递token错误或者图片没有传递之类的,任何参数错误,微信都会有返回值的。示例是测试微信返回值的,在webman框架里无论怎么传递,微信返回“”【空】,如果在postman里测试请求,都会有返回值的

  • 暂无评论
PHP甩JAVA一条街

截图截图

  • PHP甩JAVA一条街 2023-01-05

    token用正确或者错误的,全部都是一样返回"",bug与api参数正确与否无关,可能跟webman框架有关

  • PHP甩JAVA一条街 2023-01-05

    代码检查一下午,确信无误。curl代码也正确。以前通过tp5请求有返回值,复制到webman请求,无返回值,微信返回“”

静默

curl调用失败和框架没什么联系。
直接不用框架,写一个test.php,请求微信看看是不是返回“”

PHP甩JAVA一条街

截图截图

  • PHP甩JAVA一条街 2023-01-05

    然后我把代码复制到webman下运行,同样代码,返回结果是“”【空的】

  • nitron 2023-01-05

    return json($output);

  • PHP甩JAVA一条街 2023-01-05

    不行,加了之后,返回{
    "file": null
    }

  • PHP甩JAVA一条街 2023-01-05

    示例代码,是我调用的一个方法,外层代码的已经json化了,curl那块只是普通的函数return

  • PHP甩JAVA一条街 2023-01-05

    你可以复制我的代码试试,一样返回“”,官方群已有人出现同样问题了

  • nitron 2023-01-05

    所以你要想想,为什么是{"file":null}?

  • PHP甩JAVA一条街 2023-01-05

    我没传图片,我知道没传,现在问题是,无论传没传,微信api连个错误也不给你, curl直接给“”

  • PHP甩JAVA一条街 2023-01-05

    我贴全代码

  • PHP甩JAVA一条街 2023-01-05

    不是{"file":null}问题, 哥,是webman通过curl调用微信api,返回“”, tp5原生框架,返回正常的

PHP甩JAVA一条街

截图截图截图截图

  • PHP甩JAVA一条街 2023-01-05

    代码逻辑没问题,检查一下午,100%没问题,问题出在curl请求微信api那一块

  • PHP甩JAVA一条街 2023-01-05

    问题:webman框架curl请求微信api,微信给我返回“”【空】,其它tp5框架或php单个文件返回测试均为正常

nitron

我这正常

PHP甩JAVA一条街

找到原因了(黄色框框里代码导致返回空,不知为啥在webman就这样,谢谢各位大佬指点)
截图

yongdao35
$access_token = 'xxx';
$path = '文件绝对路径';
curl("https://api.weixin.qq.com/wxa/img_sec_check?access_token=$access_token", ['media' => new \CURLFile($path)]);
function curl($url, $data = [])
{
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    $result = curl_exec($ch);
    curl_close($ch);
    return $result;
}

我们项目在用webman框架做小程序鉴黄,唯一注意的是php-cli里文件路径要用绝对路径,其它和php-fpm一样,没区别。

  • PHP甩JAVA一条街 2023-01-05

    你的正常检测吗?我的如果加new \CURLFile($path)这句代码,返回就是“”【空】php7.4版本

  • yongdao35 2023-01-05

    正常,唯一注意的是$path传绝对路径。如果你有问题看下是不是$path传错了,比如传了false或者相对路径

  • PHP甩JAVA一条街 2023-01-05

    $path是绝对路径, 从C:盘根符开始的, 文件还用file_exists($path)检测了, 返回1, 确定是正确的绝对路径

  • PHP甩JAVA一条街 2023-01-05

    我刚刚弄个错误的token请求过去,也是返回空,不报token无效。如果把CURLFile那两行代码注释了,请求过去,微信返回token无效invalid credential, access_token is invalid

  • PHP甩JAVA一条街 2023-01-05

    //$obj = new \CURLFile(realpath($img_path));
    //$obj->setMimeType("image/jpeg");
    还是和这两行代码有关,我无语了,开启后,请求貌似不能正常发过去,curl我是复制你的【这肯定没错】,注释就正常请求

  • PHP甩JAVA一条街 2023-01-05

    5.6 》= 支持 CURLFile,我的php 7.4, 支持这个的

  • yongdao35 2023-01-05

    只去掉 $obj->setMimeType("image/jpeg"); 试下

  • PHP甩JAVA一条街 2023-01-05

    一样的,早就试过了,new \CURLFile(realpath($img_path)); 这里面是绝对路径,传参确定无误,curl跟你一样复制,我感觉我环境有问题

  • yongdao35 2023-01-05

    你上传的文件多大?

  • PHP甩JAVA一条街 2023-01-05

    几十k的图片

  • PHP甩JAVA一条街 2023-01-05

    25.9 KB (26,589 字节) 图片

  • PHP甩JAVA一条街 2023-01-05

    我从中午1点,调试这个bug到现在,其它代码环节检查无数次,没问题。就是开启CURLFile就不行了,就是这个的问题,开启后,请求发不过去,图片25kb,curl代码正确

PHP甩JAVA一条街

截图 new \CURLFile 也有值
截图截图

  • PHP甩JAVA一条街 2023-01-05

    代码没问题,不知道是不是我环境问题?还是包问题?降级升级?

  • wolfcode 2023-01-06

    为什么curl_exec()后return $data;

PHP甩JAVA一条街

截图截图

  • 暂无评论
PHP甩JAVA一条街

截图
搞不定,结贴,遇到此类情况的,可以指点一下,感谢回帖的朋友,谢谢你们

  • 暂无评论
tanhongbin

应该是$this->curdPP

tanhongbin

你可以用GuzzleHttp 把curl重写一下,也不复杂

  • 暂无评论
大古

你换个PHP版本试试,我之前用phpstudy里面的php7.4.3也是不行的

年代过于久远,无法发表回答
🔝