1. 程式人生 > >微信公眾平臺開發【素材管理】上傳臨時素材

微信公眾平臺開發【素材管理】上傳臨時素材

公眾號經常有需要用到一些臨時性的多媒體素材的場景,例如在使用介面特別是傳送訊息時,對多媒體檔案、多媒體訊息的獲取和呼叫等操作,是通過media_id來進行的。

介面開放許可權:素材管理介面對所有認證的訂閱號和服務號開放。

介面呼叫說明

1、http請求方式

POST/FORM,需使用https

2、引數說明

引數		是否必須	說明
access_token	是	 	呼叫介面憑證
type	 	是	 	媒體檔案型別,分別有圖片(image)、語音(voice)、視訊(video)和縮圖(thumb)
media	 	是	 	form-data中媒體檔案標識,有filename、filelength、content-type等資訊

3、返回資料說明

引數		描述
type	 	媒體檔案型別,分別有圖片(image)、語音(voice)、視訊(video)和縮圖(thumb,主要用於視訊與音樂格式的縮圖)
media_id	媒體檔案上傳後,獲取時的唯一標識
created_at	媒體檔案上傳時間戳

正確情況下的返回JSON資料包結果如:{"type":"TYPE","media_id":"MEDIA_ID","created_at":123456789}

錯誤情況下的返回JSON資料包示例如:{"errcode":40004,"errmsg":"invalid media type"}(此錯誤指無效媒體型別錯誤)

完整示例程式碼

1、上傳圖片“smallelife.jpg”到伺服器根目錄

2、將以下程式碼寫入到index.php檔案中,並將此檔案上傳到伺服器根目錄(記得修改AppID和AppSecret),具體如下:(完整程式碼下載

<?php
/**
  * 作者:smalle
  * 網址:http://blog.csdn.net/oldinaction
  * 公眾號:smallelife
  */

define("AppID","你的AppID");
define("AppSecret", "你的AppSecret");

/* 新增一個臨時素材 */
//url 裡面的需要2個引數一個 access_token 一個是 type(值可為image、voice、video和縮圖thumb)
$url = "https://api.weixin.qq.com/cgi-bin/media/upload?access_token=".get_token()."&type=image";
if (class_exists('\CURLFile')) {
	$josn = array('media' => new \CURLFile(realpath("smallelife.jpg")));
} else {
	$josn = array('media' => '@' . realpath("smallelife.jpg"));
}

$ret = curl_post($url,$josn);
$row = json_decode($ret);//對JSON格式的字串進行編碼
echo '此素材的唯一識別符號media_id為:'.$row->media_id;//得到上傳素材後,此素材的唯一識別符號media_id

//獲取access_token
function get_token(){
	$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".AppID."&secret=".AppSecret;
	$data = json_decode(file_get_contents($url),true);
	if($data['access_token']){
		return $data['access_token'];
	}else{
		echo "Error";
		exit();
	}
}

//curl實現post請求
function curl_post($url, $data = null)
{
	//建立一個新cURL資源
	$curl = curl_init();
	//設定URL和相應的選項 
	curl_setopt($curl, CURLOPT_URL, $url);
	if (!empty($data)){
		curl_setopt($curl, CURLOPT_POST, 1);
		curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
	}
	curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
	//執行curl,抓取URL並把它傳遞給瀏覽器
	$output = curl_exec($curl);
	//關閉cURL資源,並且釋放系統資源
	curl_close($curl);
	return $output;
}

?>

執行示例結果

在瀏覽器中直接訪問index.php,便會輸出上傳檔案的media_id,如下圖:


注意事項

1、可以根據返回資料的相關引數獲取對應引數的值,如:$row->media_id

2、上傳的臨時多媒體檔案有格式和大小限制,如下:

  • 圖片(image): 1M,支援JPG格式
  • 語音(voice):2M,播放長度不超過60s,支援AMR\MP3格式
  • 視訊(video):10MB,支援MP4格式
  • 縮圖(thumb):64KB,支援JPG格式
3、媒體檔案在後臺儲存時間為3天,即3天后media_id失效。

===================================微笑微笑微笑===================================

關注【Smalle】【微信公眾號:smallelife】              微笑             捐贈【Smalle】【微信公眾號:smallelife】

關注就有豪禮相送哦,羨慕原始碼、羨慕工具、羨慕文件應有盡有      微笑       你的掃碼便是我前進的動力,羨慕掃碼、羨慕掃碼、羨慕掃碼

===================================微笑微笑微笑===================================