基础支付
JSAPI支付
APP支付
H5支付
Native支付
小程序支付
付款码支付
合单支付
经营能力
微信支付分(免确认模式)
微信支付分(免确认预授权模式)
微信支付分(需确认模式)
微信支付分(公共API)
微信先享卡
支付即服务
点金计划
行业方案
电商收付通(商户进件)
电商收付通(普通支付)
电商收付通(合单支付)
电商收付通(分账)
电商收付通(补差)
电商收付通(退款)
电商收付通(余额查询)
电商收付通(商户提现)
电商收付通(下载账单)
智慧商圈
营销工具
代金券
商家券
小程序发券插件
H5发券
委托营销
消费卡
图片上传(营销专用)
支付有礼
资金应用
企业付款
分账
连锁品牌分账
风险控制
商户开户意愿确认
消费者投诉
其他能力
清关报关
图片上传
视频上传

视频上传API

最新更新时间:2019.10.23 版本说明

部分微信支付业务指定商户需要使用视频上传 API来上报视频信息,从而获得必传参数的值:视频MediaID 。

接口说明

适用对象:直连商户 服务商 渠道商 电商平台

请求URL::https://api.mch.weixin.qq.com/v3/merchant/media/video_upload

请求主体类型:multipart/form-data

请求方式:POST

接口规则:https://wechatpay-api.gitbook.io/wechatpay-api-v3


path 指该参数需在请求URL传参

query 指该参数需在请求URL传参

body 指该参数需在请求JSON传参


请求参数

参数名 变量 类型[长度限制] 必填 描述
视频文件 file message body 将媒体视频进行二进制转换,得到的媒体视频二进制内容,在请求body中上传此二进制内容。媒体视频只支持avi、wmv、mpeg、mp4、mov、mkv、flv、f4v、m4v、rmvb格式,文件大小不能超过5M。
示例值:pic1
+媒体文件元信息 meta Object body 媒体文件元信息,使用json表示,包含两个对象:filename、sha256。
参数名 变量 类型[长度限制] 必填 描述
文件名称 filename string[1,128] 商户上传的媒体视频的名称,商户自定义,必须以avi、wmv、mpeg、mp4、mov、mkv、flv、f4v、m4v、rmvb为后缀。
示例值:file_test.mp4
文件摘要 sha256 string[1,64] 视频文件的文件摘要,即对视频文件的二进制内容进行sha256计算得到的值。
示例值:hjkahkjsjkfsjk78687dhjahdajhk

各语言请求示例

    
String filePath = "/your/home/hellokitty.avi";
URI uri = new URI("https://api.mch.weixin.qq.com/v3/merchant/media/video_upload");
File file = new File(filePath);

try (FileInputStream ins1 = new FileInputStream(file)) { 
  String sha256 = DigestUtils.sha256Hex(ins1);
  try (InputStream ins2 = new FileInputStream(file)) {
    HttpPost request = new WechatPayUploadHttpPost.Builder(uri)
        .withImage(file.getName(), sha256, ins2)
        .build();
    CloseableHttpResponse response1 = httpClient.execute(request);
  }
}
    
    
// 参考上述指引说明,并引入 `MediaUtil` 正常初始化,无额外条件
use WechatPay\GuzzleMiddleware\Util\MediaUtil;
// 实例化一个媒体文件流,注意文件后缀名需符合接口要求
$media = new MediaUtil('/your/file/path/with.extension');

// 正常使用Guzzle发起API请求
try {
    $resp = $client->request('POST', 'https://api.mch.weixin.qq.com/v3/[merchant/media/video_upload|marketing/favor/media/image-upload]', [
        'body'    => $media->getStream(),
        'headers' => [
            'Accept'       => 'application/json',
            'content-type' => $media->getContentType(),
        ]
    ]);
    // POST 语法糖
    $resp = $client->post('merchant/media/upload', [
        'body'    => $media->getStream(),
        'headers' => [
            'Accept'       => 'application/json',
            'content-type' => $media->getContentType(),
        ]
    ]);
    echo $resp->getStatusCode().' '.$resp->getReasonPhrase()."\n";
    echo $resp->getBody()."\n";
} catch (Exception $e) {
    echo $e->getMessage()."\n";
    if ($e->hasResponse()) {
        echo $e->getResponse()->getStatusCode().' '.$e->getResponse()->getReasonPhrase()."\n";
        echo $e->getResponse()->getBody();
    }
    return;
}
    

JAVA详细请求示例详见:wechatpay-apache-httpclient

PHP详细请求示例详见:wechatpay-guzzle-middleware

返回参数

参数名 变量 类型[长度限制] 必填 描述
媒体文件标识 Id media_id string[1,512] 微信返回的媒体文件标识Id。
示例值:6uqyGjGrCf2GtyXP8bxrbuH9-aAoTjH-rKeSl3Lf4_So6kdkQu4w8BYVP3bzLtvR38lxt4PjtCDXsQpzqge_hQEovHzOhsLleGFQVRF-U_0

返回示例


{
"media_id": "H1ihR9JUtVj-J7CJqBUY5ZOrG_Je75H-rKhTG7FUmg9sxNTbRN54dFiUHnhg
rBQ6EKeHoGcHTJMHn5TAuLVjHUQDBInSWXcIHYXOeRa2OHA"
}
                                

    http://2323weixin.qq.com
                                

请求步骤

视频上传步骤:

1.创建一个POST的方法请求/video_upload URI


例如: POST https://api.mch.weixin.qq.com/v3/merchant/media/video_upload HTTP/1.1


2.将文件的数据添加到请求主体:


2.1 视频文件file参数的获取方式说明:
媒体视频二进制内容,放在请求http的body中。


2.2 媒体文件元信息meta参数的获取方式说明:
媒体文件元信息,使用json表示,包含两个对象:filename、sha256。
● filename参数获取方式说明:
商户上传的媒体视频的名称,商户自定义,必须以avi、wmv、mpeg、mp4、mov、mkv、flv、f4v、m4v、rmvb为后缀。
● sha256参数获取方式说明:
视频文件的文件摘要,即对视频文件的二进制内容进行sha256计算得到的值。


2.3 签名计算说明:
https://wechatpay-api.gitbook.io/wechatpay-api-v3/qian-ming-zhi-nan-1/qian-ming-sheng-cheng
参与签名计算的请求主体为meta的json串:
{ "filename": "filea.mp4", "sha256": "hjkahkjsjkfsjk78687dhjahdajhk" }


待签名串示例:

POST
/v3/merchant/media/video_upload
1566987169           //时间戳
12ced2db6f0193dda91ba86224ea1cd8   //随机数
{"filename":" file_test.mp4 ","sha256":" hjkahkjsjkfsjk78687dhjahdajhk "}

3.添加HTTP头:


Content-Type:multipart/form-data.设置为要上载的对象的MIME媒体类型。
Authorization: WECHATPAY2-SHA256-RSA2048 mchid="1900231671",nonce_str="PCHK6HSOEDTACETP6P3AL7DWPHTBKIAT",
timestamp="1567067659",serial_no="1FB89742D19F2BD30B69948D16DECA0FCB4481EB",
signature="PB6M7+3JL7TSCl5zqD1sdWVypOIEQsD4dgOU+vPiVM6GMRo2qYSWKf8u46i9ZJFhyZTBdZ7SFR+BjDZh689hFgN8LZL+QWTvq3cse/FEUFYyOLN7L/2IZX4GA4cWInuJ2MpOhZRMpm+emrcn42gTMKAPNQ7dBLO7ux6MoSuQp69PW+p1ogmkER68exTVUXYqA5P3vITlWNr++RDy2+ExvB7qVISOKW0vBkxUxN9e7hwUbDwGln170ZXomoO1KpQSbw3f1uWUCx/IlWJhJIun7rUMtVT+kfijNUqcILtSfE4hWKKVaZn9j5CX8M7aKbbDOFy3SvbSJ3WQgRnRbgog5w=="
Content-Type: multipart/form-data;boundary=boundary

4.添加body:


// 以下为body的内容
--boundary  // boundary为商户自定义的一个字符串
Content-Disposition: form-data; name="meta";
Content-Type: application/json
//此处必须有一个空行
{ "filename": "file_test.mp4", "sha256": " hjkahkjsjkfsjk78687dhjahdajhk " }
--boundary
Content-Disposition: form-data; name="file"; filename="file_test.mp4";
Content-Type: video/mp4
//此处必须有一个空行
pic1  //pic1即为媒体视频的二进制内容
--boundary--

说明:请求包体每行结尾都需要包含\r\n(空行也需要)


5.发送请求


POST /v3/merchant/media/video_upload HTTP/1.1
Host: api.mch.weixin.qq.com
Authorization: WECHATPAY2-SHA256-RSA2048 mchid="1900231671",nonce_str="PCHK6HSOEDTACETP6P3AL7DWPHTBKIAT",timestamp="1567067659",serial_no="1FB89742D19F2BD30B69948D16DECA0FCB4481EB",signature="PB6M7+3JL7TSCl5zqD1sdWVypOIEQsD4dgOU+vPiVM6GMRo2qYSWKf8u46i9ZJFhyZTBdZ7SFR+BjDZh689hFgN8LZL+QWTvq3cse/FEUFYyOLN7L/2IZX4GA4cWInuJ2MpOhZRMpm+emrcn42gTMKAPNQ7dBLO7ux6MoSuQp69PW+p1ogmkER68exTVUXYqA5P3vITlWNr++RDy2+ExvB7qVISOKW0vBkxUxN9e7hwUbDwGln170ZXomoO1KpQSbw3f1uWUCx/IlWJhJIun7rUMtVT+kfijNUqcILtSfE4hWKKVaZn9j5CX8M7aKbbDOFy3SvbSJ3WQgRnRbgog5w=="
	Content-Type: multipart/form-data;boundary=boundary

--boundary  
Content-Disposition: form-data; name="meta";
Content-Type: application/json

{ "filename": "file_test.mp4", "sha256": " hjkahkjsjkfsjk78687dhjahdajhk " }
--boundary
Content-Disposition: form-data; name="file"; filename="file_test.mp4";
Content-Type: video/mp4

pic1
--boundary--

错误码公共错误码

状态码 错误码 描述 解决方案
500 SYSTEMERROR 系统错误 系统异常,请使用相同参数稍后重新调用
SYSTEMERROR 文件系统错误,请稍后重试 文件系统异常,请使用相同参数稍后重新调用
400 PARAM_ERROR 视频文件名称不正确,请检查后重新提交 视频文件名称不正确,只支持avi、wmv、mpeg、mp4、mov、mkv、flv、f4v、m4v、rmvb,请使用正确视频文件重新调用
PARAM_ERROR 文件二进制内容不是视频,请检查后重新提交 上传文件二进制内容头部不正确,只支持avi、wmv、mpeg、mp4、mov、mkv、flv、f4v、m4v、rmvb,请使用正确视频文件重新调用
PARAM_ERROR 视频sha256值有误,请检查后重新提交 视频sha256值计算有误,请检查算法,重新计算后提交
PARAM_ERROR 文件大小不能超过5M,请检查后重新提交 商户更换文件或者对视频进行压缩后,重新调用
PARAM_ERROR 文件为空,请检查后重新提交 商户更换文件后,重新调用
429 FREQUENCY_LIMIT_EXCEED 操作过快,请稍后重试 请商户降低每秒调用频率
FREQUENCY_LIMIT_EXCEED 当天上传文件数已达上限 请商户降低每天调用频率
403 NO_AUTH 商户权限异常 请确认是否已经开通相关权限


技术咨询

反馈有奖