微信公众平台开发 上传素材

转载 2016年08月29日 21:36:57

微信公众账号在回复图片、语音、视频的时候,将使用media_id来调用相关文件,很多朋友咨询这个如何开发实现。本文将介绍在微信公众平台开发过程中,如何上传下载多媒体文件。

一、上传多媒体文件

公众号可调用本接口来上传图片、语音、视频等文件到微信服务器,上传后服务器会返回对应的media_id,公众号此后可根据该media_id来获取多媒体。请注意,media_id是可复用的,调用该接口需http协议。

通常,文件上传是通过html表单进行的,但 通过CURL可以不经过浏览器,直接在服务器端进行表单的POST提交,完成文件上传功能。

需要注意的是:文件名必须是 完整绝对路径 ,另外需要 绝对路径前加上“@” 以示区分。

在Windows服务器上,格式示例为:”@F:\israel\upload\winter.jpg”,而在Linux服务器上,格式示例为:”@home/israel/upload/winter.jpg”。

http请求方式: POST/FORM

http://file.api.weixin.qq.com/cgi-bin/media/upload?access_token=ACCESS_TOKEN&type=TYPE

参数说明

参数

是否必须

说明

access_token

调用接口凭证

type

媒体文件类型,分别有图片(image)、语音(voice)、视频(video)和缩略图(thumb)

media

form-data中媒体文件标识,有filename、filelength、content-type等信息

上传图片

//上传图片
$type = "image";
$filepath = dirname(__FILE__)."\winter.jpg";
$filedata = array("file1"  => "@".$filepath);
$url = "http://file.api.weixin.qq.com/cgi-bin/media/upload?access_token=$access_token&type=$type";
$result = https_request($url, $filedata);
var_dump($result);

function https_request($url, $data = null)
{
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
    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;
}

返回结果

{
    "type": "image",
    "media_id": "QQ9nj-7ctrqA8t3WKU3dQN24IuFV_516MfZRZNnQ0c-BFVkk66jUkPXF49QE9L1l",
    "created_at": 1389793969
}

上传语音

//上传语音
$type = "voice";
$filepath = dirname(__FILE__)."\invite.mp3";
$filedata = array("file1"  => "@".$filepath);
$url = "http://file.api.weixin.qq.com/cgi-bin/media/upload?access_token=$access_token&type=$type";
$result = https_request($url, $filedata);
var_dump($result);

返回结果

{
    "type": "voice",
    "media_id": "5Idx79V9E3XfBCz_A50gr1a1_klgPpJnb_eq73yz0bn-prhIsNlwI3n6jQgshmWk",
    "created_at": 1389794760
}

上传视频

//上传视频
$type = "video";
$filepath = dirname(__FILE__)."\bbb.mp4";
$filedata = array("file1"  => "@".$filepath);
$url = "http://file.api.weixin.qq.com/cgi-bin/media/upload?access_token=$access_token&type=$type";
$result = https_request($url, $filedata);
var_dump($result);

返回结果

{
    "type": "video",
    "media_id": "Jm-Wq0nXtA_oN1qNydQRP03dCsB0R2t5gCHDM3QNkBmMRE1WBaorVJNQTBRHvK9-",
    "created_at": 1389794768
}

上传缩略图

//上传缩略图
$type = "thumb";
$filepath = dirname(__FILE__)."\qrcode.jpg";
$filedata = array("file1"  => "@".$filepath);
$url = "http://file.api.weixin.qq.com/cgi-bin/media/upload?access_token=$access_token&type=$type";
$result = https_request($url, $filedata);
var_dump($result);

返回结果

{
    "type": "thumb",
    "thumb_media_id": "2RhP0caRKHVOmZO5AKelHkK--vqPPwgUaRp5-WE63dvmmPRWiYVKgvNblIp_gv79",
    "created_at": 1389794771
}

参数说明

参数

描述

type

媒体文件类型,分别有图片(image)、语音(voice)、视频(video)和缩略图(thumb,主要用于视频与音乐格式的缩略图)

media_id

媒体文件上传后,获取时的唯一标识

created_at

媒体文件上传时间戳

注意事项

上传的多媒体文件有格式和大小限制,如下:

?  图片(image): 128K,支持JPG格式

?  语音(voice):256K,播放长度不超过60s,支持AMR\MP3格式

?  视频(video):1MB,支持MP4格式

?  缩略图(thumb):64KB,支持JPG格式

媒体文件在后台保存时间为3天,即3天后media_id失效。 对于需要重复使用的多媒体文件,可以每3天循环上传一次,更新media_id。

二、下载多媒体文件

公众号可调用本接口来获取多媒体文件。请注意,视频文件不支持下载,调用该接口需http协议。

下载文件使用获取图片数据,写入新文件的方法。

http请求方式: GET

http://file.api.weixin.qq.com/cgi-bin/media/get?access_token=ACCESS_TOKEN&media_id=MEDIA_ID

参数说明

参数

是否必须

说明

access_token

调用接口凭证

media_id

媒体文件ID

下载图片

代码实现

$access_token = "";
 
//下载图片
$mediaid = "QQ9nj-7ctrqA8t3WKU3dQN24IuFV_516MfZRZNnQ0c-BFVkk66jUkPXF49QE9L1l";
$url = "http://file.api.weixin.qq.com/cgi-bin/media/get?access_token=$access_token&media_id=$mediaid";
$fileInfo = downloadWeixinFile($url);
$filename = "down_image.jpg";
saveWeixinFile($filename, $fileInfo["body"]);
 
function downloadWeixinFile($url)
{
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_HEADER, 0);    
    curl_setopt($ch, CURLOPT_NOBODY, 0);    //只取body头
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    $package = curl_exec($ch);
    $httpinfo = curl_getinfo($ch);
    curl_close($ch);
    $imageAll = array_merge(array('header' => $httpinfo), array('body' => $package)); 
    return $imageAll;
}
 
function saveWeixinFile($filename, $filecontent)
{
    $local_file = fopen($filename, 'w');
    if (false !== $local_file){
        if (false !== fwrite($local_file, $filecontent)) {
            fclose($local_file);
        }
    }
}

返回HTTP头示例如下

{
    "url": "http://file.api.weixin.qq.com/cgi-bin/media/get?access_token=My4oqLEyFVrgFF-XOZagdvbTt9XywYjGwMg_GxkPwql7-f0BpnvXFCOKBUyAf0agmZfMChW5ECSyTAgAoaoU2WMyj7aVHmB17ce4HzLRZ3XFTbm2vpKt_9gYA29xrwIKpnvH-BYmNFSddt7re5ZrIg&media_id=QQ9nj-7ctrqA8t3WKU3dQN24IuFV_516MfZRZNnQ0c-BFVkk66jUkPXF49QE9L1l",
    "content_type": "image/jpeg",
    "http_code": 200,
    "header_size": 308,
    "request_size": 316,
    "filetime": -1,
    "ssl_verify_result": 0,
    "redirect_count": 0,
    "total_time": 1.36,
    "namelookup_time": 1.016,
    "connect_time": 1.078,
    "pretransfer_time": 1.078,
    "size_upload": 0,
    "size_download": 105542,
    "speed_download": 77604,
    "speed_upload": 0,
    "download_content_length": 105542,
    "upload_content_length": 0,
    "starttransfer_time": 1.141,
    "redirect_time": 0
}

下载语音

代码实现

//下载语音
$mediaid = "5Idx79V9E3XfBCz_A50gr1a1_klgPpJnb_eq73yz0bn-prhIsNlwI3n6jQgshmWk";
$url = "http://file.api.weixin.qq.com/cgi-bin/media/get?access_token=$access_token&media_id=$mediaid";
$fileInfo = downloadWeixinFile($url);
 
$filename = "down_voice.mp3";
saveWeixinFile($filename, $fileInfo["body"]);

返回HTTP头如下

{
    "url": "http://file.api.weixin.qq.com/cgi-bin/media/get?access_token=My4oqLEyFVrgFF-XOZagdvbTt9XywYjGwMg_GxkPwql7-f0BpnvXFCOKBUyAf0agmZfMChW5ECSyTAgAoaoU2WMyj7aVHmB17ce4HzLRZ3XFTbm2vpKt_9gYA29xrwIKpnvH-BYmNFSddt7re5ZrIg&media_id=5Idx79V9E3XfBCz_A50gr1a1_klgPpJnb_eq73yz0bn-prhIsNlwI3n6jQgshmWk",
    "content_type": "audio/amr",
    "http_code": 200,
    "header_size": 306,
    "request_size": 316,
    "filetime": -1,
    "ssl_verify_result": 0,
    "redirect_count": 0,
    "total_time": 0.125,
    "namelookup_time": 0.031,
    "connect_time": 0.063,
    "pretransfer_time": 0.063,
    "size_upload": 0,
    "size_download": 10470,
    "speed_download": 83760,
    "speed_upload": 0,
    "download_content_length": 10470,
    "upload_content_length": 0,
    "starttransfer_time": 0.125,
    "redirect_time": 0
}

可以看出,MP3的语音格式被压缩成AMR格式了。

下载缩略图

实现代码

//下载缩略图
$mediaid = "2RhP0caRKHVOmZO5AKelHkK--vqPPwgUaRp5-WE63dvmmPRWiYVKgvNblIp_gv79";
$url = "http://file.api.weixin.qq.com/cgi-bin/media/get?access_token=$access_token&media_id=$mediaid";
$fileInfo = downloadWeixinFile($url);
 
$filename = "down_thumb.jpg";
saveWeixinFile($filename, $fileInfo["body"]);

返回HTTP头如下

{
    "url": "http://file.api.weixin.qq.com/cgi-bin/media/get?access_token=My4oqLEyFVrgFF-XOZagdvbTt9XywYjGwMg_GxkPwql7-f0BpnvXFCOKBUyAf0agmZfMChW5ECSyTAgAoaoU2WMyj7aVHmB17ce4HzLRZ3XFTbm2vpKt_9gYA29xrwIKpnvH-BYmNFSddt7re5ZrIg&media_id=2RhP0caRKHVOmZO5AKelHkK--vqPPwgUaRp5-WE63dvmmPRWiYVKgvNblIp_gv79",
    "content_type": "image/jpeg",
    "http_code": 200,
    "header_size": 306,
    "request_size": 316,
    "filetime": -1,
    "ssl_verify_result": 0,
    "redirect_count": 0,
    "total_time": 0.094,
    "namelookup_time": 0,
    "connect_time": 0.047,
    "pretransfer_time": 0.047,
    "size_upload": 0,
    "size_download": 6057,
    "speed_download": 64436,
    "speed_upload": 0,
    "download_content_length": 6057,
    "upload_content_length": 0,
    "starttransfer_time": 0.094,
    "redirect_time": 0
}

至于回复相应的消息,就是利用消息接口或者客服接口,构造成相应的消息就行了,和构造文本,图文消息的方法是一样的。

微信公众号开发中的坑(一)

微信公众号被动回复消息接口-回复音乐消息 ThumbMediaId这个属性是无效的。而且在发送的数据包中一定不能带上这个属性,否则,就会出现“公众号暂时无法提供服务”的错误。删掉这个属性后一切正常。...
  • kyq0417
  • kyq0417
  • 2016年12月30日 09:28
  • 388

微信公众号开发---微信接口素材管理

素材管理 接口: /* 临时素材几点注意:   1.对于临时素材,每个素材(media_id)会在开发者上传或粉丝发送到微信服务器3天后自动删除(所以用户发送给开发者的素材,若开发者需要,应尽快下载到...
  • yuexianchang
  • yuexianchang
  • 2016年09月04日 18:43
  • 5715

微信公众号多媒体文件的处理

微信公众号页面对于图片,视频,音频处理的个人心得!
  • hjf_1291030386
  • hjf_1291030386
  • 2017年06月20日 23:47
  • 741

Java 微信公众号上传永久素材的方法

/**   * 上传其他永久素材(图片素材的上限为5000,其他类型为1000)   * @param appid   * @param secret   * @return   * @throws ...
  • u014525155
  • u014525155
  • 2016年08月08日 17:01
  • 655

微信公众号开发上传视频素材

  • 2015年09月17日 20:50
  • 1.73MB
  • 下载

Java 微信公众号上传永久素材的方法

/** * 上传其他永久素材(图片素材的上限为5000,其他类型为1000) * * @return * @throws Exception */ public static JSONObj...
  • u013791374
  • u013791374
  • 2016年11月21日 12:56
  • 3388

微信公众平台开发【素材管理】上传临时素材

  • 2015年08月23日 11:33
  • 18KB
  • 下载

微信公众平台开发【素材管理】上传临时素材

公众号经常有需要用到一些临时性的多媒体素材的场景,例如在使用接口特别是发送消息时,对多媒体文件、多媒体消息的获取和调用等操作,是通过media_id来进行的。 接口开放权限:素材管理接口对所有认证的订...
  • oldinaction
  • oldinaction
  • 2015年08月23日 11:24
  • 11772

微信上传永久素材接口开发(一)

最近帮朋友开发一个微信内容管理平台,想要利用这个平台上传图片或者视频资源到微信平台。看了一下微信的开发文档,发现微信对于上传永久素材这个接口,给出的文档太过简略,而且提供的样例也不是代码的方式,只给了...
  • oarsman
  • oarsman
  • 2016年05月30日 15:20
  • 4055

Java 微信公众号上传永久素材的方法

用 Java 实现微信公众号上传永久素材,代码如下: /** * 上传其他永久素材(图片素材的上限为5000,其他类型为1000) * @param appid * @param se...
  • yh88356656
  • yh88356656
  • 2016年02月18日 14:09
  • 13761
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:微信公众平台开发 上传素材
举报原因:
原因补充:

(最多只允许输入30个字)