添加文件: xy-shanghai/refine.md

This commit is contained in:
renzhiyuan 2026-07-21 17:23:52 +08:00
parent f970dbfbc0
commit 1d95dba971
1 changed files with 281 additions and 0 deletions

281
xy-shanghai/refine.md Normal file
View File

@ -0,0 +1,281 @@
文档类型:混合型(调用文档+对接文档)
---
## 接口列表
### 1. 卡券/直充权益下单接口
- **接口名称**:卡券/直充权益下单接口
- **接口描述**:适用于卡密,直充商品下单
- **请求方式**POST
- **报文格式**`Content-Type: application/json`
- **接口地址**:需双方约定(测试/生产环境)
#### 请求参数
**请求头(通用请求参数)**
| 参数名 | 必填 | 类型 | 描述 | 取值说明 |
|--------|------|------|------|----------|
| timestamp | 是 | String | 时间戳 | 毫秒级时间戳 |
| sign | 是 | String | 签名 | 见签名规则 |
**请求体**
| 参数名 | 必填 | 类型 | 描述 | 取值说明 |
|--------|------|------|------|----------|
| encryptedData | 是 | String | 加密数据 | json格式业务数据进行SM4加密 |
**业务数据参数(加密前)**
| 参数名 | 必填 | 类型 | 描述 | 取值说明 |
|--------|------|------|------|----------|
| actCode | 是 | String | 活动code | 可约定为各供应商的项目编号和密钥的拼接加密字符串 |
| goodsCode | 是 | String | 商品code | 供应商商品编号 |
| actOrderNum | 是 | String | 活动方订单号 | 唯一,行内活动订单号 |
| account | 否 | String | 充值账号 | |
| callbackUrl | 否 | String | 回调地址 | |
**请求示例(加密前业务数据)**
```json
{
"actCode": "ACT001",
"goodsCode": "123456",
"actOrderNum": "00001",
"account": "19912345678",
"callbackUrl": "https://xxx/notice"
}
```
#### 响应参数
**公共响应参数**
| 参数名 | 必填 | 类型 | 描述 | 说明 |
|--------|------|------|------|------|
| code | 是 | int | 返回状态编码 | 0成功 -1失败 |
| msg | 是 | String | 返回错误信息 | |
| data | 否 | Object | 返回数据 | JSON格式业务数据进行SM4加密 |
**响应参数data解密后**
| 参数名 | 必填 | 类型 | 描述 | 说明 |
|--------|------|------|------|------|
| orderNo | 是 | String | 权益订单号 | 唯一,供应商订单号 |
| couponNo | 否 | String | 卡号 | 卡券/短链类商品返回 |
| couponCode | 否 | String | 卡密 | 卡券类商品返回 |
| status | 是 | Integer | 状态 | -1发放中 0成功 1失败 2已核销 3已过期 |
| expireTime | 否 | String | 有效期 | 卡券/短链类商品返回格式yyyy-MM-dd HH:mm:SS |
**响应示例data解密后**
```json
{
"code": 0,
"msg": "请求成功",
"data": "{\"orderNo\":\"HM17575805323790000127073398f3772c00\",\"expireTime\":\"2025-09-12 00:00:00\",\"couponNo\":\"27073398f3772c00\",\"couponCode\":\"27073398f3772c00\",\"status\":1}"
}
```
---
### 2. 卡券/直充/微信立减金订单查询接口
- **接口名称**:卡券/直充/微信立减金订单查询接口
- **接口描述**:行内通过供应商订单号查询订单状态接口
- **请求方式**POST
- **报文格式**`Content-Type: application/json`
- **接口地址**:需双方约定(测试/生产环境)
#### 请求参数
**请求头(通用请求参数)**同接口1
**请求体**同接口1
**业务数据参数(加密前)**
| 参数名 | 必填 | 类型 | 描述 | 取值说明 |
|--------|------|------|------|----------|
| actCode | 是 | String | 活动code | 可约定为各供应商的项目编号和密钥的拼接加密字符串 |
| orderNo | 是 | String | 供应商订单号 | |
**请求示例(加密前业务数据)**
```json
{
"actCode": "FBG6vdYqGE4mGX7EH/woEg==",
"orderNo": "HM1757046717684000102707339840b23222"
}
```
#### 响应参数
**公共响应参数**同接口1
**响应参数data解密后**
| 参数名 | 必填 | 类型 | 描述 | 说明 |
|--------|------|------|------|------|
| orderNo | 是 | String | 权益订单号 | 唯一,供应商订单号 |
| status | 是 | Integer | 订单状态 | -1发放中 0成功 1失败 2已核销 3已过期 |
| account | 否 | String | 充值账号 | 直充类型时存在 |
| cardInfo | 否 | Object | 卡券信息 | 卡券/短链类型时存在 |
| - couponNo | 是 | String | 卡号/短链 | |
| - couponCode | 是 | String | 卡密 | |
| - expireTime | 是 | String | 过期时间 | 格式yyyy-MM-dd HH:mm:ss |
| couponId | 是 | String | 优惠id | 微信立减金类型时存在 |
**响应示例data解密后**
```json
{
"code": 0,
"msg": "请求成功",
"data": "{\"orderNo\":\"HM1757046717684000102707339840b23222\",\"cardInfo\":\"{\\\"couponNo\\\":\\\"11111\\\",\\\"couponCode\\\":\\\"12334\\\",\\\"expireTime\\\":\\\"2029-03-09 00:00:00\\\"}\",\"status\":3}"
}
```
---
### 3. 微信立减金订单充值接口
- **接口名称**:微信立减金订单充值接口
- **请求方式**POST
- **报文格式**`Content-Type: application/json`
- **接口地址**:需双方约定(测试/生产环境)
#### 请求参数
**请求头(通用请求参数)**同接口1
**请求体**同接口1
**业务数据参数(加密前)**
| 参数名 | 必填 | 类型 | 描述 | 取值说明 |
|--------|------|------|------|----------|
| actCode | 是 | String | 活动code | 可约定为各供应商的项目编号和密钥的拼接加密字符串 |
| orderNo | 是 | String | 供应商订单号 | |
| goodsCode | 是 | String | 商品code | 供应商商品编号 |
| actOrderNum | 是 | String | 活动方订单号 | 唯一,行内订单号 |
| appId | 是 | String | 公众账号ID | |
| openId | 是 | String | 微信用户标识 | 需要与 appId 绑定(同一个 appId 下的 openId |
| callbackUrl | 否 | String | 回调地址 | |
**请求示例(加密前业务数据)**
```json
{
"actCode": "FBG6vdYqGE4mGX7EH/woEg==",
"goodsCode": "0001",
"actOrderNum": "0001",
"openId": "0001",
"appId": "00001"
}
```
#### 响应参数
**公共响应参数**同接口1
**响应参数data解密后**
| 参数名 | 必填 | 类型 | 描述 | 说明 |
|--------|------|------|------|------|
| orderNo | 是 | String | 权益订单号 | 唯一,供应商订单号 |
| status | 是 | Integer | 订单状态 | -1发放中 0成功 1失败 2已核销 3已过期 |
| couponId | 是 | String | 微信优惠id | 微信该批次立减金的优惠id |
**响应示例data解密后**
```json
{
"code": 0,
"msg": "请求成功",
"data": "{\"orderNo\":\"0001\",\"couponId\":\"123456\",\"status\":1}"
}
```
```json
{
"code": -1,
"msg": "库存不足",
"data": null
}
```
---
### 4. 卡券/直充/微信立减金充值结果通知接口(回调)
- **接口名称**:卡券/直充/微信立减金充值结果通知接口
- **接口路径**:行内提供回调地址(由行方提供,供应商调用)
- **请求方式**POST
- **报文格式**`Content-Type: application/json`
#### 请求参数
**请求头(通用请求参数)**同接口1
**请求体**同接口1
**业务数据参数(加密前)**
| 参数名 | 必填 | 类型 | 描述 | 取值说明 |
|--------|------|------|------|----------|
| orderNo | 是 | String | 供应商订单号 | 唯一,供应商订单号 |
| actOrderNum | 是 | String | 活动方订单号 | 唯一,行内订单号 |
| status | 是 | Integer | 订单状态 | -1发放中 0成功 1失败 2已核销 3已过期 |
| account | 否 | String | 直充账号 | 直充类型商品时存在 |
| cardInfo | 否 | Object | 卡券信息 | 卡券/短链类型商品时存在 |
| - couponNo | 是 | String | 卡号/短链 | |
| - couponCode | 是 | String | 卡密 | 卡券类型商品时存在 |
| - expireTime | 是 | String | 卡券过期时间 | |
| couponId | 否 | String | 微信优惠id | 微信立减金类型商品时存在 |
**请求示例(加密前业务数据)**
```json
{
"orderNo": "HM202509291010001",
"actOrderNum": "XY2025092910100001",
"status": 3,
"account": "19912345678"
}
```
#### 响应参数
| 状态码 | 返回内容 | 说明 |
|--------|----------|------|
| 200 | ok | 接收成功,系统认为回调已处理成功,不会重试 |
| 其它 | 任意内容 | 系统认为接收失败将按重试策略重试最多3次 |
---
## 认证/加密/签名
### 需双方约定的参数
- SM3 salt盐值
- SM4 key密钥
- 供应商侧测试及生产环境的ip/域名和接口地址
- 行方回调通知接口地址
### 签名规则
- 签名内容:`timestamp + encryptedData` 字符串拼接
- 签名算法使用SM3盐值加密SM3 with salt
- 签名示例Java Hutool
```java
import cn.hutool.crypto.SmUtil;
String sign = SmUtil.sm3WithSalt(sm3Salt.getBytes()).digestHex(timestamp + encryptedData);
```
### 数据加密
- 业务数据JSON格式使用SM4加密得到 `encryptedData` 字段
- 响应中的 `data` 字段也是SM4加密的JSON字符串需解密后使用
---
## 错误码
| code | 含义 |
|------|------|
| 0 | 成功 |
| -1 | 失败(具体错误信息见 msg 字段) |
(文档中未列出其他错误码,仅此两个)