在近日的微信公众号开发中,遇到临时素材的提交
遇到错误码45001 显示媒体文件不存在,返回代码打印了文件路径,发现路径没有任何问题,继续重来还是45001。
过了会弹出api访问超过当日次数,更郁闷了,明明没有访问几次
当天查阅了curl的文献后,终于在第二天解决。
首先我们看到微信的临时素材接口:
http请求方式:POST/FORM,使用https
https://api.weixin.qq.com/cgi-bin/media/upload?access_token=ACCESS_TOKEN&type=TYPE
调用示例(使用curl命令,用FORM表单方式上传一个多媒体文件):
curl -F media=@test.jpg "https://api.weixin.qq.com/cgi-bin/media/upload?access_token=ACCESS_TOKEN&type=TYPE"
-f 使用curl命令,用FORM表单方式上传一个多媒体文件
$filedata = array("media" =>'@'.$filepath)
返回错误码45001
那么到底是什么问题呢?现在我们能确定两点1:不是微信接口的问题,2:不是路径问题,让我不禁怀疑到curl函数的问题,刚开始没怀疑它是因为这个函数能正确的获取的access_token但是现在不得不怀疑是否上传文件的时候要发生改变。好吧,咱们去百度curl模拟上传文件发现了一个很重要的问题
PHP5.5以下是支持@+文件这种方式上传文件
PHP5.5以上是支持 new \CURLFile(文件) 这种方式上传文件
然后笔者的却是php7.0.7(我是5.6.38)那么事不宜迟赶紧换方式上传试试,改掉文件上传的方式后,测试成功!
作者:闫美丽
链接:https://www.jianshu.com/p/a7cbca4bef76
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
下面是上传的代码
// 这里用特性检测判断php版本
if (class_exists('\CURLFile'))
{
curl_setopt($curl, CURLOPT_SAFE_UPLOAD, true);
//php版本>=5.5
$filedata = array('media' => new \CURLFile($filepath));
}
else
{
if (defined('CURLOPT_SAFE_UPLOAD'))
{
curl_setopt($curl, CURLOPT_SAFE_UPLOAD, false);
}
//php版本大<5.5
$filedata = array('media' => '@' . realpath($filepath));
}