---
url: >-
https://acquirer-api-docs-v4-en.pingpongx.com/notes/zh/integrate/non-hosted-card/index.md
description: 说明国际信用卡 Server-to-Server 接入流程,适用于已具备 PCI 合规并需要高度定制支付页面的商户。
---
PingPong Non-hosted 本地支付是一款专为跨境交易打造的轻量级、高安全后端解决方案。通过标准化的 API 集成,商户可一站式接入全球丰富的本地支付方式(涵盖电子钱包、网银、银行卡等)。我们致力于为您扫除多通道对接的技术壁垒,在保障交易安全合规的前提下,为全球买家提供极致顺滑的支付体验,助力您的出海业务快速落地与规模化扩张。
本文介绍银行卡支付的 Server-to-Server 集成方案。该模式适合对支付流程有高定制化需求的商户。请注意,选择此模式需确保您的业务已通过 PCI 合规认证。
## 方案说明
在该模式下,买家始终在商户页面完成卡信息输入;当交易需要 3DS 验证时,再由商户前端根据同步响应跳转至发卡行挑战页面。该方案更适合希望自定义收银台体验、并具备 PCI-DSS 合规与前端支付链路建设能力的商户。
## 接入前提
1. 商户具备 PCI 资质,并通过 PingPongCheckout 验证。(PCI-DSS 请发送邮件附件到 `acquire-risk@pingpongx.com` 并抄送 `gig-tech-acq@pingpongx.com`)
2. 商户具备自行开发信用卡收银台页面的能力。
3. 商户已具备接入风控与 3DS 组件的前端能力。
:::danger 注意
采用国际信用卡支付(Non-hosted)方案时,商户需要自行保存、处理持卡人的信用卡信息,因此必须具备 PCI-DSS 认证。
:::
## 支付流程
```mermaid
%%{init: {
'theme': 'base',
'themeVariables': {
'primaryColor': '#E3F2FD',
'primaryTextColor': '#0D47A1',
'primaryBorderColor': '#1976D2',
'lineColor': '#1565C0',
'secondaryColor': '#BBDEFB',
'tertiaryColor': '#90CAF9',
'background': '#F8FBFF',
'mainBkg': '#E3F2FD',
'secondBkg': '#BBDEFB',
'tertiaryBkg': '#90CAF9',
'actorBkg': '#2196F3',
'actorBorder': '#1976D2',
'actorTextColor': '#FFFFFF',
'actorLineColor': '#1565C0',
'signalColor': '#0D47A1',
'signalTextColor': '#0D47A1',
'noteBkgColor': '#E1F5FE',
'noteTextColor': '#01579B',
'noteBorderColor': '#0288D1',
'loopTextColor': '#0D47A1',
'activationBkgColor': '#B3E5FC',
'activationBorderColor': '#0277BD'
}
}}%%
sequenceDiagram
participant U as 👤 持卡人
participant Client as 💻 商户客户端
participant SPG as 🛡️ SafePayGuardJs
participant SSJ as 🔐 SecureShieldJs
participant Server as 🏪 商户服务端
participant PP as 🔄 PingPong服务端
participant Issuer as 🏦 发卡行
Note over U, Issuer: 🚀 Non-hosted 卡支付交互流程
Client->>SPG: 1. 初始化 SafePayGuardJs
Client->>SSJ: 2. 初始化 SecureShieldJs
U->>Client: 3. 输入卡号
Client->>SSJ: 4. triggerThreeDsInit(卡号变更/失焦)
SSJ->>PP: 5. 校验并获取风控参数
PP-->>SSJ: 6. 返回部分 jsGeneratedData / browserInfo
U->>Client: 7. 点击支付
Client->>SPG: 8. getGeneratedData()
Client->>SSJ: 9. getGeneratedData()
Client->>+Server: 10. 提交订单 + jsGeneratedData + browserInfo
Server->>+PP: 11. 调用下单并支付接口
PP->>+Issuer: 12. 请求支付处理
Issuer-->>-PP: 13. 返回支付结果
PP-->>-Server: 14. 返回同步响应
Server-->>-Client: 15. 返回 bizContent 结果
alt threeDContinue = false(无需3D)
Client->>U: 16. 展示支付结果
else threeDContinue = true(需要3D)
Client->>U: 17. 跳转 threeDRedirectUrl 进行挑战
Note over U, PP: 挑战完成后重定向至 payResultUrl
end
Note over U, Issuer: 🎯 流程结束
```
流程说明:
1. 商户前端在支付提交前完成风控与 3DS 参数采集。
2. 商户服务端调用 [下单并支付](/notes/zh/checkout/api/uniformly/) 创建国际卡支付订单。
3. PingPongCheckout 返回同步响应后,商户前端根据 `status` 和 `threeDContinue` 决定是否进入 3DS 挑战。
4. 若需要 3DS,商户前端应跳转 `threeDUnionParams.threeDRedirectUrl`;挑战完成后,PingPongCheckout 会将买家带回 `payResultUrl`。
5. 买家回跳至 `payResultUrl` 仅表示前端流程结束,不代表交易成功;最终结果必须以 [支付通知](/notes/zh/notify/payment/notify/) 或 [交易查询](/notes/zh/checkout/api/getOne/) 为准。
## 接口列表
国际信用卡支付(Non-hosted)通常涉及以下接口和通知:
| 阶段 |
类型 |
文档 |
是否必接 |
用途 |
| 支付创建 |
文档 |
Dynamic 3D Secure |
必读 |
完成风控与 3DS 组件接入,收集支付所需风控参数 |
| API |
下单并支付 |
必接 |
提交卡信息、风控参数与订单信息,创建支付订单 |
| 支付结果 |
通知 |
支付通知 |
必接 |
接收最终支付结果并更新商户订单状态 |
| API |
交易查询 |
推荐 |
在通知延迟、未达或需要核验结果时主动确认交易状态 |
| 退款 |
API |
申请退款 |
按需 |
对成功支付的国际卡交易发起退款 |
| 通知 |
退款通知 |
推荐 |
接收退款结果并更新退款状态 |
| API |
退款查询 |
推荐 |
在通知延迟、未达或对账时主动确认退款状态 |
| 预授权请款 / 撤销 |
API |
预授权请款 |
手动请款场景必接 |
对已预授权交易发起请款 |
| API |
预授权撤销 |
手动请款场景必接 |
对已预授权但未请款的交易发起撤销 |
| 通知 |
预授权请款通知 |
手动请款场景推荐 |
接收预授权请款结果 |
| 通知 |
预授权撤销异步通知 |
手动请款场景推荐 |
接收预授权撤销结果 |
## 集成步骤
请按以下步骤完成集成:
1. [准备风控与 3DS 参数并发起支付](#步骤-1-准备风控与-3ds-参数并发起支付)
2. [获取最终支付结果](#步骤-2-获取最终支付结果)
### 步骤 1:准备风控与 3DS 参数并发起支付
在调用 [下单并支付](/notes/zh/checkout/api/uniformly/) 前,商户前端需要先完成 SafePayGuardJs、SecureShieldJs 接入,并采集支付所需的 `browserInfo`、`jsGeneratedData` 等参数;随后由商户服务端调用下单并支付创建支付订单。前端组件初始化、`triggerThreeDsInit` 触发时机以及参数获取方式,请直接参考以下文档:
- [Dynamic 3D Secure](/notes/zh/risk/3ds/)
- [SafePayGuardJs 组件](/notes/zh/riskManger/safePayGuardJs/)
- [SecureShieldJs 组件](/notes/zh/riskManger/SecureShieldJs/)
::: warning 注意
如果您无法在前端页面嵌入相关 JS 组件,请先与商务或风控团队确认是否可评估其他 3DS 接入方案。
:::
支付请求中建议重点关注以下信息:
| 信息 | 说明 |
|:---|:---|
| `paymentMethod.type` | 卡品牌或卡组织,例如 `VISA`、`MasterCard`、`JCB`、`AmericanExpress`、`Discover`、`DinersClub`、`UnionPay`。支持的卡品牌可参考 [国际信用卡](/notes/zh/paymentMethods/InternationalCards/) 页面 |
| `paymentMethod.cardInfo` | 持卡人卡信息,包括卡号、有效期、CVV、持卡人姓名等 |
| `requestId` | 支付请求流水号,建议保持全局唯一 |
| `merchantTransactionId` | 商户订单流水号,用于关联商户订单与支付交易 |
| `merchantUserId` | 商户侧用户唯一标识,用于关联持卡人身份 |
| `goods` | 商品信息,用于补充交易上下文 |
| `browserInfo` | 3DS 组件收集的浏览器信息,支付请求中需要一并上送 |
| `jsGeneratedData` | 风控与 3DS 组件生成的交易安全参数,支付请求中需要一并上送 |
| `notificationUrl` | 用于接收最终支付结果的异步通知地址 |
| `payResultUrl` | 买家完成 3DS 或支付流程后回到商户页面的地址 |
| `device.orderTerminal` | 下单终端。`01` WAP、`02` Web、`04` iOS App、`05` Android App |
有关完整参数的更多信息,请参阅 [下单并支付](/notes/zh/checkout/api/uniformly/)。
支付请求示例(仅展示 `bizContent` 内容):
```json:line-numbers:collapsed-lines=16
{
"captureDelayHours": "0",
"amount": "10",
"currency": "USD",
"requestId": "PMT-E46D6LAAKB1782628205616",
"merchantTransactionId": "PMT-E46D6LAAKB1782628205616",
"payResultUrl": "https://www.example.com/card/pay-result",
"payCancelUrl": "https://www.example.com/card/pay-cancel",
"notificationUrl": "https://www.example.com/card/pay-notify",
"language": "en",
"shopperIP": "222.126.52.23",
"merchantUserId": "888888888",
"threeDSRequestData": {
"executeThreeD": "Y"
},
"customer": {
"email": "buyer@example.com",
"phone": "19999999999"
},
"goods": [
{
"name": "商品名称mepsking1",
"description": "nndmmdnaido",
"unitPrice": "10",
"number": "1",
"virtualProduct": "Y",
"imgUrl": "https://yourOrderSample/001.png"
}
],
"device": {
"orderTerminal": "02"
},
"paymentMethod": {
"type": "scheme",
"cardInfo": {
"number": "4242424242424242",
"holderFirstName": "zhang",
"holderLastName": "san",
"expireMonth": "09",
"expireYear": "2030",
"cvv": "239"
}
},
"browserInfo": {
"acceptHeader": "content-type=application/x-www-form-urlencoded;accept=*/*;cache-control=no-cache;postman-token=cf489264-5378-4d5d-a86c-72c86a408c03;accept-encoding=gzip, deflate;content-length=588;connection=keep-alive;",
"colorDepth": "32",
"jetLag": "480",
"screenHeight": "1980",
"screenWidth": "1080",
"userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36",
"windowSize": "05"
},
"jsGeneratedData": {
"channel": "CyberSource",
"version": "1.0",
"correlationId": "af43fce6-70a9-4224-8583-bb106a96a12b",
"threeDInitTransId": "0b13e799-b802-4c85-adcc-a8a738ee0381",
"threeDSecureReferenceId": "af43fce6-70a9-4224-8583-bb106a96a12b"
}
}
```
::: warning 注意
`payResultUrl` 只用于买家完成前端流程后的回跳展示,不代表支付成功。涉及订单落账、发货或发放权益时,必须以服务端结果为准。
:::
下单并支付后,商户服务端会先收到同步响应。
同步响应示例(仅展示 `bizContent` 内容):
```json:line-numbers:collapsed-lines=16
{
"issuerInfo": {},
"transactionTime": "1782702195000",
"requestId": "PMT-9T4IM1SCZ01782702194490",
"merchantTransactionId": "PMT-9T4IM1SCZ01782702194490",
"currency": "USD",
"exchangedAmount": "10",
"payResultUrl": "https://test-acquirerpay.pingpongx.com/qa/result.html",
"exchangedCurrency": "USD",
"threeDSInfo": {
"cavv": "",
"authenticationResult": "C",
"liabilityShift": "N",
"eci": "",
"authentication3DSecure": "e47ec035-fd9a-43f5-9787-36a7bd2216a9",
"specificationVersion": "2.2.0"
},
"amount": "10",
"authenticationInfo": {
"avsResult": "U",
"cvvResult": "Y",
"threeDSecure": "Y"
},
"cardInfo": {
"firstName": "zhang",
"isoCountryA2": "US",
"lastName": "san",
"lastFourDigits": "1112",
"cardLevel": "CLASSIC",
"paymentBrand": "VISA",
"cardType": "DEBIT",
"issuringBank": "VISA PRODUCTION SUPPORT CLIENT BID 1",
"ipCountry": "PH",
"firstSixDigits": "401200",
"isoCountry": "UNITED STATES"
},
"threeDUnionParams": {
"acsUrl": "https://cas.client.cardinaltrusted.com/centinelapi/V2/Cruise/StepUp",
"threeDRedirectUrl": "https://sandbox-acquirer-static.pingpongx.com/payment/threeDs.html?code=eyJhY3NVcmwiOiJodHRwczovL2Nhcy5jbGllbnQuY2FyZGluYWx0cnVzdGVkLmNvbS9jZW50aW5lbGFwaS9WMi9DcnVpc2UvU3RlcFVwIiwiYXV0aEFjY2Vzc1Rva2VuIjoiZXlKaGJHY2lPaUpJVXpJMU5pSXNJblI1Y0NJNklrcFhWQ0o5LmV5SnFkR2tpT2lJeVpXUmlNMlpqWWkwNFkyTTJMVFF5T0RrdFltWm1PUzFtTUdaa05qTmhZMlZoWkRZaUxDSnBZWFFpT2pFM09ESTNNREl4T1Rjc0ltbHpjeUk2SWpWa05XWXlNMlJsWVdaaE9EQmtNVGxrTURrNVl6WTNOQ0lzSW1WNGNDSTZNVGM0TWpjd016azVOeXdpVDNKblZXNXBkRWxrSWpvaU5qSXlPREZoTXpSaE1HTXhaakF6WVRFME5qbGxOV0V3SWl3aVVHRjViRzloWkNJNmV5SkJRMU5WY213aU9pSm9kSFJ3Y3pvdkwyTmhjeTVqYkdsbGJuUXVZMkZ5WkdsdVlXeDBjblZ6ZEdWa0xtTnZiUzl0WlhKamFHRnVkR0ZqY3k5MGFISmxaV1J6TDNZeUwyTnlaWEVpTENKUVlYbHNiMkZrSWpvaVpYbEtkRnBZVG5wWlYyUnNWa2hzZDFwVFNUWkphMDVUV2xoRmFVeERTblJhV0U1NldWZGtiRlp0Vm5sak1teDJZbWxKTmtscVNYVk5hVFIzU1dsM2FXUkhhSGxhVjFaRlZURk9iR051V214amJGSjVXVmMxZWxOVlVXbFBhVXBzVGtSa2JGbDZRWHBPVXpGdFdrUnNhRXhVVVhwYWFsVjBUMVJqTkU1NU1IcE9iVVV6V1cxUmVVMXFSVEpaVkd0cFRFTkthRmt6VGxWamJVWjFZekJzUlVscWIybFBWR040VFhwQk1FMHlXWFJPVjFwb1dXa3dNRmw2VW14TVYwa3lUVlJGZEUxNlVtcE9SRWw0VGxSSk1rNTZWbXhKYVhkcFdUSm9hR0pIZUd4aWJXUnNWakpzZFZwSE9UTlZNbXcyV2xOSk5rbHFRWGxKYmpBaUxDSlVjbUZ1YzJGamRHbHZia2xrSWpvaWIydG5VRXBNZDJGMVJsSkNRWFpPVFVkalp6SWlmU3dpVDJKcVpXTjBhV1o1VUdGNWJHOWhaQ0k2ZEhKMVpTd2lVbVYwZFhKdVZYSnNJam9pYUhSMGNITTZMeTl6WVc1a1ltOTRMV0ZqY1hWcGNtVnlMWEJoZVcxbGJuUXVjR2x1WjNCdmJtZDRMbU52YlM5MGFISmxaVVJUTDBONVltVnlVMjkxY21ObEwzSmxaR2x5WldOMEwyTlFaRTR4ZGs1MU9EWXdlVkEwWkRkdGR6Wm1UR3BIY1dwbE9YTkJNRkJxWDE5UGRHOWFUakoxWjFWcWVVcHJaWHBhWjI0MU1ubDJVVWRuTWs1dlIzQllRMjVmVG5ONE5HaHJYM05wV1hoTGRVVnFSRmhpYkhWWk0xcFVZVXhOUnpOVVRFY3hVeTFRTjJONFpFWmxWVmhHVTNsV1NXSkRUMmR4WkZCTE9XNTVSMHAzY2todVZuaHhhRmd4ZGswelltMTVTM0ZOVVQwOUluMC5aSnU0NGhCTVp4M2xCYV9fcEx6a3U4T3ZFcTdyOUZPNFBGUi1QSTl3WGlVIiwiY2hhbm5lbCI6IkNZQlMifQ==",
"threeDChannel": "CyberSource",
"threeDResult": "{\"ACSUrl\":\"https://cas.client.cardinaltrusted.com/centinelapi/V2/Cruise/StepUp\",\"acsTransId\":\"9713043f-5fab-4c4e-b611-34c42152675e\",\"authAccessToken\":\"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiIyZWRiM2ZjYi04Y2M2LTQyODktYmZmOS1mMGZkNjNhY2VhZDYiLCJpYXQiOjE3ODI3MDIxOTcsImlzcyI6IjVkNWYyM2RlYWZhODBkMTlkMDk5YzY3NCIsImV4cCI6MTc4MjcwMzk5NywiT3JnVW5pdElkIjoiNjIyODFhMzRhMGMxZjAzYTE0NjllNWEwIiwiUGF5bG9hZCI6eyJBQ1NVcmwiOiJodHRwczovL2Nhcy5jbGllbnQuY2FyZGluYWx0cnVzdGVkLmNvbS9tZXJjaGFudGFjcy90aHJlZWRzL3YyL2NyZXEiLCJQYXlsb2FkIjoiZXlKdFpYTnpZV2RsVkhsd1pTSTZJa05TWlhFaUxDSnRaWE56WVdkbFZtVnljMmx2YmlJNklqSXVNaTR3SWl3aWRHaHlaV1ZFVTFObGNuWmxjbFJ5WVc1elNVUWlPaUpsTkRkbFl6QXpOUzFtWkRsaExUUXpaalV0T1RjNE55MHpObUUzWW1ReU1qRTJZVGtpTENKaFkzTlVjbUZ1YzBsRUlqb2lPVGN4TXpBME0yWXROV1poWWkwMFl6UmxMV0kyTVRFdE16UmpOREl4TlRJMk56VmxJaXdpWTJoaGJHeGxibWRsVjJsdVpHOTNVMmw2WlNJNklqQXlJbjAiLCJUcmFuc2FjdGlvbklkIjoib2tnUEpMd2F1RlJCQXZOTUdjZzIifSwiT2JqZWN0aWZ5UGF5bG9hZCI6dHJ1ZSwiUmV0dXJuVXJsIjoiaHR0cHM6Ly9zYW5kYm94LWFjcXVpcmVyLXBheW1lbnQucGluZ3Bvbmd4LmNvbS90aHJlZURTL0N5YmVyU291cmNlL3JlZGlyZWN0L2NQZE4xdk51ODYweVA0ZDdtdzZmTGpHcWplOXNBMFBqX19PdG9aTjJ1Z1VqeUprZXpaZ241Mnl2UUdnMk5vR3BYQ25fTnN4NGhrX3NpWXhLdUVqRFhibHVZM1pUYUxNRzNUTEcxUy1QN2N4ZEZlVVhGU3lWSWJDT2dxZFBLOW55R0p3ckhuVnhxaFgxdk0zYm15S3FNUT09In0.ZJu44hBMZx3lBa__pLzku8OvEq7r9FO4PFR-PI9wXiU\",\"authenticationTransactionId\":\"okgPJLwauFRBAvNMGcg2\",\"cardEnrolled\":\"Y\",\"channelName\":\"CyberSource\",\"dsTransId\":\"2d5fb588-1734-4bed-b8eb-68df98d96ff8\",\"paReq\":\"eyJtZXNzYWdlVHlwZSI6IkNSZXEiLCJtZXNzYWdlVmVyc2lvbiI6IjIuMi4wIiwidGhyZWVEU1NlcnZlclRyYW5zSUQiOiJlNDdlYzAzNS1mZDlhLTQzZjUtOTc4Ny0zNmE3YmQyMjE2YTkiLCJhY3NUcmFuc0lEIjoiOTcxMzA0M2YtNWZhYi00YzRlLWI2MTEtMzRjNDIxNTI2NzVlIiwiY2hhbGxlbmdlV2luZG93U2l6ZSI6IjAyIn0\",\"threeDRequestId\":\"0b13e799-b802-4c85-adcc-a8a738ee0381\",\"threeDServerTransactionId\":\"e47ec035-fd9a-43f5-9787-36a7bd2216a9\",\"version\":\"2.2.0\"}",
"threeDContinue": "true"
},
"transactionId": "26062900000150963354",
"threeDContinue": "true",
"paymentMethod": {
"type": "scheme"
},
"captureDelayHours": 0,
"status": "PROCESSING"
}
```
响应关键字段:
| 字段 | 说明 |
|:---|:---|
| `status` | 交易当前状态,可能为 `SUCCESS`、`FAILED` 或 `PROCESSING` |
| `threeDContinue` | 是否需要继续进入 3DS 挑战流程 |
| `threeDUnionParams.threeDRedirectUrl` | 当需要 3DS 挑战时,商户前端应跳转的地址 |
| `transactionId` | PingPong 交易流水号 |
| `requestId` | 支付请求流水号 |
订单的授权结果需根据 `status` 的值进行判断:`SUCCESS` 和 `FAILED` 表示支付终态结果,`PROCESSING` 表示处理中。
下表展示了同步响应中 `status` 字段可能返回的值,请根据指引进行处理:
| `status` | 信息 | 后续操作 |
|:---|:---|:---|
| `SUCCESS` | 授权支付成功。 | 当前无需继续跳转 3DS。请保存 `transactionId`,并继续通过异步通知或交易查询确认最终支付结果。 |
| `FAILED` | 授权支付失败。 | 请提示买家重试或更换卡片。 |
| `PROCESSING` | 交易处理中。 | 如果返回了 `threeDUnionParams.threeDRedirectUrl`,说明需要继续完成 3DS 挑战,商户前端按需跳转至该地址;如果未返回可跳转地址,请继续等待异步通知,或主动调用交易查询确认结果。 |
#### 跳转3DS认证页面(可选)
这是一个可选步骤,仅当同步响应中的 `threeDContinue=true` 时才需要执行。此时说明买家仍需完成 3DS 挑战,同步响应中的 `threeDUnionParams` 字段内容可能如下:
```json:line-numbers:collapsed-lines=3
{
"acsUrl": "https://cas.client.cardinaltrusted.com/centinelapi/V2/Cruise/StepUp",
"threeDRedirectUrl": "https://sandbox-acquirer-static.pingpongx.com/payment/threeDs.html?code=eyJhY3NVcmwiOiJodHRwczovL2Nhcy5jbGllbnQuY2FyZGluYWx0cnVzdGVkLmNvbS9jZW50aW5lbGFwaS9WMi9DcnVpc2UvU3RlcFVwIiwiYXV0aEFjY2Vzc1Rva2VuIjoiZXlKaGJHY2lPaUpJVXpJMU5pSXNJblI1Y0NJNklrcFhWQ0o5LmV5SnFkR2tpT2lJeVpXUmlNMlpqWWkwNFkyTTJMVFF5T0RrdFltWm1PUzFtTUdaa05qTmhZMlZoWkRZaUxDSnBZWFFpT2pFM09ESTNNREl4T1Rjc0ltbHpjeUk2SWpWa05XWXlNMlJsWVdaaE9EQmtNVGxrTURrNVl6WTNOQ0lzSW1WNGNDSTZNVGM0TWpjd016azVOeXdpVDNKblZXNXBkRWxrSWpvaU5qSXlPREZoTXpSaE1HTXhaakF6WVRFME5qbGxOV0V3SWl3aVVHRjViRzloWkNJNmV5SkJRMU5WY213aU9pSm9kSFJ3Y3pvdkwyTmhjeTVqYkdsbGJuUXVZMkZ5WkdsdVlXeDBjblZ6ZEdWa0xtTnZiUzl0WlhKamFHRnVkR0ZqY3k5MGFISmxaV1J6TDNZeUwyTnlaWEVpTENKUVlYbHNiMkZrSWpvaVpYbEtkRnBZVG5wWlYyUnNWa2hzZDFwVFNUWkphMDVUV2xoRmFVeERTblJhV0U1NldWZGtiRlp0Vm5sak1teDJZbWxKTmtscVNYVk5hVFIzU1dsM2FXUkhhSGxhVjFaRlZURk9iR051V214amJGSjVXVmMxZWxOVlVXbFBhVXBzVGtSa2JGbDZRWHBPVXpGdFdrUnNhRXhVVVhwYWFsVjBUMVJqTkU1NU1IcE9iVVV6V1cxUmVVMXFSVEpaVkd0cFRFTkthRmt6VGxWamJVWjFZekJzUlVscWIybFBWR040VFhwQk1FMHlXWFJPVjFwb1dXa3dNRmw2VW14TVYwa3lUVlJGZEUxNlVtcE9SRWw0VGxSSk1rNTZWbXhKYVhkcFdUSm9hR0pIZUd4aWJXUnNWakpzZFZwSE9UTlZNbXcyV2xOSk5rbHFRWGxKYmpBaUxDSlVjbUZ1YzJGamRHbHZia2xrSWpvaWIydG5VRXBNZDJGMVJsSkNRWFpPVFVkalp6SWlmU3dpVDJKcVpXTjBhV1o1VUdGNWJHOWhaQ0k2ZEhKMVpTd2lVbVYwZFhKdVZYSnNJam9pYUhSMGNITTZMeTl6WVc1a1ltOTRMV0ZqY1hWcGNtVnlMWEJoZVcxbGJuUXVjR2x1WjNCdmJtZDRMbU52YlM5MGFISmxaVVJUTDBONVltVnlVMjkxY21ObEwzSmxaR2x5WldOMEwyTlFaRTR4ZGs1MU9EWXdlVkEwWkRkdGR6Wm1UR3BIY1dwbE9YTkJNRkJxWDE5UGRHOWFUakoxWjFWcWVVcHJaWHBhWjI0MU1ubDJVVWRuTWs1dlIzQllRMjVmVG5ONE5HaHJYM05wV1hoTGRVVnFSRmhpYkhWWk0xcFVZVXhOUnpOVVRFY3hVeTFRTjJONFpFWmxWVmhHVTNsV1NXSkRUMmR4WkZCTE9XNTVSMHAzY2todVZuaHhhRmd4ZGswelltMTVTM0ZOVVQwOUluMC5aSnU0NGhCTVp4M2xCYV9fcEx6a3U4T3ZFcTdyOUZPNFBGUi1QSTl3WGlVIiwiY2hhbm5lbCI6IkNZQlMifQ==",
"threeDChannel": "CyberSource",
"threeDResult": "{\"ACSUrl\":\"https://cas.client.cardinaltrusted.com/centinelapi/V2/Cruise/StepUp\",\"acsTransId\":\"9713043f-5fab-4c4e-b611-34c42152675e\",\"authAccessToken\":\"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiIyZWRiM2ZjYi04Y2M2LTQyODktYmZmOS1mMGZkNjNhY2VhZDYiLCJpYXQiOjE3ODI3MDIxOTcsImlzcyI6IjVkNWYyM2RlYWZhODBkMTlkMDk5YzY3NCIsImV4cCI6MTc4MjcwMzk5NywiT3JnVW5pdElkIjoiNjIyODFhMzRhMGMxZjAzYTE0NjllNWEwIiwiUGF5bG9hZCI6eyJBQ1NVcmwiOiJodHRwczovL2Nhcy5jbGllbnQuY2FyZGluYWx0cnVzdGVkLmNvbS9tZXJjaGFudGFjcy90aHJlZWRzL3YyL2NyZXEiLCJQYXlsb2FkIjoiZXlKdFpYTnpZV2RsVkhsd1pTSTZJa05TWlhFaUxDSnRaWE56WVdkbFZtVnljMmx2YmlJNklqSXVNaTR3SWl3aWRHaHlaV1ZFVTFObGNuWmxjbFJ5WVc1elNVUWlPaUpsTkRkbFl6QXpOUzFtWkRsaExUUXpaalV0T1RjNE55MHpObUUzWW1ReU1qRTJZVGtpTENKaFkzTlVjbUZ1YzBsRUlqb2lPVGN4TXpBME0yWXROV1poWWkwMFl6UmxMV0kyTVRFdE16UmpOREl4TlRJMk56VmxJaXdpWTJoaGJHeGxibWRsVjJsdVpHOTNVMmw2WlNJNklqQXlJbjAiLCJUcmFuc2FjdGlvbklkIjoib2tnUEpMd2F1RlJCQXZOTUdjZzIifSwiT2JqZWN0aWZ5UGF5bG9hZCI6dHJ1ZSwiUmV0dXJuVXJsIjoiaHR0cHM6Ly9zYW5kYm94LWFjcXVpcmVyLXBheW1lbnQucGluZ3Bvbmd4LmNvbS90aHJlZURTL0N5YmVyU291cmNlL3JlZGlyZWN0L2NQZE4xdk51ODYweVA0ZDdtdzZmTGpHcWplOXNBMFBqX19PdG9aTjJ1Z1VqeUprZXpaZ241Mnl2UUdnMk5vR3BYQ25fTnN4NGhrX3NpWXhLdUVqRFhibHVZM1pUYUxNRzNUTEcxUy1QN2N4ZEZlVVhGU3lWSWJDT2dxZFBLOW55R0p3ckhuVnhxaFgxdk0zYm15S3FNUT09In0.ZJu44hBMZx3lBa__pLzku8OvEq7r9FO4PFR-PI9wXiU\",\"authenticationTransactionId\":\"okgPJLwauFRBAvNMGcg2\",\"cardEnrolled\":\"Y\",\"channelName\":\"CyberSource\",\"dsTransId\":\"2d5fb588-1734-4bed-b8eb-68df98d96ff8\",\"paReq\":\"eyJtZXNzYWdlVHlwZSI6IkNSZXEiLCJtZXNzYWdlVmVyc2lvbiI6IjIuMi4wIiwidGhyZWVEU1NlcnZlclRyYW5zSUQiOiJlNDdlYzAzNS1mZDlhLTQzZjUtOTc4Ny0zNmE3YmQyMjE2YTkiLCJhY3NUcmFuc0lEIjoiOTcxMzA0M2YtNWZhYi00YzRlLWI2MTEtMzRjNDIxNTI2NzVlIiwiY2hhbGxlbmdlV2luZG93U2l6ZSI6IjAyIn0\",\"threeDRequestId\":\"0b13e799-b802-4c85-adcc-a8a738ee0381\",\"threeDServerTransactionId\":\"e47ec035-fd9a-43f5-9787-36a7bd2216a9\",\"version\":\"2.2.0\"}",
"threeDContinue": "true"
}
```
如果需要进入 3DS 挑战流程,请根据不同终端跳转 `threeDRedirectUrl`:
::: warning 3DS 跳转注意事项
- `threeDRedirectUrl` 是 PingPongCheckout 返回的完整跳转地址。商户前端应直接使用服务端返回的原始值,将其作为不透明链接处理,不要自行拼接额外参数,也不要先 `decode` 再重新 `encode`,以免导致 3DS 页面无法正常打开。
- 不要依赖固定域名、固定路径或静态规则识别 3DS 挑战页,应始终以服务端返回的 `threeDRedirectUrl` 为准。
- 建议在顶层页面打开 3DS 挑战,不要在 `iframe` 中承载挑战页,避免跳转、输入或回跳异常。
- App 端建议优先使用系统浏览器或系统级网页容器;如果必须使用 `WKWebView` 或 `WebView`,请提前完成真机验证,确认跳转、回退、键盘和页面缩放行为正常。
:::
::: tabs
@tab Web
```js
function redirectThreeDOnWeb(threeDRedirectUrl) {
if (!threeDRedirectUrl) return;
window.location.assign(threeDRedirectUrl);
}
```
@tab WAP
```js
function redirectThreeDOnWap(threeDRedirectUrl) {
if (!threeDRedirectUrl) return;
window.location.href = threeDRedirectUrl;
}
```
@tab App (iOS)
建议优先拉起系统默认浏览器打开 3DS 页面:
```objc
// Objective-C 示例:
NSURL *url = [NSURL URLWithString:urlString];
if (url) {
[[UIApplication sharedApplication] openURL:url
options:@{}
completionHandler:^(BOOL success) {
if (!success) {
// 引导买家重试或更换卡片
}
}];
}
// Swift 示例:
guard let url = URL(string: urlString) else { return }
UIApplication.shared.open(url, options: [:]) { success in
if !success {
// 引导买家重试或更换卡片
}
}
```
如果业务上必须在 `WKWebView` 中加载,请直接使用服务端返回的原始地址,确保只编码一次。例如,若链接中已经包含 `%20`,不要再次编码成 `%2520`:
```swift
guard let url = URL(string: threeDRedirectUrl) else { return }
let request = URLRequest(url: url)
webView.load(request)
```
@tab App (Android)
建议优先拉起系统默认浏览器或 Chrome Custom Tabs 打开 3DS 页面:
```java
// Java 示例:
try {
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(threeDRedirectUrl));
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
} catch (Exception e) {
e.printStackTrace();
}
// Kotlin 示例:
try {
val intent = Intent(Intent.ACTION_VIEW, Uri.parse(threeDRedirectUrl))
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
startActivity(intent)
} catch (e: Exception) {
e.printStackTrace()
}
```
如果业务上必须在 `WebView` 中加载,建议至少开启以下配置,避免部分发卡行 3DS 页面在 Android 手机上以接近 PC 页的尺寸渲染:
```java
WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setLoadWithOverviewMode(true);
webSettings.setUseWideViewPort(true);
webView.loadUrl(threeDRedirectUrl);
```
:::
::: tip 提示
`threeDRedirectUrl` 是 PingPongCheckout 提供的 3DS 中间页地址。买家访问该地址后,页面会自动继续跳转至发卡行 3DS 挑战页;挑战完成后,PingPongCheckout 会将买家带回您在支付请求中设置的 `payResultUrl`。
:::
### 步骤 2:获取最终支付结果
国际卡支付的最终结果,建议优先通过服务端异步通知确认。若异步通知延迟、未达、回调处理异常,或商户在买家回跳后需要立即核验结果,可在支付后操作中主动调用交易查询。交易查询的完整集成方案请参考 [支付后操作 > 查询交易](#查询交易)。
支付通知示例(仅展示 `bizContent` 内容):
```json:line-numbers:collapsed-lines=16
{
"exchangedCurrency": "USD",
"amount": "10.000000",
"authenticationInfo": {
"avsResult": "Unknown",
"cvvResult": "Y",
"threeDSecure": "Y"
},
"cardInfo": {
"firstName": "zhang",
"isoCountryA2": "US",
"lastName": "san",
"lastFourDigits": "1096",
"cardLevel": "CLASSIC",
"paymentBrand": "Mastercard",
"cardType": "CREDIT",
"issuringBank": "",
"ipCountry": "CN",
"firstSixDigits": "520000",
"isoCountry": "UNITED STATES"
},
"issuerInfo": {
"issuerResultMsg": "Successful approval/completion",
"issuerResultCode": "00"
},
"threeDSecure": "Y",
"transactionTime": "1782794170000",
"transactionId": "26062900000150950001",
"notifyType": "RECHARGE",
"requestId": "PMT-K9X4L2N7QV1782794167312",
"merchantTransactionId": "PMT-K9X4L2N7QV1782794167312",
"paymentMethod": {
"type": "Mastercard"
},
"currency": "USD",
"exchangedAmount": "10.000000",
"captureDelayHours": 0,
"status": "SUCCESS"
}
```
通知关键字段:
| 参数 | 说明 | 处理建议 |
|:---|:---|:---|
| `notifyType` | 通知类型,支付通知固定为 `RECHARGE` | 用于区分通知事件类型 |
| `transactionId` | PingPong 交易流水号 | 保存并用于后续查询、退款、对账 |
| `merchantTransactionId` | 商户网站订单流水号 | 用于定位商户订单 |
| `requestId` | 支付请求流水号 | 用于定位本次支付请求 |
| `amount` / `currency` | 交易金额和币种 | 必须与商户订单金额、币种核对 |
| `status` | 支付结果状态 | 按状态更新商户订单 |
通知中的 `status` 建议按以下方式处理:
| `status` | 处理指引 |
|:---|:---|
| `SUCCESS` | 支付成功,可以进行发货、权益发放或订单完成处理。 |
| `FAILED` | 支付失败,订单保持未支付或失败状态,可允许买家重新支付。 |
| `AUTH_SUCCESS` | 预授权成功,尚未完成最终扣款;如采用手动请款,请按业务流程继续发起请款。 |
| `CANCEL` | 预授权撤销或人工审核拒绝,不可按成功处理。 |
收到通知后,您无需对响应内容进行加签处理。但无论订单支付是否成功,均必须严格按照以下固定格式返回响应。商户服务端应优先返回 HTTP `2xx` 确认已接收。
通知响应示例:
```http
HTTP/1.1 200 OK
Content-Type: text/plain; charset=UTF-8
Content-Length: 2
OK
```
## 支付后操作
以下内容介绍国际卡支付完成后,如何通过服务端主动查询交易状态,以及如何继续处理预授权请款、预授权撤销、退款和对账。
### 查询交易
当买家从支付页面跳回商户结果页、异步通知延迟、未达、回调处理异常,或商户需要执行补偿任务时,可以调用 [交易查询](/notes/zh/checkout/api/getOne/) 获取交易最新状态。
交易查询请求示例(仅展示 `bizContent` 内容):
```json
{
"merchantTransactionId": "PMT-WWK4L1L2Q11782466163266"
}
```
交易查询响应示例(仅展示 `bizContent` 内容):
```json:line-numbers:collapsed-lines=16
{
"threeDSecure": "",
"resultCode": "000000",
"transactionTime": "1782466164000",
"requestId": "PMT-WWK4L1L2Q11782466163266",
"merchantTransactionId": "PMT-WWK4L1L2Q11782466163266",
"currency": "USD",
"exchangedAmount": "10.000000",
"resultMessage": "Transaction succeeded",
"exchangedCurrency": "USD",
"amount": "10.000000",
"authenticationInfo": {
"avsResult": "U",
"cvvResult": "Y",
"threeDSecure": "N"
},
"cardInfo": {
"isoCountryA2": "MY",
"lastFourDigits": "1096",
"cardLevel": "STANDARD",
"paymentBrand": "Mastercard",
"cardType": "CREDIT",
"issuringBank": "PUBLIC BANK BERHAD",
"ipCountry": "CN",
"firstSixDigits": "520000",
"isoCountry": "MALAYSIA"
},
"transactionEndingTime": "1782466168000",
"transactionId": "26062600000050931108",
"token": "919110fb49484e1760b3a206d26909bc4c42d09eef818d113e4b20a83cdc11fb",
"paymentMethod": {
"type": "scheme"
},
"captureDelayHours": 0,
"status": "SUCCESS"
}
```
查询响应关键字段:
| 参数 | 处理方式 |
|:---|:---|
| `resultCode` | `000000` 表示查询请求成功;查询请求成功不等于支付成功 |
| `status` | 商户订单状态应以该字段为准 |
| `transactionId` | 保存为 PingPong 交易流水号,用于后续退款、对账或查询 |
| `amount` / `currency` | 与商户订单金额和币种核对 |
| `transactionEndingTime` | 交易到达终态时间,可用于订单完成时间记录 |
查询状态处理建议:
| `status` | 处理指引 |
|:---|:---|
| `AUTH_SUCCESS` | 预授权成功,尚未完成最终扣款;如采用手动请款,请按业务流程继续发起请款。 |
| `SUCCESS` | 支付成功,可以完成订单,并继续保留交易流水号用于退款、对账或后续查询。 |
| `FAILED` | 支付失败,可提示买家重新支付或更换卡片。 |
| `PROCESSING` | 支付处理中,继续等待异步通知或稍后主动查询确认最终结果。 |
| `CANCEL` | 预授权撤销或人工审核拒绝,不可按成功处理。 |
### 预授权请款
如果原交易启用了手动 Capture,可参考 [预授权请款](/notes/zh/integrate/modify/Capture/) 文档完成后续请款。
### 预授权撤销
如果原交易已完成预授权但尚未请款,可参考 [预授权撤销](/notes/zh/integrate/modify/Void/) 文档停止后续扣款。
### 退款
不同支付方式的退款能力不同,主要包括是否支持退款、退款有效期、是否支持部分退款以及是否支持多次部分退款。请参考 [支付方式](/notes/zh/paymentMethods/overview/) 页面或目标支付方式文档,确认具体退款能力。
支付成功后,如买家申请退款、商户取消已支付订单或需要退回部分或全部款项,您可以调用 [申请退款](/notes/zh/checkout/api/modifications/refund/) 对原交易发起退款。
PingPongCheckout 支持的退款能力如下:
- 支持全额退款,即一次性退回原交易可退金额。
- 支持部分退款,即单次退款金额可小于原交易金额。
- 支持多次部分退款,即同一笔交易可发起多笔退款;累计退款金额需小于等于原交易可退金额。
请参考 [Refund](/notes/zh/integrate/modify/Refund/) 了解退款集成方案。具体发起退款的请求参数、响应字段和处理规则,请参考 [申请退款](/notes/zh/checkout/api/modifications/refund/);若需要确认退款处理结果,请参考 [退款查询](/notes/zh/checkout/api/getRefund/)。
### 对账
如需了解账单生成规则与结算周期,可参考 [结算周期和对账单](/notes/zh/reconciliation/settlementCycle/);如需开通账单下载能力,可参阅 [SFTP服务申请](/notes/zh/reconciliation/transactionStatementDownload/)。