Skip to content

支付接口

📌 Overview

该接口用于 商户服务端在获取到持卡人 payToken 与 iframeToken 后,调用本接口完成订单的最终支付。

注意事项

  • reference 为商户侧订单号,必须保证全局唯一且与iframeUrl接口一致。同一订单号支持多次支付尝试,无需附加随机后缀。
  • iframeToken 来源于 iframeUrl 接口返回值,payTokeniframe 页面在持卡人输入卡信息后生成,调用本接口时必须传递

Endpoint

http
POST /payment/payments

请求示例

shell
curl --location --request POST 'http://localhost:9999payment/payments' \
--header 'tenant-id: 220818025875' \
--header 'Request-Time: 1760166006330' \
--header 'Signature: algorithm=MD5,keyVersion=1,signature=3cf78f044908f9c12399f73c62c9fb05' \
--header 'Content-Type: application/json' \
--data-raw '{
    "iframeToken": "6861aa86-16c9-4721-8e9b-9bd69215e43b",
    "amount": 10000,
    "website": "www.links-pay.cc",
    "subject": "Women’s 3D Embroidered Bandeau Elegant Mini Dress",
    "channel": "iframeTest",
    "type": "iframe",
    "card": {
        "payToken": "a4a4575c-d144-4e7f-9fec-89c234f78d77"
    },
    "billing": {
        "country": "US",
        "firstName": "Melissa",
        "lastName": "Hughes",
        "address": "1225 Wilshire Blvd Apt 804",
        "city": "Los Angeles",
        "phone": "+14155527689",
        "postalCode": "90017",
        "state": "CA",
        "email": "melissa.hughes@example.com"
    },
    "reference": "R202512045",
    "shipping": {
        "country": "US",
        "firstName": "Melissa",
        "lastName": "Hughes",
        "address": "1225 Wilshire Blvd Apt 804",
        "city": "Los Angeles",
        "phone": "+14155527689",
        "postalCode": "90017",
        "state": "CA",
        "email": "melissa.hughes@example.com"
    },
    "notifyUrl": "https://www.links-pay.cc/notify",
    "currency": "USD",
    "returnUrl": "https://www.links-pay.cc/checkout.html",
    "items": [
        {
            "unitPrice": 10000,
            "name": "Women’s 3D Embroidered Bandeau Elegant Mini Dress",
            "currency": "USD",
            "quantity": "1",
            "category": "Women Clothing",
            "totalPrice": 10000
        }
    ],
    "browserInfo": {
        "screenWidth": 1920,
        "javaEnabled": false,
        "os": "Windows 10",
        "screenHeight": 1080,
        "ipAddress": "168.168.168.168",
        "browserName": "Chrome",
        "timeZone": -480,
        "javascriptEnabled": true,
        "language": "en-US",
        "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36",
        "colorDepth": 24
    },
     "utm": {
        "utm_source": "facebook",
        "utm_medium": "social",
        "utm_term": "",
        "utm_content": ""
    }
}'

顶层字段

字段类型必填说明
channelstring通道标识。由平台配置,通道路线。仅允许平台分配的值,最长 64。
iframeTokenstringiframeUrl 接口返回。
referencestring商户订单参考号。商户侧唯一(建议 64 以内),用于对账与幂等等。
amountstring订单总金额,表示本次交易请求的支付金额。仅支持整数格式(不带小数点)。金额单位使用最小货币单位(如美分),且必须大于零,不得超过单笔限额。
subjectstring商品标题 / 摘要。用于持卡人账单与风控展示,UTF-8,最长 128。
currencystring订单币种(ISO 4217)。大写三位字母,需在商户开通币种列表内。
websitestring交易来源站点。须为备案在白名单内的域名(不含协议);未备案站点应拒绝或降级处理。
notifyUrlstring服务器异步通知地址。推荐 HTTPS;商户需具备幂等处理能力(参考签名 / 重放防护)。
returnUrlstring前端同步跳转地址。3DS / 收银台完成后浏览器跳转地址;推荐 HTTPS。
typestring支付方式类型。取值:iframe
payTokenstring持卡人填卡后加密的 payToken
billingobject账单信息对象。用于 AVS / FDS 及物流发货;在支持地区(US/UK/CA 等)启用 AVS 校验(Address / ZIP),作为风控要素之一。
shippingobject物流地址信息。用于订单发货。
browserInfoobject浏览器 / 设备信息。如果启用 3D 校验,browserInfo 将用于 AReq / CReq 报文;请确保字段完整,避免被 3DS 服务器降级或拒绝。
itemsarray[object]订单项目列表。建议提供;用于风控、风险画像与清分。
shipingobject物流信息对象。用于订单物流发货。
utmobject用来做流量追踪和数据分析。

billing(账单信息对象)

字段类型必填说明
emailstring邮箱。RFC 5322 约束;用于收据、风控。
phonestring手机。含国家码或与 country 匹配;仅数字与 +
firstNamestring名。英文字符,最长 64。
lastNamestring姓。英文字符,最长 64。
countrystring国家。建议用 ISO 3166-1 alpha-2(如 US)。
citystring城市。
statestring州 / 省。US / CA 建议使用二位缩写(如 CA)。
postalCodestring邮编。US 支持 5 或 9 位(ZIP+4);按国家规则校验。
addressstring账单地址行。地址行 1;用于 AVS。

shipping(物流地址信息)

字段类型必填
emailstring
phonestring
firstNamestring
lastNamestring
countrystring
citystring
statestring
postalCodestring
addressstring

browserInfo(浏览器 / 设备信息)

字段类型必填说明
userAgentstring浏览器 UA。原始 UA;用于指纹与 3DS 风险评估。
ipAddressstring客户端 IP。IPv4 / IPv6;建议与服务器观测 IP 做一致性比对。
colorDepthinteger颜色深度。常见 24 / 30 / 32。
javaEnabledbooleanJava 启用。设备画像字段。
javascriptEnabledbooleanJS 启用。前端能力指示。
languagestring语言。约束:IETF BCP 47,如 en-US
screenHeightinteger屏幕高,像素值。
screenWidthinteger屏幕宽,像素值。
timeZoneinteger本地时区偏移(分钟)。建议对齐 JS getTimezoneOffset() 语义:本地相对 UTC 的分钟偏移;如 UTC+8 为 -480
browserNamestring浏览器名。解析自 UA;冗余传输。
osstring操作系统。解析自 UA;冗余传输。

items(订单项目列表)

字段类型必填说明
namestring商品名。UTF-8,最长 256。
categorystring商品品类。自定义分类或对标标准类目,用于风控。
unitPricestring单价。仅支持整数格式(不带小数点)。金额单位使用最小货币单位(如美分),且必须大于零。
quantitystring数量。正整数,≤ 99999。
totalPricestring小计。unitPrice * quantity。仅支持整数格式(不带小数点)。金额单位使用最小货币单位(如美分),且必须大于零。
currencystring币种。必须等于顶层 currency
imagearray[string]图片数组。
skustringSKU,例如 Dress-White-MDress-Black-L
specstring规格,例如 Color: White / Black;Size: M / L

shiping(物流信息对象)

字段类型必填说明
emailstring邮箱。
phonestring手机。含国家码或与 country 匹配;仅数字与 +
firstNamestring名。英文字符,最长 64。
lastNamestring姓。英文字符,最长 64。
countrystring国家。建议用 ISO 3166-1 alpha-2(如 US)。
citystring城市。
statestring州 / 省。US / CA 建议使用二位缩写(如 CA)。
postalCodestring邮编。
addressstring账单地址行。地址行。

utm(流量追踪信息)

字段类型必填说明
utm_sourcestring用户来源。
utm_mediumstring流量渠道。
utm_termstring流量关键词。
utm_contentstring内容标识。

返回响应

响应结果处理说明:

  • 当 success = false 时,表示本次接口调用失败,通常由于参数错误、签名错误、通道关闭或通道限额等原因。此时请直接读取并提示 error 字段中的错误信息。

  • 当 success = true 时,表示接口调用成功,此时应根据 data.status 进行判定支付结果,如果失败请展示 failureMessage 失败原因。

顶层结构字段说明

字段类型示例值说明
requestIdstring75daa341-66fd-4d87-949b-28f7f0ef6d64本次通知的唯一追踪 ID,由服务端生成,用于日志追踪、链路排查与问题定位。每次通知通常唯一。
successbooleantrue表示本次接口调用是否成功(接口层面)。true 表示通知调用成功并已返回业务结果;false 表示接口调用异常,如签名错误、参数缺失、权限拒绝、通道关闭等。
dataobject{...}支付结果详情对象。当 success = true 时,商户应重点解析该对象中的业务字段。
timestampstring (ISO 8601)2025-10-10T16:39:23.765+08:00通知生成时间,采用 ISO 8601 标准格式,包含毫秒与时区偏移。

data 对象字段说明(支付结果详情)

字段类型示例值说明
idstringP1231823IntPay 平台交易号。用于标识平台侧唯一交易,可用于对账、查询与问题排查。
referencestringSAIDF01239-1230商户订单号或交易参考号,由商户系统生成,用于关联商户内部订单。
requiresActionbooleanfalse是否仍需用户执行额外操作。通常用于表示是否需要完成额外验证步骤(如 3DS、OTP 等)。
amountnumber100支付金额,单位为最小货币单位。例如 USD 下 100 表示 1.00 USD
currencystringUSD支付币种,遵循 ISO 4217 三位字母代码标准。
failureMessagestringfail失败原因描述。当交易失败时返回;成功状态下通常为空、为 null 或被省略。
statusstringFAILED当前订单状态枚举值,商户应以此字段作为订单状态更新依据。

nextAction(当 requiresAction = true 时返回)

字段类型示例值说明
nextAction.typestringredirect操作类型
nextAction.urlstringhttps://3d.com跳转地址
nextAction.methodstringGET访问协议

状态枚举

状态值说明商户建议
PENDING待处理。支付请求已创建,正在等待用户操作、发卡行响应或通道处理。订单保持处理中,不要提前判定最终结果。
REQUIRES_ACTION需要下一步操作。通常表示用户需完成额外验证,如 3D Secure、OTP 或其他身份校验。引导用户继续完成验证流程,并等待后续结果通知。
SUCCEEDED支付成功。发卡行授权通过,交易已成功完成。将订单更新为成功,进入发货、入账或后续履约流程。
FAILED支付失败。可能由于发卡行拒付、风控拦截、余额不足、卡信息错误或其他原因导致。将订单更新为失败,并视业务需要记录失败原因。
CANCELED已取消。订单被商户、用户或系统主动取消,通常未完成实际扣款。将订单更新为已取消,结束本次支付流程。
REFUND_PENDING退款处理中。退款请求已提交,正在等待银行或通道处理。将订单更新为退款处理中,并等待后续通知。
REFUNDED已退款。原支付金额已成功退回持卡人账户。将订单更新为已退款,并同步售后或财务状态。
REFUND_FAILED退款失败。退款请求被通道或银行拒绝,未完成退款。保留原支付成功状态,并记录退款失败原因。
CHARGEBACK拒付。持卡人已发起争议,款项可能被强制退回。启动拒付处理流程,并同步风控、财务或客服系统。

不同支付产品或通道路由下,部分状态可能不会全部出现。
商户系统应至少完整兼容:PENDINGREQUIRES_ACTIONSUCCEEDEDFAILEDCANCELEDREFUNDED

响应示例

付款成功

json
{
    "requestId": "b5cb20f9-6968-41ff-8e53-b1a9fc87a2b8",
    "success": true,
    "data": {
        "id": "P251011144163273295845",
        "reference": "R202512038",
        "status": "SUCCESS",
        "amount": 10000,
        "currency": "USD",
        "requiresAction": null,
        "nextAction": null,
        "failureMessage": null
    },
    "timestamp": "2025-10-11T14:41:23.406+08:00"
}

需要 3D

json
{
  "requestId": "d75ebc09-525d-41ef-9743-7135303ea47a",
  "success": true,
  "data": {
    "id": "P251011145346884900074",
    "reference": "R202512038",
    "status": "REQUIRES_ACTION",
    "amount": 10000,
    "currency": "USD",
    "requiresAction": true,
    "nextAction": {
      "type": "redirect",
      "url": "http://www.baidu.ccom",
      "method": "GET"
    },
    "failureMessage": null
  },
  "timestamp": "2025-10-11T14:53:13.672+08:00"
}

签名失败

json
{
  "success": false,
  "message": "invalid signature"
}

卡号不存在

json
{
  "requestId": "18836977-410f-41e4-be7c-02f2c39ffd5f",
  "success": true,
  "data": {
    "id": "P251011143910228479127",
    "reference": "R202512038",
    "status": "FAILED",
    "amount": 10000,
    "currency": "USD",
    "requiresAction": null,
    "nextAction": null,
    "failureMessage": "This card number does not exist"
  },
  "timestamp": "2025-10-11T14:39:27.906+08:00"
}

付款失败

json
{
    "requestId": "75daa341-66fd-4d87-949b-28f7f0ef6d64",
    "success": true,
    "data": {
        "reference": "SAIDF01239-1230",
        "requiresAction": false,
        "amount": 100,
        "currency": "USD",
        "id": "P1231823",
        "failureMessage": "Your card was declined. Please check with your bank or use a different card.",
        "status": "FAILED"
    },
    "timestamp": "2025-10-10T16:39:23.765+08:00"
}