阿哥论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 437|回复: 0

php 微信公众平台上传多媒体接口 41005错误

[复制链接]

2011

主题

1

好友

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

优秀会员 助人为乐 辛勤工作 技术精英 多才多艺 优秀班竹 灌水天才 星球管理 宣传大使 灌水之王 财富勋章 版主勋章 动漫勋章 勤奋会员 论坛精英 PS高手 心 8 闪游皮肤 双鱼座 8★8➹ 志愿者 乖

发表于 2015-4-22 19:03:25 |显示全部楼层
PHP 微信公众平台上传多媒体接口 41005错误
  PHP的cURL支持通过给CURL_PosTFIELDS传递关联数组(而不是字符串)来生成multipart/form-data的POST请求。
  
  传统上,PHP的cURL支持通过在数组数据中,使用“@+文件全路径”的语法附加文件,供cURL读取上传。这与命令行直接调用cURL程序的语法是一致的:
  
  curl_setopt(ch, CURLOPT_POSTFIELDS, array(     'file' => '@'.realpath('image.png'),  ));  equals $ curl -F "file=@/absolute/path/to/image.png" <url>     
  但PHP从5.5开始引入了新的CURLFile类用来指向文件。CURLFile类也可以详细定义MIME类型、文件名等可能出现在multipart/form-data数据中的附加信息。PHP推荐使用CURLFile替代旧的@语法:
  curl_setopt(ch, CURLOPT_POSTFIELDS, [     'file' => new CURLFile(realpath('image.png')),  ]);   
  PHP 5.5另外引入了CURL_SAFE_UPLOAD选项,可以强制PHP的cURL模块拒绝旧的@语法,仅接受CURLFile式的文件。5.5的默认值为false,5.6的默认值为true。
  
  微信公众号多媒体上传接口返回码出现41005的原因就是不能识别文件.
  归根到底,可能开发者没有太在乎php版本之间的更新和差异,所以导致在低版本的php环境开发的,然后部署到高版本的环境中.  
  需要注意的是php5.4 php5.5 php5.6三个版本都有所不同.下面我贴出一段上传图片代码,供大家参考(能兼容三个版本):
  
$filepath = dirname ( __FILE__ ) . "/a.jpg"; if (class_exists ( 'CURLFile' )) {//关键是判断curlfile,官网推荐php5.5或更高的版本使用curlfile来实例文件         $filedata = array (                 'fieldname' => new CURLFile ( realpath ( $filepath ), 'image/jpeg' )          ); } else {         $filedata = array (                 'fieldname' => '@' . realpath ( $filepath )          ); } $url = "http://file.api.weixin.qq.com/cgi-bin/media/upload?Access_token=" . $access_token . "&type=image"; $result = Http::upload ( $url, $filedata );//调用upload函数 if (isset ( $result )) {         $data = json_decode ( $result );         if (isset ( $data->media_id )) {                 $this->responseText ( $data->media_id );//这是我自己封装的返回消息函数         } else {                 $this->responseImg ( "not set media_id" );//这是我自己封装的返回消息函数         } } else {         $this->responseText ( "no response" );//这是我自己封装的返回消息函数 }   public static function upload($url, $filedata) {                 $curl = curl_init ();                 if (class_exists ( '/CURLFile' )) {//php5.5跟php5.6中的CURLOPT_SAFE_UPLOAD的默认值不同                         curl_setopt ( $curl, CURLOPT_SAFE_UPLOAD, true );                 } else {                         if (defined ( 'CURLOPT_SAFE_UPLOAD' )) {                                 curl_setopt ( $curl, CURLOPT_SAFE_UPLOAD, false );                         }                 }                 curl_setopt ( $curl, CURLOPT_URL, $url );                 curl_setopt ( $curl, CURLOPT_SSL_VERIFYPEER, FALSE );                 curl_setopt ( $curl, CURLOPT_SSL_VERIFYHOST, FALSE );                 if (! empty ( $filedata )) {                         curl_setopt ( $curl, CURLOPT_POST, 1 );                         curl_setopt ( $curl, CURLOPT_POSTFIELDS, $filedata );                 }                 curl_setopt ( $curl, CURLOPT_RETURNTRANSFER, 1 );                 $output = curl_exec ( $curl );                 curl_close ( $curl );                 return $output;                          }
  如果还没有解决自己的问题的话,可以微博给我留言,也可以qq联系我:450476065,大家互相交流互相进步   
http://www.ithao123.cn/content-828327.html
php 微信公众平台上传多媒体接口 41005错误

该会员没有填写今日想说内容.
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

回顶部