/**
* 上传素材
*/
function add_material($url){
$access_token = wx_access_token();
$wx_url = "https://api.weixin.qq.com/cgi-bin/material/add_material?access_token={$access_token}&type=image"
$real_path = "{$_SERVER['DOCUMENT_ROOT']}{$url}";
$result = http_post($wx_url, $real_path);
$arr = json_decode($result,true);
return $arr;
} /**
* 获取access_token
*/
function wx_access_token(){
$config=C('WEIXINPAY_CONFIG');
$url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid='.$config['APPID'].'&secret='.$config['APPSECRET'];
$result = json_decode(wx_curl($url),true);
return $result['access_token'];
}
function http_post($url ='' , $fileurl = '' )
{
$curl = curl_init();
if(class_exists('\CURLFile')){
curl_setopt ( $curl, CURLOPT_SAFE_UPLOAD, true);
$data = array('media' => new \CURLFile($fileurl));
}else{
if (defined ( 'CURLOPT_SAFE_UPLOAD' )) {
curl_setopt ( $curl, CURLOPT_SAFE_UPLOAD, false );
}
$data = array('media' => '@' . realpath($fileurl));
}
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
$output = curl_exec($curl);
curl_close($curl);
return $output;
}

以上是我的完整代码。

先说说我的环境吧,phg5.6+apache2.4

  1. 图片上传一定要用本地的绝对路径 例 curl -F media=@C:/Users/Administrator/Desktop/phpStudy/WWW/项目名称/Upload/qrcode/2017-10-08/657d112ce5b2e4c02699faa4b369c6ee.png
  2. 微信access_token使用时长7200秒 (我这里偷懒没有设置,不过你们要注意哦)
  3. PHP版本问题 5.6和5.6以上的版本 在curl内要设置 
    curl_setopt ( $curl, CURLOPT_SAFE_UPLOAD, true);
    $data = array('media' => new \CURLFile($fileurl));
  4. PHP5.5及以下版本
    if (defined ( 'CURLOPT_SAFE_UPLOAD' )) {
    curl_setopt ( $curl, CURLOPT_SAFE_UPLOAD, false );
    }
    $data = array('media' => '@' . realpath($fileurl));
  5. CURLOPT_SSL_VERIFYPEER:是否检测服务器的证书是否由正规浏览器认证过的授权CA颁发的。
     
  

PHP 5.6 微信上传临时素材的坑的更多相关文章

  1. php 调用微信上传临时素材接口 {“errcode”:41005,”errmsg”:”media data missing hint”}

    原因:由于PHP5.6以前与之后的版本curl_setopt有差异.PHP5.6以后不再支持”@文件路径”的方式. $picPath= "public\public\upload\xxx.p ...

  2. C#-微信公众平台接口-上传临时素材

    最烦做微信公众平台的东西..文档说得不清不楚,又没示例代码,只能自己 慢慢搜索,弄了一晚上,基本弄出来了,把本地的图片上传到微信的临时素材那里,返回媒体ID,用于其他操作,代码如下 :(自己导入相应的 ...

  3. 微信公众号开发---上传临时素材到公众号遇到的问题:"errcode":41005,"errmsg":"media data missing

    1.上传临时素材到公众号遇到的问题:"errcode":41005,"errmsg":"media data missing 解决办法:因为php版本 ...

  4. 微信上传文章素材—ASP.NET MVC从View层传数据到Controller层

    View层: $('#btnNews').click(function() { if (!confirm('确定要提交吗?')) { return; } var frontViewData = []; ...

  5. 企业微信上传 带中文名称的 临时素材资源 报错 44001:empty media data

    错误原因:urllib3的老版本bug,卸载掉 requests,urllib3,从新安装最新版的requests(此包内部依赖urllib3): 我从新安装的是 requests==2.22.0 及 ...

  6. 【微信上传素材接口--永久性】微信永久性上传、获取返回的medie_id 和url

    上传图片到微信服务器获得media_id和url (永久性) 其他接口类:https://www.cnblogs.com/gjw-hsf/p/7375261.html 转载地址:https://blo ...

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

    Java 微信公众号上传永久素材的方法 学习了:http://blog.csdn.net/u013791374/article/details/53258275 膜拜一下,源码如下: @Request ...

  8. 微信上传图文消息invalid media_id hint,thumb_media_id怎么获取

    微信上传图文消息thumb_media_id, thumb_media_id怎么获取, 微信群发图文消息invalid media_id hint, 微信群发图文消息40007, 40007,inva ...

  9. 微信小程序上传文件遇到的坑

    在开发小程序时,使用的花生壳做的内网映射,域名使用花生壳卖的https域名 在做小程序文件上传时,调用接口,老是报错. Caused by: org.apache.commons.fileupload ...

随机推荐

  1. 一个php技术栈后端猿的知识储备大纲

    <h1 align="center">Easy Tips</h1><p align="center"><a href= ...

  2. ngRx 官方示例分析 - 4.pages

    Page 中通过构造函数注入 Store,基于 Store 进行数据操作. 注意 Component 使用了 changeDetection: ChangeDetectionStrategy.OnPu ...

  3. hasResultError

    hasResultError 的作用是 让返回的对象可以报错误信息.

  4. java.lang.reflect.InvocationTargetException

    java.lang.reflect.InvocationTargetException是什么情况?java.lang.reflect.InvocationTargetExceptionat sun.r ...

  5. TCP socket 多线程 并发服务器(发送)与客户端(接收)

    实现功能:Ubuntu上通过多线程实现服务器并发给客户端发送文件,携带包头,根据包头信息命名新文件.适用于短连接. 问题小结: 01. 调用嵌套在结构体中的结构体char 数组成员时,需要动态分配内存 ...

  6. NumPy-矩阵部分

    NumPy-矩阵部分 [TOC] NumPy 简介 numpy可用来存储和处理大型矩阵,比Python自身的嵌套列表(nested list structure)结构要高效的多. 安装NumPy pi ...

  7. SpringMvc4.x---快捷的ViewController

    @RequestMapping("/index") public String hello(){ return "index"; } 此处无任何的业务处理,只是 ...

  8. Java 调用python说明文档

    Java 调用python说明文档 通过java调用python脚本主要如下三种方式: 1.直接执行python脚本: 2.执行python.py文件: 3.使用Runtime.getRuntime( ...

  9. npm install安装时忘记--save解决方法

    title: npm install安装时忘记--save解决方法 date: 2017-05-07 20:17:54 tags: npm categories: --- 网上还有一个解决方案就是: ...

  10. centos 如何关闭防火墙?

    1 查看防火墙状态: 命令: /etc/init.d/iptables status 如果是开着显示内容类是截图 2 临时关闭防火墙: 命令:/etc/init.d/iptables stop     ...