微信公众号开发--新增临时素材

在近日的微信公众号开发中,遇到临时素材的提交

遇到错误码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 [email protected] "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));
        }

 

你可能感兴趣的:(微信)