xy-shanghai-20260721-171915/xy-shanghai/refine.md

281 lines
8.8 KiB
Markdown
Raw 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.

文档类型:混合型(调用文档+对接文档)
---
## 接口列表
### 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 字段) |
(文档中未列出其他错误码,仅此两个)