Developers API & Widget
ZH

支付

支付意图与幂等性

支付意图在用户与小部件交互之前,会不变地确定交易的经济条款。这防止恶意客户端在前端篡改金额、目的账户或转账附言。

创建支付意向的参数(POST /payments/?action=create

1. 商户标准模式(自有受益人)

在该模型中,商家定义了所有收款信息:

字段 类型 必填 描述与规则
amount_minor 整数 是的 金额以较小单位(分)表示。例如, 1500 代表 15,00 EUR
currency 文本字符串 是的 ISO 4217 三字母货币代码。目前 EUR
beneficiary JSON 数据对象 是的 目标账户数据: name (拥有者,1到140个文本字符)和 iban (有效IBAN ,不含空格,且校验位已经验证)。只支持这两个键。
reference 文本字符串 是的 银行对账单上可见概念(文本最多140个字符)。
customer_reference 文本字符串 是的 订单或客户的内部标识符(文本1至128个字符:字母、数字、 ._:-;必须以字母或数字开头)。
allowed_origin 文本字符串 是的 精确 HTTPS 源,可以嵌入小部件(例如 https://tienda.example.com),但没有路径。
allowed_institution_codes 数组 允许的实体代码列表(例如 ["santander-es", "bbva-es"])。如果省略,目录中的任何实体都被允许。
locale 文本字符串 控件接口的语言。本版本仅接受 es;其他值返回 422 invalid_locale
expected_mode 文本字符串 mocklive。检查你是否调用了预期环境;环境不会改变。如果不匹配, 409 payment_mode_mismatch

正文是一个严格的 白名单:发送不在本表中的字段返回 422 invalid_request,省略强制字段亦然。 Content-Type: application/json 头是强制的(415 json_required),正文限制为32 KB。

2. 带有托管档案的模型(捐赠/演示)

对于受监管的案件或 cruz_roja_demo等公开演示,服务器会制定财务规则并设定官方目标账户:

字段 类型 必填 描述与规则
profile 文本字符串 是的 配置文件标识符(例如 cruz_roja_demo)。
institution_code 文本字符串 是的 用户选择的实体代码(来源于 profile-institutions)。
amount_minor 整数 是的 金额受配置规则限制(例如 1 至 100 欧分)。
customer_reference 文本字符串 是的 你系统自己的审计参考。
allowed_origin 文本字符串 是的 小工具 HTTPS 源。
locale 文本字符串 小部件语言(es)。
expected_mode 文本字符串 预期模式(mocklive)。

profile指定时,服务器会自动分配官方收款人及相应的付款说明。请不要在受管理配置文件下的请求发送 beneficiaryreference

Idempotency-Key法则

Idempotency-Key 头是创建支付意图请求中必不可少的。该头部必须包含16到128个可见的ASCII文本字符,且不得有空格(例如,v4 UUID)。其范围是认证公司独有的:

  • 相同的幂等性密钥和相同的请求体: 返回之前与 idempotent_replay: true一起创建的原始意图。不生成新的费用,银行订单也未重复。
  • 相同的幂等性密钥和不同的请求体: 立即用 HTTP 409 Conflict回应。
  • 另一家公司使用相同的幂等性密钥:属于 另一个完全孤立的幂等性命名空间。

如果创建支付意向的请求发生网络中断或超时,请 用完全相同的头部 Idempotency-Key 和相同的请求体重试。在瞬态故障发生时,不要生成新密钥。

持续性与生命周期

  1. 先前持久化: 在返回响应或与任何银行连接器交互之前,意图会被记录在数据库中。
  2. 临时控件令牌: 响应 token (payment.widget.token)有效时间较短(通常为15到30分钟),只能从声明的 allowed_origin 中使用。
  3. 并发锁定: 系统实现了乐观控制和 leases 控制,以防止两个同时调用授权或修改相同的意图。

常见错误代码

HTTP 代码 原因 建议行动
400 idempotency_key_required Idempotency-Key头缺失或格式错误。 生成一个有效密钥,字符介于16到128个字符之间,显示ASCII文本,且不带空格。
409 idempotency_conflict 密钥被重复使用,付款信息不同。 为不同的支付生成新的密钥,或重用完全相同的请求体。
409 payment_mode_mismatch expected_mode 与你调用的环境模式不匹配。 检查你是针对沙盒还是生产环境;模式是由部署决定的,而不是调用。
401 invalid_api_key X-API-Key头缺失、格式无效,或通行密钥不存在或处于非激活状态。 检查 API 凭据。绝不要把它包含在前端。
403 payments_not_allowed API键没有启用产品PAYMENTS 联系 Wealth Reader 客服,激活你的账户付款。
403 payment_profile_not_allowed 你的公司没有启用托管配置文件。 向 Wealth Reader申请启用该托管配置。
429 api_limit_reached 您的 API 凭据已耗尽累计调用额度。 试或等待无法解决:没有窗口或自动重置。请求延长限制。
415 json_required Content-Type: application/json头部缺失。 将请求体以 JSON 格式发送。
422 invalid_request 缺少必填字段或提交了未识别的字段。 查看参数表:请求体使用严格的允许列表。
422 invalid_institution 所选实体不可用或无效。 请参见 GET /payments/entities/ 有效代码。
422 invalid_amount 金额低于最低要求(€0.01)或非整数。 确认你发送的是分(cent)的整数(amount_minor)。

下一步

继续 状态、轮询和对账.

最后更新于