/** * 上傳素材 */ 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
坑
- 圖片上傳一定要用本地的絕對路徑 例 curl -F media=@C:/Users/Administrator/Desktop/phpStudy/WWW/項目名稱/Upload/qrcode/2017-10-08/657d112ce5b2e4c02699faa4b369c6ee.png
- 微信access_token使用時長7200秒 (我這里偷懶沒有設置,不過你們要注意哦)
- PHP版本問題 5.6和5.6以上的版本 在curl內要設置
curl_setopt ( $curl, CURLOPT_SAFE_UPLOAD, true); $data = array('media' => new \CURLFile($fileurl));
- PHP5.5及以下版本
if (defined ( 'CURLOPT_SAFE_UPLOAD' )) { curl_setopt ( $curl, CURLOPT_SAFE_UPLOAD, false ); } $data = array('media' => '@' . realpath($fileurl));
- CURLOPT_SSL_VERIFYPEER:是否檢測服務器的證書是否由正規瀏覽器認證過的授權CA頒發的。