PHP通過CURL上傳圖片(微信公衆號上傳素材)

這裏以微信公衆號素材管理爲例。

PHP的cURL支持通過給CURL_POSTFIELDS傳遞關聯數組(而不是字符串)來生成multipart/form-data的POST請求。

傳統上,PHP的cURL支持通過在數組數據中,使用“@+文件全路徑”的語法附加文件,供cURL讀取上傳。這與命令行直接調用cURL程序的語法是一致的:

$type = "image";  //聲明上傳的素材類型,這裏爲image
$token = get_access_token();//調用接口需要獲取token,這裏使用一個封裝好的調取access_token的函數
$url = "https://api.weixin.qq.com/cgi-bin/material/add_material?access_token=".$token."&type=".$type;
        //這裏是請求地址,token和素材類型通過get方式傳遞
$file_path = dirname(__FILE__)."/pro.jpg";
        //這裏聲明文件的路徑,使用絕對路徑
$file_data = array('media'  => '@'.$file_path);
        //傳遞的數組,方式一:使用'@'符號加上文件的絕對路徑來指引文件。這種方式適合PHP5.5之前的版本,
$file_data = array("media"  => new \CURLFile($file_path));
        //傳遞的數組,方式二:從PHP5.5版本以後,引入了新的CURLFile 類來指向文件,參數傳入的也是絕對路徑
$ch = curl_init();
        //初始化一個新的會話,返回一個cURL句柄,供curl_setopt(), curl_exec()curl_close() 函數使用。
curl_setopt($ch , CURLOPT_URL , $url);
        //需要獲取的URL地址,也可以在curl_init()函數中設置。
curl_setopt($ch , CURLOPT_RETURNTRANSFER, 1);
        //使用PHP curl獲取頁面內容或提交數據,有時候希望返回的內容作爲變量儲存,
        //而不是直接輸出。這個時候就必需設置curlCURLOPT_RETURNTRANSFER選項爲1true
curl_setopt($ch , CURLOPT_POST, 1);
        //發送一個POST請求
curl_setopt($ch , CURLOPT_POSTFIELDS, $file_data);
        //傳遞一個關聯數組,生成multipart/form-dataPOST請求
$output = curl_exec($ch);//發送請求獲取結果
curl_close($ch);//關閉會話
return $output;//返回結果

返回結果:

{"media_id":"Y-wN-hbQ42QYeA5-956YrLgmGDTnl4bWqJr6AjsgoGk",

"url":"http:\/\/mmbiz.qpic.cn\/mmbiz_jpg\/gyNXEoR9bg5UfM2wEFcz3tYO4a0adXo8Y4treMlnStHt8E0mDZazhxmGiamfU06tDkzCt55YR681Npd9sasH0xg\/0?wx_fmt=jpeg"

}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章