PHP 5.6 微信上传临时素材的坑

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP 5.6 微信上传临时素材的坑相关的知识,希望对你有一定的参考价值。


/*
* * 上传素材 */ 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 [email protected]:/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 微信上传临时素材的坑的主要内容,如果未能解决你的问题,请参考以下文章

php使用curl新增微信临时素材(上传图片)

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

企业微信接口上传临时素材

企业微信接口上传临时素材

企业微信接口上传临时素材

微信企业号-上传获取临时素材文件