php 微信公众平台上传多媒体接口 41005错误
文链接: http://www.maoyupeng.com/wechart-upload-image-errorcode-41005.html
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;
- }
php 微信公众平台上传多媒体接口 41005错误的更多相关文章
- 微信公众平台上如何上传excel表格?
微信公众平台上如何上传excel表格? 我们都知道创建一个微信公众号,在公众号中发布一些文章是非常简单的,但公众号添加附件下载的功能却被限制,如今可以使用小程序“微附件”进行在公众号中添加附件. ...
- Java 微信公众号上传永久素材的方法
Java 微信公众号上传永久素材的方法 学习了:http://blog.csdn.net/u013791374/article/details/53258275 膜拜一下,源码如下: @Request ...
- C#微信公众平台开发—高级群发接口
涉及access_token的获取请参考<C#微信公众平台开发—access_token的获取存储与更新> 一.为了实现高级群发功能,需要解决的问题 1.通过微信接口上传图文消息素材时,J ...
- PHP微信公众平台开发1 配置接口
1.简介 微信公众平台是腾讯公司在微信的基础上新增的功能模块,通过这一平台,个人和企业都可以打造一个微信的公众号,并实现和特定群体的文字.图片.语音的全方位沟通.互动. 2.通讯机制 3.注册微信公众 ...
- Java微信公众平台开发(八)--多媒体消息回复
转自:http://www.cuiyongzhi.com/post/46.html 之前我们在做消息回复的时候我们对回复的消息简单做了分类,前面也有讲述如何回复[普通消息类型消息],这里将讲述多媒体消 ...
- Java微信公众平台开发(七)--多媒体消息回复之图片回复
之前我们在做消息回复的时候我们对回复的消息简单做了分类,前面也有讲述如何回复[普通消息类型消息],这里将讲述多媒体消息的回复方法,[多媒体消息]包含回复图片消息/回复语音消息/回复视频消息/回复音乐消 ...
- Java微信公众平台开发(八)--多媒体消息回复之音乐
我们上一篇写了关注出发图片的回复.想着在发送一次音乐,最后基于回复消息分类情况下,实现一个简单的只能话回复.先附一张大致效果图. 下面我们进入代码阶段. (一)修改消息转发器MsgDispatcher ...
- NET实现微信公共平台上传下载多媒体文件(转)
举个例子,有人对着我们的公共微信号拍个照片发送过来,然后我们处理这个照片,比如进行ocr识别字(随后就会降到这个例子),或者人脸识别,或者拍照取证等,这些功能都是相当有用的.那么我们现在就要分析一下这 ...
- 怎么在微信公众号上传PPT?
我们都知道创建一个微信公众号,在公众号中发布一些文章是非常简单的,但公众号添加附件下载的功能却被限制,如今可以使用小程序“微附件”进行在公众号中添加附件. 以下是公众号添加附件使用“微附件”小程序的教 ...
随机推荐
- SpringMVC -- 梗概--壹
1.springMVC:MVC开源框架 2.springMVC开发流程: 2.1 导包: 2.2 配置前端控制器(核心) DispatcherServlet <servlet> <s ...
- web字体详解@font-face
一:字体的下载(http://www.dafont.com/new.php) 二:选择需要的字体并下载( Download ) 三:下载后并解压 四:获取@font-face所需要字体的格式.eot, ...
- 向下滚动页面加载图片的js
js代码 scroll.photo.js : window.imgscroll = { options: { target: null, //插入图片的目标位置 img_list: null, //图 ...
- 联机事务处理OLTP(on-line transaction processing)和联机分析处理OLAP(On-Line Analytical Processing)
什么是OLAP(联机分析处理)? 这个是和数据处理非常相关的一个概念.接触过BI(商务智能)的同学一定清楚. 数据处理大致可以分成两大类:联机事务处理OLTP(on-line tr ...
- iOS开发UI篇—Quartz2D使用(截屏)
iOS开发UI篇—Quartz2D使用(截屏) 一.简单说明 在程序开发中,有时候需要截取屏幕上的某一块内容,比如捕鱼达人游戏.如图: 完成截屏功能的核心代码:- (void)renderInCont ...
- SQL导出excel
我在SQL 2008R2 里面用下面的命令成功导出excel 文件. EXEC master..xp_cmdshell 'bcp "select * from Car_data.dbo.Ca ...
- My Game --背景
在GitHub MyGame clone 代码,添加到配置并新建好的工程中运行下来就可以看到这个画面: 中间的小点是显示的当前触摸点,本文暂不讨论.图中的蓝天是蓝色的 LayerColor this- ...
- ubuntu arm妙算加载cp210x驱动
在妙算TK1上安装ros后,插上usb串口竟然没有驱动 无奈装 从http://www.silabs.com/products/mcu/pages/usbtouartbridgevcpdrivers. ...
- Oracle中TO_DATE用法
TO_DATE格式(以时间:2007-11-02 13:45:25为例) Year: yy two digits 两位年 显示值:07 yyy three digits 三位年 显示值:007 yyy ...
- Angular - ng-repeat高级用法
ng-repeat高级用法: 遍历数组: <li ng-repeat="item in array">{{item}}</li> 遍历对象: k ...