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 "[email protected]/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三个版本都有所不同.下面我贴出一段上传图片代码,供大家参考(能兼容三个版本):

[php] view plain copy

print?

  1. $filepath = dirname ( __FILE__ ) . "/a.jpg";
  2. if (class_exists ( ‘\CURLFile‘ )) {//关键是判断curlfile,官网推荐php5.5或更高的版本使用curlfile来实例文件
  3. $filedata = array (
  4. ‘fieldname‘ => new \CURLFile ( realpath ( $filepath ), ‘image/jpeg‘ )
  5. );
  6. } else {
  7. $filedata = array (
  8. ‘fieldname‘ => ‘@‘ . realpath ( $filepath )
  9. );
  10. }
  11. $url = "http://file.api.weixin.qq.com/cgi-bin/media/upload?access_token=" . $access_token . "&type=image";
  12. $result = Http::upload ( $url, $filedata );//调用upload函数
  13. if (isset ( $result )) {
  14. $data = json_decode ( $result );
  15. if (isset ( $data->media_id )) {
  16. $this->responseText ( $data->media_id );//这是我自己封装的返回消息函数
  17. } else {
  18. $this->responseImg ( "not set media_id" );//这是我自己封装的返回消息函数
  19. }
  20. } else {
  21. $this->responseText ( "no response" );//这是我自己封装的返回消息函数
  22. }

[php] view plain copy

print?

  1. public static function upload($url, $filedata) {
  2. $curl = curl_init ();
  3. if (class_exists ( ‘/CURLFile‘ )) {//php5.5跟php5.6中的CURLOPT_SAFE_UPLOAD的默认值不同
  4. curl_setopt ( $curl, CURLOPT_SAFE_UPLOAD, true );
  5. } else {
  6. if (defined ( ‘CURLOPT_SAFE_UPLOAD‘ )) {
  7. curl_setopt ( $curl, CURLOPT_SAFE_UPLOAD, false );
  8. }
  9. }
  10. curl_setopt ( $curl, CURLOPT_URL, $url );
  11. curl_setopt ( $curl, CURLOPT_SSL_VERIFYPEER, FALSE );
  12. curl_setopt ( $curl, CURLOPT_SSL_VERIFYHOST, FALSE );
  13. if (! empty ( $filedata )) {
  14. curl_setopt ( $curl, CURLOPT_POST, 1 );
  15. curl_setopt ( $curl, CURLOPT_POSTFIELDS, $filedata );
  16. }
  17. curl_setopt ( $curl, CURLOPT_RETURNTRANSFER, 1 );
  18. $output = curl_exec ( $curl );
  19. curl_close ( $curl );
  20. return $output;
  21. }
时间: 2024-11-05 19:30:43

php 微信公众平台上传多媒体接口 41005错误的相关文章

PHP微信公众平台开发1 配置接口

1.简介 微信公众平台是腾讯公司在微信的基础上新增的功能模块,通过这一平台,个人和企业都可以打造一个微信的公众号,并实现和特定群体的文字.图片.语音的全方位沟通.互动. 2.通讯机制 3.注册微信公众平台账号 注册地址:https://mp.weixin.qq.com 4.服务器端配置 4.1 示例代码设置 微信公众平台提供了一个php示例代码: http://mp.weixin.qq.com/mpres/htmledition/res/wx_sample.zip 下载下来,解压缩,打开编辑.

微信公众平台开发 用户分组接口

本文介绍在微信公众平台上如何使用高级接口开发用户分组接口的功能. 一.接口介绍 开发者可以使用接口,对公众平台的分组进行查询.创建.修改操作,也可以使用接口在需要时移动用户到某个分组. 一个公众账号,最多支持创建500个分组. 接口调用请求说明创建分组 http请求方式: POST(请使用https协议) https://api.weixin.qq.com/cgi-bin/groups/create?access_token=ACCESS_TOKEN POST数据格式:json POST数据例子

Java 微信公众号上传永久素材的方法

Java 微信公众号上传永久素材的方法 学习了:http://blog.csdn.net/u013791374/article/details/53258275 膜拜一下,源码如下: @RequestMapping(value="create") public String create(@RequestParam MultipartFile file, HttpServletRequest request, HttpServletResponse response, HttpSess

微信公众平台新增语义理解接口

微信公众平台语义理解接口正式对外开放.通过语义接口,接收用户发送的自然语言请求,让系统理解用户的说话内容. 微信语义理解接口提供从用户自然语言输入到结构化解析的技术实现,使用先进的自然语言处理技术给开发者提供一站式的语义解析方案.该平台覆盖多个垂直领域的语义场景,部分领域还可以支持取得最终的展示结果.开发者无需掌握语义理解及相关技术,只需根据自己的产品特点,选择相应的服务即可搭建一套智能语义服务.结合语音识别接口,通过微信语音识别得到用户的语音信息之后,经过语义分析理解,得到用户需求,及时回复用

微信公众平台开发 无高级接口账号获取用户基本信息(转)

本文介绍如何获得微信公众平台关注用户的基本信息,包括昵称.头像.性别.国家.省份.城市.语言.本文的方法将囊括订阅号和服务号以及自定义菜单各种场景,无论是否有高级接口权限,都有办法来获得用户基本信息,而无需模拟登录. 在本文中,特别要注意的是有两个不同的Access Token,他们产生的方式不一样,一种是使用AppID和AppSecret获取的access_token,一种是OAuth2.0授权中产生的access_token,方倍工作室分别称为全局Access Token和授权Access

NET实现微信公共平台上传下载多媒体文件(转)

举个例子,有人对着我们的公共微信号拍个照片发送过来,然后我们处理这个照片,比如进行ocr识别字(随后就会降到这个例子),或者人脸识别,或者拍照取证等,这些功能都是相当有用的.那么我们现在就要分析一下这个过程.微信平台肯定不能帮助我们OCR或者人脸识别等功能,要做这些功能首先到得到图片!用户拍摄的照片首先被上传到了wenxin的服务器,然后就有了一个mediaID,我们用这个mediaID可以下载到我们自己的服务器上然后处理,把结果给微信平台,由微信平台最终反馈给用户(关注者).微信的开发文档已经

微信公众平台开发(88) 用户分组接口

本文介绍在微信公众平台上如何使用高级接口开发用户分组接口的功能. 一.接口介绍 开发者可以使用接口,对公众平台的分组进行查询.创建.修改操作,也可以使用接口在需要时移动用户到某个分组. 一个公众账号,最多支持创建500个分组. 接口调用请求说明创建分组http请求方式: POST(请使用https协议) https://api.weixin.qq.com/cgi-bin/groups/create?access_token=ACCESS_TOKEN POST数据格式:json POST数据例子:

PHP玩转微信公众平台自定义接口

从微信公众平台开通自定义回复后,就一直在关注微信接口这一块,很想用自定义回复这块做个站长工具的查询,例如PR查询,备案查询等,输入网址信息,就能自动获取PR,获取备案信息,应该是一个不错的想法.不过以前一直不支持自定义API,只能是一些固定的信息回复.最近微信公众平台终于开放第三方接口了,也就是说,可以根据用户提交的信息,来自定义回复内容,非常方便. 看到了微信的自定义第三方接口的强大后,下面我们来讲讲怎么实现自定义回复. 首先我们进入第三方接口的页面进行注册,地址:http://mp.weix

微信公众平台开发(73) 客服接口发送客服消息

原文:微信公众平台开发(73) 客服接口发送客服消息 微信公众平台开发 客服接口 发送客服消息作者:方倍工作室 地址:http://www.cnblogs.com/txw1958/p/weixin73-custom-send.html 当用户主动发消息给公众号的时候(包括发送信息.点击自定义菜单clike事件.订阅事件.扫描二维码事件.支付成功事件.用户维权),微信将会把消息数据推送给开发者,开发者在一段时间内(目前为24小时)可以调用客服消息接口,通过POST一个JSON数据包来发送消息给普通