Files
pay-bridge/docs/design/002-heepay-customer-file-upload.md
2026-03-13 15:51:59 +08:00

136 lines
5.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 002 - 汇元商户文件上传 API
**接口名称:** `customer.file.upload`
**更新时间:** 2025-11-28
**状态:** 已实现
---
## 调用地址
| 环境 | 地址 |
|------|------|
| 生产 | `https://openapi.heepay.com/v1/customer/gateway` |
| 沙箱 | `http://openapi.heepaydev.com/v1/customer/gateway` |
与入网接口共用同一进件网关(`channels.heepay.merchant_url`)。
---
## 接口说明
上传图片/视频/文件,返回 `file_id`供入网接口001中所有 `*_img` 字段使用。**必须先上传文件获取 `file_id`,再调用入网接口。**
---
## 请求业务参数biz_content
| 字段 | 名称 | 必填 | 类型 | 说明 |
|------|------|------|------|------|
| `file_content` | 文件内容 | 是 | ByteData | 文件二进制内容Base64 编码后传入) |
| `file_sign` | 文件内容签名 | 是 | String | 文件内容的 MD5 值,用于校验文件完整性 |
| `file_media_type` | 文件类型 | 是 | String | 参照【文件类型编码】列表(待补充) |
---
## 响应业务参数
| 字段 | 名称 | 必填 | 类型 | 说明 |
|------|------|------|------|------|
| `file_id` | 文件 ID | 否 | String | 上传成功后返回,传入入网接口的 `*_img` 字段 |
---
## 支持的文件格式
| 类型 | 格式 |
|------|------|
| 图片 | `png` / `bmp` / `gif` / `jpg` / `jpeg` |
| 视频 | `mp4` / `flv` / `avi` / `rm` / `rmvb` / `wav` |
| 文件 | `zip` / `rar` / `pdf` |
---
## 业务错误码
| 错误码 | 说明 | 处理建议 |
|--------|------|---------|
| `invalid_parameter_file_type_not_correct` | 文件类型不正确 | 检查格式是否在支持列表内 |
| `invalid_parameter_file_size_too_big` | 文件过大 | 压缩后重新上传 |
| `invalid_parameter_file_sign_can_not_null` | 文件签名不能为空 | 传入 `file_sign`MD5 |
| `invalid_parameter_file_sign_err` | 文件签名异常 | 确认文件是否损坏,重新计算 MD5 |
| `invalid_parameter_file_has_err` | file 有误,疑似被修改 | 检查文件完整性 |
| `invalid_parameter_file_need_ext` | 文件名需带扩展名 | 上传时文件名需包含扩展名 |
| `unknown_exception` | 系统未知问题 | 参考返回描述 |
| `unknown_error_gateway` | 网关系统不可用 | 稍后重试 |
| `invalid_auth` | 授权权限不足 | 检查签名/权限 |
| `missing_parameter` | 缺少参数 | 补充必填参数 |
| `invalid_parameter` | 无效参数 | 检查参数格式 |
| `invalid_request` | 无效请求 | 参考返回详细信息 |
| `biz_failure` | 业务错误 | 参照具体错误提示 |
| `service_not_exists` | 服务不存在 | 确认服务是否开通 |
| `service_time_out` | 系统繁忙 | 稍后重试 |
| `channel_error` | 通道系统异常 | 用相同参数重新调用 |
---
## 实现要点
1. **`file_content` 编码方式**ByteData 类型,实现时需将文件二进制内容 Base64 编码后放入 `biz_content` JSON 字符串中
2. **`file_sign` 计算**:对原始文件二进制内容计算 MD5得到 32 位小写十六进制字符串
3. **文件名带扩展名**:请求中需要携带文件名(含扩展名),具体字段名待联调确认
4. **调用顺序**:文件上传 → 获取 `file_id` → 入网申请001`file_id` 需持久化存储备用
5. **复用性**:同一文件可上传一次,`file_id` 在多个字段中复用(如法人正反面同一人时)
---
## 文件类型编码file_media_type
| 文件名称 | 类型值 |
|---------|--------|
| 营业执照 | `01` |
| 开户许可证/开户证明照 | `02` |
| 门头照 | `03` |
| 店内场景照 | `04` |
| 收银台照 | `05` |
| 法人身份证正面照 | `06` |
| 法人身份证反面照 | `07` |
| 联系人身份证正面照 | `08` |
| 联系人身份证反面照 | `09` |
| 公司大楼照 | `10` |
| 公司前台照 | `11` |
| 结算银行卡正面照 | `12` |
| 结算银行卡反面照 | `13` |
| 结算人手持银行卡正面照 | `14` |
| 经营者身份证正面照 | `15` |
| 经营者身份证反面照 | `16` |
| 经营者手持身份证正面照 | `17` |
| 经营者手持银行卡正面照 | `18` |
| 其它图片1 | `19` |
| 其它图片2 | `20` |
| 开户意愿视频 | `50` |
| 分账协议 | `52` |
> 对照入网接口001字段与文件类型的映射关系
>
> | 入网字段 | file_media_type |
> |---------|----------------|
> | `subject_info.cert_img`(营业执照) | `01` |
> | `settlement_info.open_account_img`(开户许可证) | `02` |
> | `scene_info.shop_brand_img`(门头照/公司大楼照) | `03` 或 `10` |
> | `scene_info.customer_service_img`(收银台照/公司前台照) | `05` 或 `11` |
> | `scene_info.work_env_img`(店内场景照) | `04` |
> | `identity_info.cert_front_img`(法人证件正面) | `06` |
> | `identity_info.cert_back_img`(法人证件反面) | `07` |
> | `contact_info.cert_front_img`(联系人证件正面) | `08` |
> | `contact_info.cert_back_img`(联系人证件反面) | `09` |
> | `addition_info.open_merch_video`(开户意愿视频) | `50` |
> | `addition_info.sharing_protocol_img`(分账协议) | `52` |
---
## 待补充
- [ ] 文件大小限制(图片/视频各自上限)
- [ ] 文件名字段名称确认(`file_name`