|
|
|
@ -1,61 +1,40 @@
|
|
|
|
|
<?php
|
|
|
|
|
namespace LaneWeChat\Core;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 多媒体文件上传与下载管理类
|
|
|
|
|
* 该类提供将图片、语音、视频等文件上传到微信服务器的功能,以及从微信服务器下载多媒体文件的功能。
|
|
|
|
|
* Auth类用于与微信公众平台进行交互。
|
|
|
|
|
* 该类提供了一个方法来获取微信服务器的IP列表,通常用于服务器白名单的配置。
|
|
|
|
|
* 白名单配置可以帮助确保微信服务器能够正常与当前服务器进行通信。
|
|
|
|
|
*
|
|
|
|
|
* 创建者:lixuan-it@360.cn
|
|
|
|
|
* 用户名:lane
|
|
|
|
|
* 日期:15/4/29
|
|
|
|
|
* 时间:上午10:51
|
|
|
|
|
* 邮箱:lixuan868686@163.com
|
|
|
|
|
* 网站:http://www.lanecn.com
|
|
|
|
|
*/
|
|
|
|
|
class Media {
|
|
|
|
|
class Auth {
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 上传多媒体文件到微信服务器
|
|
|
|
|
* 此方法允许上传图片、语音、视频等文件到微信服务器,并返回对应的media_id,用于后续获取多媒体文件。
|
|
|
|
|
* 上传的文件有格式和大小限制,具体如下:
|
|
|
|
|
* 图片(image): 1M,支持JPG格式
|
|
|
|
|
* 语音(voice):2M,播放长度不超过60秒,支持AMR/MP3格式
|
|
|
|
|
* 视频(video):10MB,支持MP4格式
|
|
|
|
|
* 缩略图(thumb):64KB,支持JPG格式
|
|
|
|
|
* 媒体文件在微信服务器的保存时间为3天,之后media_id将失效。
|
|
|
|
|
*
|
|
|
|
|
* @param string $filename 要上传的文件的绝对路径
|
|
|
|
|
* @param string $type 媒体文件类型,可以是图片(image)、语音(voice)、视频(video)和缩略图(thumb)
|
|
|
|
|
* @return array 上传成功后返回包含media_id和其他信息的数组
|
|
|
|
|
* 获取微信服务器IP列表
|
|
|
|
|
*
|
|
|
|
|
* 该方法请求微信公众平台的API接口,获取微信服务器的IP地址列表。
|
|
|
|
|
* 获取到的IP地址列表可以用于设置服务器的白名单,以保证微信服务器能够正常访问当前服务器。
|
|
|
|
|
*
|
|
|
|
|
* @return mixed 返回微信服务器的IP列表,通常为JSON格式的数据。
|
|
|
|
|
*/
|
|
|
|
|
public static function upload($filename, $type) {
|
|
|
|
|
// 获取微信公众号的ACCESS_TOKEN
|
|
|
|
|
$accessToken = AccessToken::getAccessToken();
|
|
|
|
|
// 构造多媒体文件上传的URL
|
|
|
|
|
$queryUrl = 'http://file.api.weixin.qq.com/cgi-bin/media/upload?access_token=' . $accessToken . '&type=' . $type;
|
|
|
|
|
// 准备上传的数据,使用'@'符号指定文件路径
|
|
|
|
|
$data = array('media' => '@' . $filename);
|
|
|
|
|
// 发起POST请求,上传文件
|
|
|
|
|
return Curl::callWebServer($queryUrl, $data, 'POST', 1, 0);
|
|
|
|
|
}
|
|
|
|
|
public static function getWeChatIPList(){
|
|
|
|
|
// 获取ACCESS_TOKEN:调用AccessToken类中的getAccessToken方法来获取有效的ACCESS_TOKEN。
|
|
|
|
|
// ACCESS_TOKEN是调用微信API时必需的授权令牌,必须在每次请求时附带。
|
|
|
|
|
$accessToken = AccessToken::getAccessToken();
|
|
|
|
|
|
|
|
|
|
// 构造请求微信API的URL,拼接获取到的ACCESS_TOKEN。
|
|
|
|
|
// API地址为 'https://api.weixin.qq.com/cgi-bin/getcallbackip?access_token='
|
|
|
|
|
// 通过此URL可以获取到微信服务器的IP列表。
|
|
|
|
|
$url = 'https://api.weixin.qq.com/cgi-bin/getcallbackip?access_token=' . $accessToken;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 从微信服务器下载多媒体文件
|
|
|
|
|
* 此方法根据提供的media_id从微信服务器下载对应的多媒体文件。
|
|
|
|
|
*
|
|
|
|
|
* @param string $mediaId 微信服务器上的多媒体文件ID
|
|
|
|
|
* @return mixed 下载的文件内容或下载失败的错误信息
|
|
|
|
|
*
|
|
|
|
|
* 下载多媒体文件时的HTTP头信息示例:
|
|
|
|
|
* HTTP/1.1 200 OK
|
|
|
|
|
* Connection: close
|
|
|
|
|
* Content-Type: image/jpeg
|
|
|
|
|
* Content-disposition: attachment; filename="MEDIA_ID.jpg"
|
|
|
|
|
* Date: Sun, 06 Jan 2013 10:20:18 GMT
|
|
|
|
|
* Cache-Control: no-cache, must-revalidate
|
|
|
|
|
* Content-Length: 339721
|
|
|
|
|
*
|
|
|
|
|
* 使用curl命令下载多媒体文件的示例:
|
|
|
|
|
* curl -G "http://file.api.weixin.qq.com/cgi-bin/media/get?access_token=ACCESS_TOKEN&media_id=MEDIA_ID"
|
|
|
|
|
*/
|
|
|
|
|
public static function download($mediaId) {
|
|
|
|
|
// 获取微信公众号的ACCESS_TOKEN
|
|
|
|
|
$accessToken = AccessToken::getAccessToken();
|
|
|
|
|
// 构造多媒体文件下载的URL
|
|
|
|
|
$queryUrl = 'http://file.api.weixin.qq.com/cgi-bin/media/get?access_token=' . $accessToken . '&media_id=' . $mediaId;
|
|
|
|
|
// 发起GET请求,下载文件
|
|
|
|
|
return Curl::callWebServer($queryUrl, '', 'GET', 0);
|
|
|
|
|
// 使用Curl类的callWebServer方法发起GET请求,向微信API请求IP地址列表。
|
|
|
|
|
// 'callWebServer' 方法会通过cURL发起HTTP请求,返回微信API的响应数据。
|
|
|
|
|
// 返回的数据通常是一个包含微信服务器IP地址的JSON格式字符串。
|
|
|
|
|
return Curl::callWebServer($url, '', 'GET');
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|