--- title: 跳转收银台 permalink: /notes/zh/integrate/link/ createTime: '2025/03/07 16:01:51' description: '说明跳转收银台接入流程,适合希望快速上线支付并让买家跳转至 PingPong 托管页面完成付款的商户。' --- PingPong Checkout 是一款专为全球化业务打造的高效、低代码支付收银台解决方案。我们致力于以极简的接入成本,为商户提供安全、合规、高转化的一站式支付体验,助力业务快速出海与规模化增长。 适用场景:适合希望快速上线支付能力,且采用重定向托管模式(即买家跳转至 PingPong 专属安全页面完成支付)的商户。 ::: tip 适用场景 适合希望快速上线支付能力,且采用重定向托管模式(即买家跳转至 PingPong 专属安全页面完成支付)的团队;若需将收银台直接嵌入商户页面,建议选择[内嵌 SDK 方案](/notes/zh/integrate/sdk-v4-preview/)。 ::: ## 支付体验 ### Web 体验 在跳转收银台模式下,买家在商户网页确认订单后,会跳转至 PingPong 托管收银台完成支付。PingPong Checkout 负责承载支付方式展示、支付信息填写、结果页展示与商户回跳,帮助商户以更低开发成本快速上线标准化网页支付体验。  ### Mobile 体验 在移动端场景下,买家从手机网页或 App 跳转至 PingPong 托管收银台完成支付。收银台针对小屏幕与触控交互进行了专门优化,并可在支付完成后按配置回跳至商户页面,帮助商户更快提供一致、顺畅的移动端支付体验。  ## 支付流程 ```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', 'c0': '#E8F4FD', 'c1': '#D1E7DD', 'c2': '#B3D9FF', 'c3': '#81C784', 'noteBkgColor': '#E1F5FE', 'noteTextColor': '#01579B', 'noteBorderColor': '#0288D1', 'loopTextColor': '#0D47A1', 'activationBkgColor': '#B3E5FC', 'activationBorderColor': '#0277BD' } }}%% %% agent-tag: hosted-redirect-checkout-flow sequenceDiagram participant Client as 💻 客户端 participant Merchant as 🏪 商户服务端 participant PP as 🔄 PingPong服务端 participant Checkout as 🛒 PingPong收银台 participant Bank as 🏦 发卡行 Note over Client, Merchant: 📦 订单创建阶段 Client->>Merchant: 1. 提交订单并发起支付 Merchant->>PP: 2. 调用 prePay(预下单)接口 PP-->>Merchant: 3. 返回 paymentUrl Merchant-->>Client: 4. 返回 paymentUrl Note over Client, Bank: 🛒 收银台支付阶段 Client->>Checkout: 5. 跳转到 PingPong 收银台 Checkout->>PP: 6. 初始化会话并加载支付方式 PP-->>Checkout: 7. 返回可用支付方式 Client->>Checkout: 8. 选择支付方式并确认支付 Checkout->>PP: 9. 提交支付请求 alt 🟢 支付成功 PP-->>Checkout: 10. 返回支付成功结果 Checkout-->>Client: 11. 展示结果页并按配置回跳商户 else 🔐 需要3D验证 PP->>Bank: 12. 发起 3D Secure 验证 Bank-->>Client: 13. 买家完成验证 Bank-->>PP: 14. 返回验证结果 PP-->>Checkout: 15. 返回最终支付结果 Checkout-->>Client: 16. 展示结果页并按配置回跳商户 else ❌ 支付失败 PP-->>Checkout: 17. 返回支付失败结果 Checkout-->>Client: 18. 展示失败页或引导重试 end Note over Merchant, PP: 📡 异步通知与结果确认 PP->>Merchant: 19. 异步通知支付结果 Merchant->>Merchant: 20. 更新订单状态 Merchant-->>PP: 21. 返回 HTTP 200 ``` 流程说明: 1. 买家在商户站点提交订单并发起支付。 2. 商户服务端调用 [prePay(预下单)接口](/notes/zh/checkout/api/reserve/) 创建收银台支付会话。 3. PingPongCheckout 返回 `paymentUrl`、`transactionId` 等信息。 4. 商户服务端将 `paymentUrl` 返回给前端,前端跳转至 PingPong Checkout Page。 5. 买家在 PingPong 托管收银台选择支付方式并完成支付;如需 3D Secure 验证,由收银台引导买家完成验证。 6. 支付完成后,PingPongCheckout 通过 `notificationUrl` 推送支付结果。 7. 如果商户长时间未收到异步通知,或需要在买家回到商户页面后立即核验结果,应主动调用 [交易查询](/notes/zh/checkout/api/getOne/) 确认最终状态。 ::: warning 注意 买家看到收银台结果页或回到商户结果页,只表示前端支付流程已经结束,不代表订单一定支付成功。订单落账、发货或发放权益必须以服务端异步通知或交易查询结果为准。 ::: ## 接口列表 跳转收银台通常涉及以下接口和通知: | 阶段 | 类型 | 文档 | 是否必接 | 用途 | |:---|:---|:---|:---:|:---| | 支付创建 | API | [prePay(预下单)接口](/notes/zh/checkout/api/reserve/) | 必接 | 创建托管收银台支付会话并获取 `paymentUrl` | | 支付结果 | 通知 | [支付通知](/notes/zh/notify/payment/notify/) | 必接 | 接收最终支付结果并更新商户订单状态 | | 支付结果 | API | [交易查询](/notes/zh/checkout/api/getOne/) | 推荐 | 在通知延迟、未达或买家回跳后需要补偿确认时主动核验交易状态 | | 请款 | API | [预授权请款](/notes/zh/checkout/api/modifications/capture/) | 按需 | 对已授权且需手动请款的交易发起 capture | | 请款 | 通知 | [预授权请款通知](/notes/zh/notify/status/captureNotify/) | 按需 | 接收手动请款结果并更新请款状态 | | 请款 | API | [预授权请款查询](/notes/zh/checkout/api/getCapture/) | 推荐 | 在请款通知延迟、未达或对账时主动确认请款状态 | | 退款 | API | [申请退款](/notes/zh/checkout/api/modifications/refund/) | 按需 | 对成功支付的交易发起退款 | | 退款 | 通知 | [退款通知](/notes/zh/notify/refundNotify/) | 按需 | 接收退款结果并更新退款状态 | | 退款 | API | [退款查询](/notes/zh/checkout/api/getRefund/) | 推荐 | 在退款通知延迟、未达或对账时主动确认退款状态 | ## 集成准备 开始开发前,请确认以下信息已经准备完成。 | 准备项 | 说明 | |:---|:---| | 账号信息 | 已获取 `clientId`、`accId`,并确认店铺状态可正常交易 | | 支付方式 | 已开通本次需要展示在收银台中的支付方式,并确认支持的国家、币种、金额范围和退款能力 | | 签名能力 | 已根据 [签名规约](/notes/zh/onlinePayment/developer/sign/) 完成请求签名,所有请求参数都需要参与签名 | | 验签能力 | 已能对 PingPongCheckout 返回响应和异步通知中的 `sign` 执行验签 | | 通知地址 | 已准备公网可访问的 `notificationUrl`,用于接收支付结果异步通知 | | 结果页地址 | 已准备 `payResultUrl`,用于买家完成支付流程后回到商户页面 | | 订单状态处理 | 已在商户系统内保存 `merchantTransactionId`、`transactionId` 和订单状态,并支持幂等更新 | | 前端跳转能力 | 已确认 Web、WAP 或 App 场景中可以正常打开 `paymentUrl`,并完成浏览器兼容性验证 | ::: warning 注意 `notificationUrl` 必须是公网可访问的完整地址,不能填写 `localhost`、`127.0.0.1`、内网 IP,也不要在 URL 后携带 query 参数。 ::: ## 集成步骤 请按以下步骤完成集成: 1. [步骤 1:创建支付会话](#步骤-1-创建支付会话) 2. [步骤 2:跳转至 PingPong 收银台](#步骤-2-跳转至-pingpong-收银台) 3. [步骤 3:买家完成支付](#步骤-3-买家完成支付) 4. [步骤 4:获取最终支付结果](#步骤-4-获取最终支付结果) ### 步骤 1:创建支付会话 买家在商户站点确认订单后,商户服务端调用 [prePay(预下单)接口](/notes/zh/checkout/api/reserve/) 创建支付会话。请不要在浏览器或 App 客户端直接调用该接口,避免签名密钥暴露。 支付请求关键参数: | 参数 | 必填 | 说明 | |:---|:---:|:---| | `captureDelayHours` | O | 资金请款方式。默认自动请款;如需手动请款,请按支付方式能力和接口规则配置 | | `amount` | M | 交易金额 | | `currency` | M | ISO 4217 三位交易币种 | | `merchantTransactionId` | M | 商户网站订单流水号,订单唯一标识 | | `shopperIP` | M | 买家下单 IP | | `merchantUserId` | M | 商户侧用户唯一 ID | | `goods` | M | 商品信息,至少包含商品名称、单价和数量 | | `customer` | C | 买家信息。不同支付方式可能要求邮箱、手机号或账单信息,请以目标支付方式要求为准 | | `paymentMethods` | O | 指定收银台可展示的支付方式范围,不传或为空时按店铺配置展示 | | `notificationUrl` | O | 支付结果通知地址,强烈建议传入 | | `closeNotificationUrl` | O | 关单通知地址。传入后,可接收主动关单或被动关单结果通知 | | `payResultUrl` | O | 买家完成支付流程后的商户结果页地址 | | `language` | O | 收银台展示语言,未传入时默认展示英文,枚举值参考[语言列表](/notes/zh/appendix/languageCode/) | 有关完整参数的更多信息,请参阅 [prePay(预下单)接口](/notes/zh/checkout/api/reserve/)。 支付请求示例: ```json { "captureDelayHours": "0", "amount": "100", "currency": "USD", "merchantTransactionId": "{{merchantTransactionId}}", "payResultUrl": "https://test-acquirerpay.pingpongx.com/qa/result.html", "notificationUrl": "https://test-acquirerpay.pingpongx.com/qa/result.html", "language": "en", "shopperIP": "222.126.52.23", "merchantUserId": "USER_12345", "customer": { "email": "buyer@gmail.com" }, "paymentMethods": [ "VISA", "Mastercard", "Alipay", "GooglePay", "ApplePay" ], "goods": [ { "name": "商品名称mepsking1", "description": "商品描述", "unitPrice": "1", "number": "1", "virtualProduct": "Y", "imgUrl": "https://xiu.mepsking.top/material/1/16606169805015585.png" } ] } ``` 支付响应示例: ```json { "amount": "100", "paymentUrl": "https://sandbox-safepay.pingpongx.com?token=EU:OYUi5wmfOMRNFJnqmPRR2QHvtJihf8cTKvay2yeHTuRbnqIBpMJra9KtN9YQ_sXo8DsnSxGh_e_6tMpzRzlXjA==", "transactionId": "26070600000751051115", "token": "EU:OYUi5wmfOMRNFJnqmPRR2QHvtJihf8cTKvay2yeHTuRbnqIBpMJra9KtN9YQ_sXo8DsnSxGh_e_6tMpzRzlXjA==", "merchantTransactionId": "PMT-A1XGH96WNE1783303688835", "currency": "USD", "innerJsUrl": "https://payssr-cdn.pingpongx.com/production-fra/acquirer-checkout-web/sandbox/pp-checkout.js?token=EU:OYUi5wmfOMRNFJnqmPRR2QHvtJihf8cTKvay2yeHTuRbnqIBpMJra9KtN9YQ_sXo8DsnSxGh_e_6tMpzRzlXjA==" } ``` 支付响应关键字段: | 参数 | 说明 | |:---|:---| | `transactionId` | PingPong 交易流水号,用于后续查询、退款、对账 | | `merchantTransactionId` | 商户网站订单流水号 | | `paymentUrl` | PingPong 托管收银台访问地址,跳转收银台模式使用 | | `token` | 收银台 Token,内嵌 SDK 或其他收银台能力可能使用 | | `innerJsUrl` | JS-SDK 地址,内嵌 SDK 模式使用 | ### 步骤 2:跳转至 PingPong 收银台 商户服务端获取 `bizContent.paymentUrl` 后,将该地址返回给前端。前端应直接使用 PingPongCheckout 返回的完整链接跳转,不要自行拼接额外参数,也不要替换域名或路径。 以下为商户前端加载 `paymentUrl` 的示例代码: