请求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;
token可以用错误的,微信都会返回状态码
但是我在框架里通过curl模拟请求,无论token是否正确,图片传递与否,返回值均为“”【空的】
群里有人出现类型情况,postman测试,都是正常的。如果在webman框架通过curl模拟get请求(正常)post请求(返回空,不正常),代码确信100%无误,本人已困扰一下午没解决,不清楚是哪里问题,示例代码是从以前正常业务代码复制过来的
难道是微信api拦截了webman框架发起来的请求?
这里写具体的系统环境相关信息
不用问微信API,传递token错误或者图片没有传递之类的,任何参数错误,微信都会有返回值的。示例是测试微信返回值的,在webman框架里无论怎么传递,微信返回“”【空】,如果在postman里测试请求,都会有返回值的
token用正确或者错误的,全部都是一样返回"",bug与api参数正确与否无关,可能跟webman框架有关
代码检查一下午,确信无误。curl代码也正确。以前通过tp5请求有返回值,复制到webman请求,无返回值,微信返回“”
curl调用失败和框架没什么联系。
直接不用框架,写一个test.php,请求微信看看是不是返回“”
返回正常,有值
真的有问题, 你可以试试,复制我的代码,我惊掉大牙了,百思不得其解
官方群里已经有人出现同样问题了
没问题
然后我把代码复制到webman下运行,同样代码,返回结果是“”【空的】
return json($output);
不行,加了之后,返回{
"file": null
}
示例代码,是我调用的一个方法,外层代码的已经json化了,curl那块只是普通的函数return
你可以复制我的代码试试,一样返回“”,官方群已有人出现同样问题了
所以你要想想,为什么是{"file":null}?
我没传图片,我知道没传,现在问题是,无论传没传,微信api连个错误也不给你, curl直接给“”
我贴全代码
不是{"file":null}问题, 哥,是webman通过curl调用微信api,返回“”, tp5原生框架,返回正常的
代码逻辑没问题,检查一下午,100%没问题,问题出在curl请求微信api那一块
问题:webman框架curl请求微信api,微信给我返回“”【空】,其它tp5框架或php单个文件返回测试均为正常
我这正常
我重启电脑试试,换个热点试试
找到原因了(黄色框框里代码导致返回空,不知为啥在webman就这样,谢谢各位大佬指点)
哎,一下午才找到这个问题
注释后,就不返回“”,开启就“”
哎哟,搞不定,有人用webman框架做小程序图片鉴黄检测没?
我们项目在用webman框架做小程序鉴黄,唯一注意的是php-cli里文件路径要用绝对路径,其它和php-fpm一样,没区别。
你的正常检测吗?我的如果加new \CURLFile($path)这句代码,返回就是“”【空】php7.4版本
正常,唯一注意的是$path传绝对路径。如果你有问题看下是不是$path传错了,比如传了false或者相对路径
$path是绝对路径, 从C:盘根符开始的, 文件还用file_exists($path)检测了, 返回1, 确定是正确的绝对路径
看别人遇到过类似问题 https://developers.weixin.qq.com/community/develop/doc/0006866c67008018750a876355fc00?_at=1672915263294
我刚刚弄个错误的token请求过去,也是返回空,不报token无效。如果把CURLFile那两行代码注释了,请求过去,微信返回token无效invalid credential, access_token is invalid
//$obj = new \CURLFile(realpath($img_path));
//$obj->setMimeType("image/jpeg");
还是和这两行代码有关,我无语了,开启后,请求貌似不能正常发过去,curl我是复制你的【这肯定没错】,注释就正常请求
5.6 》= 支持 CURLFile,我的php 7.4, 支持这个的
只去掉 $obj->setMimeType("image/jpeg"); 试下
一样的,早就试过了,new \CURLFile(realpath($img_path)); 这里面是绝对路径,传参确定无误,curl跟你一样复制,我感觉我环境有问题
你上传的文件多大?
几十k的图片
25.9 KB (26,589 字节) 图片
我从中午1点,调试这个bug到现在,其它代码环节检查无数次,没问题。就是开启CURLFile就不行了,就是这个的问题,开启后,请求发不过去,图片25kb,curl代码正确
new \CURLFile 也有值
代码没问题,不知道是不是我环境问题?还是包问题?降级升级?
为什么curl_exec()后return $data;
搞不定,结贴,遇到此类情况的,可以指点一下,感谢回帖的朋友,谢谢你们
应该是$this->curdPP
这个是公共函数, 是那样用的,不是指向
你可以用GuzzleHttp 把curl重写一下,也不复杂
你换个PHP版本试试,我之前用phpstudy里面的php7.4.3也是不行的
此话有理,我放弃那个bug了,应该换个集成环境试试