我是一个兼职后端的前端程序员。
我用laravel写了一套微信公众平台管理系统。有一个需求是,切换了开发模式之后,要将一些需要自动回复的图片先push到微信自己的服务器上,换回media_id,然后用户发关键字给公众号的时候,使用media_id来请微信返回这张图片。
在控制台直接敲curl命令很简单:
curl -F media={real_path}/xxx.jpg "https://api.weixin.qq.com/cgi-bin/media/upload?access_token={Token}&type=image"
但是用php发curl请求的时候,却一直internel error 500。
当时我是这样写的:
$data = array( 'media'=> "@{$imgUrl}" );
$ch1 = curl_init();
$timeout = 5;
curl_setopt ( $ch1, CURLOPT_URL, $url );
curl_setopt ( $ch1, CURLOPT_POST, 1 );
curl_setopt ( $ch1, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt ( $ch1, CURLOPT_CONNECTTIMEOUT, $timeout );
curl_setopt ( $ch1, CURLOPT_SSL_VERIFYPEER, FALSE );
curl_setopt ( $ch1, CURLOPT_SSL_VERIFYHOST, false );
curl_setopt ( $ch1, CURLOPT_POSTFIELDS, $data );
$result=curl_exec($ch1);
curl_close($ch1);
在发现错误之后我进行了一些其他测试,发现传数据没问题,但文件一直不行。
接下来我在stackoverflow上看到了一篇文章:sending images via curl fails。蒙b的我直到第二天重新看才发现了一个新的对象:\CURLFile。
这是什么?接下来在segmentdefault上看到,有大神也踩了和我一样的坑。
好了,看完之后我们明白了file传不了的原因:php版本不兼容.....
代码里的$data改成这样:
$data = array( 'media'=> new \CURLFile( $imgUrl ) );
没事不要读PHP的官方中文文档!版本跟不上坑死你!