Files
mipu-open/docs/04-02_booking-payment.md
杨柳杰 b450b512a2 init: mipu-open 对外开放项目统一管理仓库
- 添加 mipu-api 作为 git submodule (Claude Code Skill)
- 迁移 API 文档源文件到 docs/ 目录统一维护
- 添加 Gitea Actions 工作流:tag推送自动打包docs并发布Release
- Skill 运行时自动从 mipu-open Release 下载最新文档

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-04 12:16:08 +08:00

8.4 KiB
Raw Blame History

booking/payment - 支付

更新支付信息(booking/payment) API 说明文档

使用场景

  1. 客户完成 booking/hold 下单后,需要更新订单的支付信息(如支付方式、信用卡信息等)
  2. 用于在支付流程中记录或更新支付相关信息
  3. 使用 Apple Pay 支付时,可指定设备标签来选择执行任务的设备

错误场景(不应该使用本接口的场景)

  1. 未完成 booking/hold 下单,订单不存在时
  2. orderId 为空或未提供时
  3. 订单不属于当前客户clientCode 不匹配)时

性能指标

  • 响应速度98% 的请求响应速度 < 2000ms
  • 接口成功率:> 99%

请求说明

请求地址 https://${endpoint}/booking/payment
请求方法 POST

请求参数

Header

参数名称 类型 是否必选 示例值 说明
Content-Type String application/json 固定值,指定请求体格式为 JSON
Accept-Encoding String gzip, deflate, br 必须要填写,否则服务器会拒绝。
client-key String xxxxx 联系我们获取生产环境 key
client-secret String xxxxx 联系我们获取生产环境 secret

请求体

{
  "orderId": "abbc4b57fb75",
  "proxy": "myproxy-us",
  "paymentMethod": "CREDIT_CARD",
  "retryCount": 0,
  "creditCard": {
    "number": "4111111111111111",
    "CVV": "123",
    "expiryMonth": "12",
    "expiryYear": "25",
    "lastName": "Doe",
    "firstName": "John",
    "country": "US"
  }
}

参数详情

参数名称 类型 是否必选 示例值(默认值) 说明
orderId String abbc4b57fb75 客户的订单号,必须是通过 booking/hold 创建的订单
proxy String 本次获取航司数据采用的代理方式。如果需要指定代理国家请在代理用户后面加上国家二字码。如myproxy-US,US代表美国
paymentMethod String "CREDIT_CARD" 支付方式代码:
BALANCE:余额支付
CREDIT_CARD:信用卡
APPLE_PAYApple Pay支持设备标签
retryCount Integer 0 支付重试次数,默认为 0不重试
creditCard Object 条件必填 信用卡信息对象,当 paymentMethod 为 CREDIT_CARD 时必填
├─ number String 条件必填 "4111111111111111" 信用卡号13-19 位数字)
├─ CVV String 条件必填 "123" CVV 安全码3-4 位数字)
├─ expiryMonth String 条件必填 "12" 有效期月份1-2 位数字)
├─ expiryYear String 条件必填 "25" 有效期年份2 或 4 位数字)
├─ lastName String 条件必填 "Doe" 持卡人姓
├─ firstName String 条件必填 "John" 持卡人名
├─ country String 条件必填 "US" 持卡人国家(二字码)
├─ province String 持卡人省份/州
├─ city String 持卡人城市
├─ postCode String 持卡人邮编
├─ address String 持卡人地址
├─ phone String 持卡人电话(实体卡时使用)
├─ email String 持卡人邮箱(实体卡时使用)
├─ maximumPaymentAmount BigDecimal 最大支付金额
└─ reusable Boolean false 是否为多次卡(默认单次卡)
deviceTag String "EUR" 设备标签,仅当 paymentMethod 为 APPLE_PAY 时可选,用于指定执行任务的设备

设备标签说明 (deviceTag)

  • 适用场景:仅当 paymentMethodAPPLE_PAY 时有效
  • 作用:指定执行任务的设备标签,系统会优先分配有对应标签的设备
  • 可选性:留空则自动分配设备
  • 示例
    {
      "orderId": "abbc4b57fb75",
      "paymentMethod": "APPLE_PAY",
      "deviceTag": "EUR"
    }
    

返回参数

成功响应

{
  "code": 0,
  "msg": "Payment info updated successfully",
  "orderId": "abbc4b57fb75"
}

失败响应

缺少 orderId

{
  "code": 400,
  "msg": "orderId is required"
}

订单不存在

{
  "code": 404,
  "msg": "Booking not found",
  "orderId": "abbc4b57fb75"
}

更新失败

{
  "code": 500,
  "msg": "Failed to update payment info",
  "orderId": "abbc4b57fb75"
}

响应字段说明

参数名称 类型 示例值 说明
code Integer 0 系统状态码
0:成功
400缺少必填参数orderId
404:订单不存在或不属于当前客户
500:更新支付信息失败
msg String "Payment info updated successfully" 系统消息:成功时返回成功提示,失败时返回具体错误信息
orderId String "abbc4b57fb75" 客户的订单号,与请求中的 orderId 一致

业务流程

支付信息更新流程

1. 客户完成航班搜索shopping/search
         ↓
2. 客户选择航班并验价shopping/select
         ↓
3. 客户提交订单booking/hold→ 获取 orderId
         ↓
4. 客户选择支付方式调用支付接口booking/payment
         ↓
5. 支付完成

常见问题

为什么 orderId 是必填的?

orderId 是订单的唯一标识符,系统需要通过它来:

  1. 定位到具体的订单
  2. 验证订单是否属于当前客户(通过 clientCode
  3. 确保只有合法的订单才能更新支付信息

paymentMethod 支持哪些支付方式?

系统支持三种支付方式:BALANCE(余额支付)、CREDIT_CARD(信用卡)、APPLE_PAYApple Pay支持设备标签。详见上方参数表格中的 paymentMethod 说明。

Apple Pay 中的 deviceTag 是什么?

deviceTag 是设备标签,用于指定执行 Apple Pay 支付任务的设备:

  • 仅在 paymentMethodAPPLE_PAY 时有效
  • 可以指定有特定标签的设备执行任务
  • 留空则系统自动分配可用设备
  • 示例:"deviceTag": "EUR" 表示优先使用欧洲地区的设备

信用卡信息安全吗?

本接口仅用于记录支付信息到系统中。实际的支付处理通常由第三方支付网关完成,建议:

  1. 在前端不要存储真实的完整信用卡号
  2. 使用 PCI DSS 合规的支付网关处理实际支付
  3. 仅存储支付网关返回的支付令牌token

如果订单不存在会怎样?

接口会返回 code: 404msg: "Booking not found"。这种情况通常由以下原因造成:

  1. orderId 错误或不存在
  2. 订单属于其他客户clientCode 不匹配)
  3. 订单已过期或被删除

业务案例

更新信用卡支付信息

请求Request

{
  "orderId": "abbc4b57fb75",
  "paymentMethod": "CREDIT_CARD",
  "creditCard": {
    "number": "4111111111111111",
    "CVV": "123",
    "expiryMonth": "12",
    "expiryYear": "25",
    "lastName": "Doe",
    "firstName": "John",
    "country": "US"
  }
}

响应Response

{
  "code": 0,
  "msg": "Payment info updated successfully",
  "orderId": "abbc4b57fb75"
}

使用 Apple Pay 并指定设备标签

请求Request

{
  "orderId": "abbc4b57fb75",
  "paymentMethod": "APPLE_PAY",
  "deviceTag": "EUR"
}

响应Response

{
  "code": 0,
  "msg": "Payment info updated successfully",
  "orderId": "abbc4b57fb75"
}

缺少 orderId 的错误请求

请求Request

{
  "paymentMethod": "CREDIT_CARD"
}

响应Response

{
  "code": 400,
  "msg": "orderId is required"
}

订单不存在的错误请求

请求Request

{
  "orderId": "nonexistent-order-id",
  "paymentMethod": "CREDIT_CARD"
}

响应Response

{
  "code": 404,
  "msg": "Booking not found",
  "orderId": "nonexistent-order-id"
}

错误码说明

错误码 说明 处理建议
0 成功 支付信息已成功更新
400 请求参数错误 检查是否提供了必填的 orderId
404 订单不存在 确认订单 ID 是否正确,且订单属于当前客户
500 服务器内部错误 系统处理异常,请稍后重试或联系技术支持