公众号经常有需要用到一些临时性的多媒体素材的场景,例如在使用接口特别是发送消息时,对多媒体文件、多媒体消息的获取和调用等操作,是通过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
-
- define("AppID","你的AppID");
- define("AppSecret", "你的AppSecret");
-
-
-
- $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);
- echo '此素材的唯一标识符media_id为:'.$row->media_id;
-
-
- 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();
- }
- }
-
-
- function curl_post($url, $data = null)
- {
-
- $curl = curl_init();
-
- 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);
-
- $output = curl_exec($curl);
-
- curl_close($curl);
- return $output;
- }
-
- ?>
运行示例结果
在浏览器中直接访问index.PHP,便会输出上传文件的media_id