1. 创建订单
接口地址:/home/order/create
请求参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| goods_id | Integer | 是 | 商品 ID |
| quantity | Integer | 是 | 购买数量 |
响应示例:
json
{
"code": 1,
"msg": "订单创建成功!",
"data": {
"trade_no": "T1000123456",
"goods_name": "商品名称",
"quantity": 1,
"goods_price_old": "10.000",
"goods_price": "10.000",
"total_price": "10.100",
"create_time": 1700000000,
"fee": "0.100",
"order_auto_close_time": 1800,
"purchase_agreement": "https://example.com/agreement"
}
}批发优惠响应示例(购买数量达到批发优惠条件):
json
{
"code": 1,
"msg": "订单创建成功!",
"data": {
"trade_no": "T1000123456",
"goods_name": "商品名称",
"quantity": 10,
"goods_price_old": "10.000",
"goods_price": "9.000",
"total_price": "90.100",
"create_time": 1700000000,
"fee": "0.100",
"order_auto_close_time": 1800,
"purchase_agreement": "https://example.com/agreement"
}
}字段说明:
trade_no:订单号goods_name:商品名称quantity:购买数量(包含赠送数量)goods_price_old:原始单价goods_price:最终成交单价(批发优惠后的价格)total_price:最终成交总价(包含手续费)create_time:创建时间(时间戳)fee:交易手续费order_auto_close_time:订单自动关闭时间(秒,默认 1800 秒=30 分钟)purchase_agreement:购卡协议链接
说明:
- 创建订单后需要调用
/home/order/doPay接口完成支付 - 订单创建后会自动关闭,关闭时间由
order_auto_close_time决定(默认 30 分钟) - 如果商品设置了批发优惠,购买数量达到条件时会自动应用优惠价格
- 如果商品设置了购买赠送,实际获得的数量会大于购买数量
- 手续费计算:
手续费 = 商品总价 × 手续费率,最小手续费由系统配置决定 - 最终成交总价 = 商品总价 + 手续费
错误响应示例:
json
{
"code": 0,
"msg": "xxx"
}4. 确认支付
接口地址:/home/order/doPay
请求参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| trade_no | String | 是 | 订单号 |
成功响应示例:
json
{
"code": 1,
"msg": "订单已完成"
}错误响应示例:
1. 订单不存在:
json
{
"code": 0,
"msg": "订单不存在"
}2. 余额不足:
json
{
"code": 0,
"msg": "余额不足"
}3. 订单状态异常:
json
{
"code": 0,
"msg": "订单已支付,请勿重复支付!"
}json
{
"code": 0,
"msg": "订单已超时关闭,请重新下单!"
}json
{
"code": 0,
"msg": "订单已退款!"
}4. 商品状态异常:
json
{
"code": 0,
"msg": "商品不存在,无法完成支付"
}json
{
"code": 0,
"msg": "商品已下架,无法完成支付,请联系商家处理"
}5. 商家状态异常:
json
{
"code": 0,
"msg": "商家状态异常,无法完成支付"
}json
{
"code": 0,
"msg": "商家已被冻结,无法完成支付"
}6. 店铺状态异常:
json
{
"code": 0,
"msg": "店铺状态异常,无法完成支付"
}json
{
"code": 0,
"msg": "店铺已被冻结,无法完成支付"
}json
{
"code": 0,
"msg": "店铺已歇业,无法完成支付"
}支付流程说明:
订单验证:
- 检查订单是否存在
- 检查订单状态(0-待支付才能继续)
商品验证:
- 检查商品是否存在
- 检查商品是否上架(status = 1)
商家验证:
- 检查商家账号状态(status = 1)
- 检查商家是否被冻结(is_freeze = 0)
店铺验证:
- 检查店铺状态(shop_status = 1)
- 检查店铺是否被冻结(is_freeze = 0)
- 检查店铺是否歇业(shop_close = 0)
余额验证:
- 检查买家余额是否充足
完成支付:
- 扣除买家余额
- 订单状态变为已支付(status = 1)
- 自动发货(分配卡密)
- 资金进入冻结期
说明:
- 使用用户余额支付订单
- 支付前会进行多重验证,确保交易安全
- 支付成功后订单状态变为已支付,可通过
/home/order/query接口查看卡密 - 支付成功后会自动发货,卡密会立即分配给订单
- 商家收到的款项会进入冻结期,冻结期结束后自动解冻到商家余额
- 如果订单在创建后商品被下架、商家被冻结等,支付时会被拦截
订单状态说明
| 状态值 | 状态名称 | 说明 |
|---|---|---|
| 0 | 待支付 | 订单已创建,等待支付 |
| 1 | 已支付 | 订单已支付成功 |
| 2 | 已关闭 | 订单超时或被取消 |
| 3 | 已退款 | 订单已退款 |
注意事项
- 所有订单相关接口都需要用户登录认证
- 订单列表受用户设置的数据时效性限制
- 创建订单时会检查:
- 商品是否存在且上架
- 商品库存是否充足
- 购买数量是否符合限制
- 商家和店铺状态是否正常
- 支付订单时会再次检查所有状态,确保交易安全
3. 获取订单列表
接口地址:/home/order/list
请求参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| page | Integer | 否 | 页码,默认 1 |
| limit | Integer | 否 | 每页数量,默认 10 |
响应示例:
json
{
"code": 1,
"msg": "获取成功",
"data": {
"list": [
{
"id": 12,
"user_id": 1004,
"buyer_user_id": 1004,
"goods_id": 5,
"trade_no": "Q251123517bde",
"goods_name": "测试222", // 商品名称
"quantity": 11, // 总数量
"goods_price": "0.900", // 商品单价
"total_price": "9.450", // 买家总付款
"fee": "0.450", // 交易手续费
"sendout": 11, // 已发货数量
"status": 3, // 订单状态 0-待支付 1-已支付 2-已关闭 3-已退款
"create_at": "2025-11-23 18:01:53", // 创建时间
"success_at": "2025-11-23 18:02:04", // 支付成功时间
"create_ip": "203.160.68.146" // 下单 IP 地址
}
],
"total": 25
}
}4. 订单查询
接口地址:/home/order/query
请求参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| trade_no | String | 是 | 订单号 |
响应示例:
json
{
"code": 1,
"msg": "获取成功",
"data": {
"order": {
"trade_no": "Q25111620c36f",
"create_at": "2025-11-16 08:01:31",
"total_price": "21.000",
"quantity": 1,
"status": 1
},
"goods": {
"name": "商品2",
"content": "<p>22</p>",
"remark": "<p>2222</p>",
"snapshot": 0
},
"shop": {
"shop_contact": {
"qq": "",
"wechat": "",
"mobile": "",
"site_link": ""
},
"shop_name": "1000测试店铺"
},
"canComplaint": true,
"outCards": "011 90zB0U2Oe7X8T4Q",
"originalCards": "011 90zB0U2Oe7X8T4Q"
}
}多卡密响应示例:
json
{
"code": 1,
"msg": "获取成功",
"data": {
"order": {
"trade_no": "Q25111620c36f",
"create_at": "2025-11-16 08:01:31",
"total_price": "42.000",
"quantity": 2,
"status": 1
},
"goods": {
"name": "商品名称",
"content": "<p>商品详情</p>",
"remark": "<p>购买须知</p>",
"snapshot": 0
},
"shop": {
"shop_contact": {
"qq": "123456",
"wechat": "wxid",
"mobile": "13800138000",
"site_link": "https://example.com"
},
"shop_name": "测试店铺"
},
"canComplaint": true,
"outCards": "卡号:123456 卡密:abcdef\n卡号:789012 卡密:ghijkl",
"originalCards": "123456 abcdef\n789012 ghijkl"
}
}字段说明:
order(订单信息):
trade_no:订单号create_at:创建时间total_price:订单总价quantity:购买数量status:订单状态(0-待支付,1-已支付,2-已关闭,3-已退款)
goods(商品信息):
name:商品名称content:商品详情(HTML 格式)remark:购买须知(HTML 格式)snapshot:快照标识(0-商品正常,1-商品已删除)
shop(店铺信息):
shop_name:店铺名称shop_contact:店铺联系方式qq:QQ 号wechat:微信号mobile:手机号site_link:网站链接
其他字段:
canComplaint:是否可以投诉(布尔值,只有已支付且在解冻期内的订单可投诉)outCards:格式化后的卡密(带前缀,换行符\n分隔多个卡密)originalCards:原始卡密(不带前缀,换行符\n分隔多个卡密)
卡密格式说明:
outCards:根据商品设置显示自定义前缀,如 "卡号:123456 卡密:abcdef"originalCards:纯卡号卡密,如 "123456 abcdef"- 多个卡密使用换行符
\n分隔 - 卡号和卡密之间使用 4 个空格分隔
说明:
- 只能查询当前登录用户的订单
- 查询范围受系统配置的
order_query_limitday限制(默认 30 天) - 只有已支付(status=1)的订单才会返回卡密信息
- 订单被冻结时无法查询,会返回错误提示:"订单已被冻结,请联系客服处理!"
- 商品被删除时
snapshot为 1,但仍可查看订单信息和卡密 - 查询订单时会自动触发卡密打印功能
错误响应示例:
json
{
"code": 0,
"msg": "没有查询到订单信息"
}json
{
"code": 0,
"msg": "订单已被冻结,请联系客服处理!"
}