--- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/en/guide/llms-integration/index.md description: >- This document explains how to enable AI tools (Cursor, Windsurf, Claude) to automatically fetch PingPongCheckout API documentation through the llms.txt protocol for intelligent code completion and API call assistance. --- # LLM Documentation Integration PingPongCheckout documentation supports the [llms.txt protocol](https://llmstxt.org/), allowing AI coding tools to directly access API documentation for more accurate code suggestions and API call assistance. ## What is llms.txt llms.txt is a documentation standard designed for LLMs (Large Language Models), providing structured document indexes that enable AI tools to: * Quickly discover documentation structure * Get detailed descriptions of specific APIs * Understand parameter definitions and response formats ## File Locations | File | Path | Description | |------|------|-------------| | llms.txt | `/llms.txt` | Documentation directory index (concise) | | llms-full.txt | `/llms-full.txt` | Full documentation content | | OpenAPI Spec | `/api/openapi.json` | OpenAPI 3.1.0 specification | | API Index | `/api/index.json` | All API endpoints index | ## AI Tool Integration ### Cursor Create a `.cursorrules` file in your project root: ```text When calling PingPongCheckout APIs, refer to the following documentation: - Documentation Index: https://acquirer-api-docs-v4.pingpongx.com/llms.txt - OpenAPI Specification: https://acquirer-api-docs-v4.pingpongx.com/api/openapi.json ``` ### Windsurf Add to `.windsurfrules`: ```text PingPongCheckout API Documentation: - https://acquirer-api-docs-v4.pingpongx.com/llms.txt - https://acquirer-api-docs-v4.pingpongx.com/api/openapi.json ``` ### Claude Code Configure in `CLAUDE.md`: ```markdown ## API Documentation Reference When consulting PingPongCheckout API: 1. Read /llms.txt for documentation directory 2. Read /api/openapi.json for API specification 3. Follow .md links in the directory for detailed documentation ``` ### Generic HTTP Access Any AI tool supporting HTTP requests can directly fetch: ```bash # Get documentation directory curl https://acquirer-api-docs-v4.pingpongx.com/llms.txt # Get OpenAPI specification curl https://acquirer-api-docs-v4.pingpongx.com/api/openapi.json # Get API index curl https://acquirer-api-docs-v4.pingpongx.com/api/index.json ``` ## API Specification Files ### OpenAPI Specification `/api/openapi.json` contains the complete OpenAPI 3.1.0 specification: * All API endpoint definitions * Request parameters and response formats * Authentication methods * Error code definitions ### API Index `/api/index.json` provides a quick API endpoint index: ```json { "version": "1.0.0", "count": 37, "apis": [ { "id": "en-v4-payment-prePay", "name": "Checkout Pre-order (Hosted Mode)", "path": "/v4/payment/prePay", "method": "POST", "jsonUrl": "/api/en/en-v4-payment-prePay.json", "mdUrl": "/api/en/en-v4-payment-prePay.md" } ] } ``` ## Best Practices 1. **Prefer OpenAPI Specification** - Get complete type definitions and parameter constraints 2. **Combine with llms.txt Directory** - Quickly locate required documentation 3. **Cache Documentation Content** - Avoid repeated requests and improve response speed ## Supported AI Tools | Tool | Integration Method | Support Level | |------|-------------------|---------------| | Cursor | .cursorrules | ✅ Fully Supported | | Windsurf | .windsurfrules | ✅ Fully Supported | | Claude Code | CLAUDE.md | ✅ Fully Supported | | Cline | .clinerules | ✅ Fully Supported | | GitHub Copilot | - | ⚠️ Manual Configuration Required | --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/api/services/InPersonPayments/cancel/index.md description: >- 订单取消接口用于取消未完成的订单。适用于商户需要取消正在处理中的交易场景,支持通过商户订单流水号进行取消操作。取消结果包括取消成功、取消失败(已支付完成)和取消处理中三种状态。 --- # 订单取消接口 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/api/services/InPersonPayments/cmdDeclare/index.md description: >- POS功能指令接口用于向POS设备发送功能类指令,支持汇总查询、结算执行和打印最后一笔交易等操作。通过此接口,商户可以远程控制POS设备完成日常运营所需的各项功能操作。 --- # POS功能指令接口 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/api/services/InPersonPayments/gmc/heartbeat/index.md description: 'GMC串口心跳接口用于保持SAAS与POS设备之间的连接状态。建议每30秒发送一次心跳包,连续3次无响应可判定设备离线。bizContent字段可为空。' --- # GMC串口心跳接口 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/api/services/InPersonPayments/gmc/pay/index.md description: >- GMC串口支付接口用于通过串口与POS设备通信完成支付交易。支持创建订单并立即执行支付,适用于SAAS收银系统与POS设备集成的线下支付场景。采用串口通信协议和SHA256签名保证数据安全,支持客户信息和商品信息传递。 --- # GMC串口支付接口 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/api/services/InPersonPayments/gmc/payQuery/index.md description: >- GMC串口交易查询接口用于查询支付交易的状态和详情。通过串口与POS设备通信,支持按商户订单号或PingPong交易流水号查询交易状态、金额、时间等详细信息。采用SHA256签名保证数据安全,适用于对账、状态确认等场景。 --- # GMC串口交易查询接口 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/api/services/InPersonPayments/gmc/query/index.md description: >- GMC串口查询接口用于查询支付或退款交易的状态和详情。通过串口与POS设备通信,支持按商户订单号查询交易状态、金额、时间等详细信息。采用SHA256签名保证数据安全,适用于对账、状态确认等场景。 --- # GMC串口查询接口 ::: warning 已弃用 该接口已弃用,请使用以下独立接口: * **交易查询**: [GMC串口交易查询接口](/notes/zh/api/services/InPersonPayments/gmc/payQuery/) - 用于查询支付交易状态 * **退款查询**: [GMC串口退款查询接口](/notes/zh/api/services/InPersonPayments/gmc/refundQuery/) - 用于查询退款交易状态 ::: --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/api/services/InPersonPayments/gmc/refund/index.md description: >- GMC串口退款接口用于对已完成的支付交易发起退款请求。通过串口与POS设备通信,支持全额和部分退款。采用SHA256签名保证数据安全,退款到账时间根据支付方式不同而异,通常3-7个工作日。 --- # GMC串口退款接口 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/api/services/InPersonPayments/gmc/refundQuery/index.md description: >- GMC串口退款查询接口用于查询退款交易的状态和详情。通过串口与POS设备通信,支持按商户退款流水号或PingPong退款流水号查询退款状态、金额、时间等详细信息。采用SHA256签名保证数据安全,适用于退款对账、状态确认等场景。 --- # GMC串口退款查询接口 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/api/services/InPersonPayments/gmc/reprint/index.md description: >- GMC串口重打印接口用于重新打印上一笔交易的小票凭证。通过串口与POS设备通信,适用于小票打印失败或需要补打凭证的场景。bizContent字段可为空,默认打印最后一笔交易。 --- # GMC串口重打印接口 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/api/services/InPersonPayments/gmc/settlement/index.md description: >- GMC串口结算接口用于触发POS设备执行批量结算操作。通常在每日营业结束后调用,清算当日所有交易批次。bizContent字段可为空。结算完成后POS设备会打印结算凭证。 --- # GMC串口结算接口 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/api/services/InPersonPayments/gmc/transactionCancel/index.md description: >- GMC串口交易取消接口用于取消进行中的交易。通过串口与POS设备通信,根据商户交易流水号取消交易。采用SHA256签名保证数据安全,适用于用户取消支付、交易超时等场景。 --- # GMC串口交易取消接口 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/api/services/InPersonPayments/paymentQuery/index.md description: >- 单笔交易查询API用于获取特定交易的详细信息。适用于需要追踪或验证某一笔支付状态的情况,支持通过交易ID来调用。主要功能包括返回交易状态、金额及时间等关键数据。 --- # 单笔交易查询 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/api/services/InPersonPayments/refund/index.md description: >- 申请退款API用于处理PingPongCheckout中已支付订单的退款请求。适用于需要为客户提供退款服务的场景,支持全球主要市场的多种货币。通过此接口,开发者可以指定退款金额、原因等关键参数,实现快速且安全的资金回退。 --- # 申请退款 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/api/services/InPersonPayments/refundQuery/index.md description: >- 退款查询API允许商家获取特定退款请求的状态和详情。适用于需要追踪或验证退款处理情况的场景,支持全球多个市场。通过提供退款ID作为关键参数,可实时获取退款状态、金额及处理时间等信息。 --- # 退款查询 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/api/services/InPersonPayments/unifiedPay/index.md description: >- 下单并支付接口提供创建订单及立即执行支付的功能。适用于需要快速完成从下单到收款流程的在线业务场景。支持全球主要货币,涵盖信用卡、本地支付方式等多种支付手段。关键参数包括商户ID、订单金额、商品描述等。通过此API,商家能够简化购物流程,提升用户体验。 --- # 下单并支付接口 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/api/services/marketplaces/mpCapture/index.md description: >- CAPTURE-预授权确认API用于将已预授权的支付金额正式扣款。适用于需要先验证买家支付能力再发货的场景,支持全球主要市场。通过调用此API,商家可以指定交易ID、金额等关键参数完成扣款流程。 --- # 预授权权确认 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/api/services/marketplaces/mpRefund/index.md description: >- 申请退款API允许商家发起退款请求。适用于需要处理消费者退款请求的场景,支持全球多个市场。主要功能包括指定订单ID、退款金额及原因。关键参数有order_id(订单标识)、refund_amount(退款金额)和reason(退款理由)。 --- # 申请退款 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/api/services/marketplaces/mpUniformly/index.md description: >- Marketplaces Direct API提供非托管模式下的支付解决方案。适用于希望直接管理支付流程的电商平台,支持卡支付并要求接入风控组件以确保交易安全。该API允许商家自定义支付界面,同时需严格遵守相关安全规范。 --- # Direct API ::: danger 注意 Direct API模式下卡支付必须接入风控组件 ::: --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/api/services/marketplaces/mpVoid/index.md description: >- VOID-预授权撤销API用于取消已创建但尚未捕获的预授权交易。适用于商家在不需要完成支付时释放消费者资金,减少不必要的财务处理。主要功能包括指定交易ID以执行撤销操作,支持全球范围内的多种货币类型。关键参数涉及交易标识符、撤销原因等,确保资金管理的灵活性与安全性。 --- # VOID-预授权撤销 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/api/services/marketplaces/submerchant/insertSubmerchant/index.md description: >- 新增子商户接口用于在PingPongCheckout系统中创建新的子商户账户。适用于需要管理多个子商户的电商平台或企业。主要功能包括提交子商户信息及获取创建结果。关键参数有子商户名称、联系信息等。 --- # 新增子商户 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/api/services/marketplaces/submerchant/updateSubmerchant/index.md description: >- 批量修改子商户接口用于同时更新多个子商户信息。适用于需要大规模调整子商户数据的场景,支持通过单次请求提交多条记录以提高效率。主要功能包括修改子商户名称、状态等关键信息。 --- # 批量修改子商户 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/appendix/actionCode/index.md description: >- 发卡行响应码列出支付处理过程中可能遇到的各种响应代码,包括Discover、Visa和Mastercard的响应码。这些代码用于解释交易被接受、拒绝或需要进一步处理的原因,帮助商户和技术人员快速定位问题并采取相应措施。 --- # Issuer Response Codes ## 发卡行响应码 ## Discover 响应码 ## 参考资料 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/appendix/apm/hosted/america/index.md description: >- 美洲地区可用的多种支付方式及其交易币种,涵盖巴西、智利、阿根廷、加拿大、哥伦比亚、多米尼加、墨西哥、秘鲁、美国和乌拉圭。每种支付方式列出支持的货币单位及备注信息,适用于需要了解各国家和地区支付选项的商户和技术人员。 --- # 美洲-APM ### 巴西(BR) | 支付方式 | 交易币种 | 备注 | |:--------------|:-----|:----| | Itau | BRL | | | Bradesco | BRL | | | Banco Brasil | BRL | | | Caixa | BRL | | | Santander | BRL | | | boleto | BRL | | | PIX | BRL | | | Bank Transfer | BRL | | | Skrill | EUR | | ### 智利(CL) | 支付方式 | 交易币种 | 备注 | |:-----------|:-----|:----| | Multicaja | CLP | | | Sencillito | CLP | | | ServiPag | CLP | | | WebPay | CLP | | | ServiPag | COP | | | Skrill | EUR | | ### 阿根廷(AR) | 支付方式 | 交易币种 | 备注 | |:-----------|:-----|:----| | Pago Fácil | ARS | | | Rapi Pago | ARS | | | Skrill | EUR | | ### 加拿大(CA) | 支付方式 | 交易币种 | 备注 | |:------------|:-----|:----| | Paysafecard | CAD | | | Skrill | EUR | | ### 哥伦比亚(CO) | 支付方式 | 交易币种 | 最小金额(INR) | 备注 | |:---------|:-----|:----------|:----| | ServiPag | COP | | | | PSE | COP | | | ### 多米尼加(CO) | 支付方式 | 交易币种 | 最小金额(INR) | 备注 | |:-------|:-----|:----------|:----| | Skrill | EUR | | | ### 墨西哥(MX) | 支付方式 | 交易币种 | 备注 | |:--------------|:-----|:----| | OXXO | MXN | | | SPEI | MXN | | | Bank Transfer | MXN | | | BBVA Bancomer | MXN | | | Banorte | MXN | | | Santander | MXN | | | Paysafecard | EUR | | ### 秘鲁(PE) | 支付方式 | 交易币种 | 备注 | |:------------|:-----|:----| | Paysafecard | EUR | | ### 美国(US) | 支付方式 | 交易币种 | 备注 | |:------------|:-----|:----| | Paysafecard | USD | | | Skrill | EUR | | | ### 乌拉圭(UY) | 支付方式 | 交易币种 | 备注 | |:------------|:-----|:----| | Paysafecard | EUR | | --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/appendix/apm/hosted/asia/index.md description: >- 亚洲-APM文档列出了中国、日本、菲律宾和韩国的主要在线支付方式及其支持的交易币种。适用于需要了解或集成这些国家本地支付解决方案的商家和技术人员。中国支持Alipay和WeChat,涵盖多种国际货币;日本包括便利店支付、Pay-easy等;菲律宾有Dragonpay;韩国则详细列举了多家银行和信用卡 --- # 亚洲-APM ### 中国(CN) | 支付方式 | 交易币种 | 备注 | |:-------|:----------------------------------|:----| | Alipay | AUD, CAD, EUR, GBP, HKD, SGD, USD || | WeChat | CNY,EUR,GBP || ### 日本(JP) | 支付方式 | 交易币种 | 备注 | |:------------|:-----|:----| | Konbini | JPY | | | Pay-easy | JPY | | | PayPay | JPY | | | LINE Pay | JPY | | | Rakuten Pay | JPY | | ### 菲律宾(PH) | 支付方式 | 交易币种 | 备注 | |:----------|:-----|:----| | Dragonpay | COP | | ### 韩国(KR) | 支付方式 | 交易币种 | 备注 | |:-----------------|:-----|:----| | KBCard | | | | HANACard | | | | SAMSUNGCard | | | | SHINHANCard | | | | HYUNDAICard | | | | LOTTECard | | | | NONGHYUPCard | | | | HANACard | | | | CITYCard | | | | WOORICard | | | | SUHYUPCard | | | | JEJUCard | | | | JEONBUKCard | | | | KWANGJUCard | | | | KAKAOBank | | | | KBank | | | | MireaAssetDaewoo | | | | KonaCard | | | | IBK | | | | SC | | | | Suhyup | | | | Shinhan | | | | KB Kookmin | | | | KEB Hana | | | | Woori | | | | Busan | | | | Koreapost | | | | Gwangju | | | | Citi | | | | KDB | | | | Kyongnam | | | | Daegu | | | | Sinhyup | | | | KFCC | | | | Jeonbuk | | | | Jeju | | | | NCFC | | | | Miraeasset | | | | Shinhaninvest | | | | HMC | | | | Hanhwa | | | | Samsung | | | | Tongyang | | | | SK | | | | Daewoo | | | | Hyundai | | | | Wooriinvest | | | | Daishin | | | | Dongbu | | | | Hanadaetoo | | | | Koreaninvest | | | | Hiinvest | | | | Meritz | | | | Shinyoung | | | | Eugeneinvest | | | | Kakaopay | | | | TOSS | | | | PAYCO | | | ### 印度(IN) | 支付方式 | 交易币种 | 备注 | |:-------------------|:-----|:----| | UPI | INR || | Permata VA | IDR || | Mandiri VA | IDR || | BNI VA | IDR || | BRI VA | IDR || | CIMB VA | IDR || | BCA VA | IDR || | DOKU VA (Artajasa) | IDR || | OVO Open API | IDR || | ShopeePay | IDR || | Indomaret | IDR || | AkuLaku | IDR || ### 泰国(TH) | 支付方式 | 交易币种 | 备注 | |:---------------------|:-----|:----| | BangKok Bank | THB || | Krung Tha Bank | THB || | Krungsri | THB || | Siam Commercial Bank | THB || | Tesco Lotus | THB || | Line Pay | THB || | True Money | THB || | GrabPay | THB || | ShopeePay | THB || | Prompt Pay | THB || ### 新加坡(SG) | 支付方式 | 交易币种 | 备注 | |:--------|:-----|:----| | eNETS | SGD || | GrabPay | SGD || ### 印度尼西亚(ID) | 支付方式 | 交易币种 | 备注 | |:-----|:-----|:----| | Doku | IDR || ### 以色列(IL) | 支付方式 | 交易币种 | 备注 | |:-------|:-----|:----| | Skrill | EUR | | --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/appendix/apm/hosted/europe/index.md description: >- 欧洲-APM文档列出了安道尔、奥地利、比利时、保加利亚、瑞士、塞浦路斯和捷克等国家的可用支付方式及其交易币种。涵盖SEPA Direct Debit、Trustly、Klarna Pay later、Paysafecard等多种支付选项,适用于需要了解各国支付方式及支持货币的企业和个人。 --- # 欧洲-APM ### 安道尔(AD) | 支付方式 | 交易币种 | 备注 | |:------------------|:-----|:----| | SEPA Direct Debit | EUR | | ### 奥地利(AT) | 支付方式 | 交易币种 | 备注 | |:------------------|:----------------------------|:----| | Trustly | EUR | | | Klarna Pay later | EUR | | | Klarna Slice it | EUR | | | Klarna Pay now | EUR | | | SEPA Direct Debit | EUR | | | Paysafecard | EUR | | | EPS | EUR | | | Skrill | EUR | | | Trustly sale | EUR,GBP,PLN,HUF,CZK,DKK,SEK | | ### 比利时(BE) | 支付方式 | 交易币种 | 备注 | |:------------------|:----------------------------|:----| | SEPA Direct Debit | EUR | | | Paysafecard | EUR | | | Bancontact | EUR | | | Skrill | EUR | | | Trustly sale | EUR,GBP,PLN,HUF,CZK,DKK,SEK | | ### 保加利亚(BG) | 支付方式 | 交易币种 | 备注 | |:------------------|:-----|:----| | SEPA Direct Debit | EUR | | | Paysafecard | EUR | | ### 瑞士(CH) | 支付方式 | 交易币种 | 备注 | |:------------------|:-----|:----| | SEPA Direct Debit | EUR | | | Paysafecard | CHF | | ### 塞浦路斯(CY) | 支付方式 | 交易币种 | 备注 | |:------------------|:-----|:----| | SEPA Direct Debit | EUR | | | Paysafecard | EUR | | | Skrill | EUR | | ### 捷克(CZ) | 交易币种 | 支付方式 | 备注 | |:-------------|:----------------------------|:----| | EUR | SEPA Direct Debit | | | Paysafecard | EUR | | | Skrill | EUR | | | Trustly sale | EUR,GBP,PLN,HUF,CZK,DKK,SEK | | ### 丹麦(DK) | 支付方式 | 交易币种 | 备注 | |:------------------|:----------------------------|:----| | Trustly | EUR/DKK | | | Klarna Pay later | DKK | | | Klarna Slice it | DKK | | | SEPA Direct Debit | EUR | | | Paysafecard | EUR | | | Skrill | EUR | | | Trustly sale | EUR,GBP,PLN,HUF,CZK,DKK,SEK | | ### 爱沙尼亚(EE) | 支付方式 | 交易币种 | 备注 | |:------------------|:-----|:----| | Trustly | EUR | | | Paysera | EUR | | | SEPA Direct Debit | EUR | | | Skrill | EUR | | | | Trustly sale | EUR,GBP,PLN,HUF,CZK,DKK,SEK | | ### 西班牙(ES) | 支付方式 | 交易币种 | 备注 | |:------------------|:-----|:----| | SEPA Direct Debit | EUR | | | Paysafecard | EUR | | | Mybank | EUR | | | Skrill | EUR | | | | Trustly sale | EUR,GBP,PLN,HUF,CZK,DKK,SEK | | ### 芬兰(FI) | 支付方式 | 交易币种 | 备注 | |:------------------|:----------------------------|:----| | Trustly | EUR | | | Klarna Pay later | EUR | | | Klarna Slice it | EUR | | | SEPA Direct Debit | EUR | | | Paysafecard | EUR | | | Skrill | EUR | | | | Trustly sale | EUR,GBP,PLN,HUF,CZK,DKK,SEK | | ### 法国(FR) | 支付方式 | 交易币种 | 备注 | |:------------------|:-----|:----| | SEPA Direct Debit | EUR | | | Paysafecard | EUR | | | Skrill | EUR | | | ### 德国(DE) | 支付方式 | 交易币种 | 备注 | |:------------------|:----------------------------|:----| | Trustly | EUR | | | Klarna Pay later | EUR | | | Klarna Slice it | EUR | | | Klarna Pay now | EUR | | | SEPA Direct Debit | EUR | | | Paysafecard | EUR | | | Giropay | EUR | | | Skrill | EUR | | | Trustly sale | EUR,GBP,PLN,HUF,CZK,DKK,SEK | | ### 俄罗斯(RU) | 支付方式 | 交易币种 | 最小金额(INR) | 备注 | |:--------|:-----|:----------|:----| | Paysera | EUR | | | | Skrill | EUR | | | ### 塞尔维亚(RS) | 支付方式 | 交易币种 | 最小金额(INR) | 备注 | |:-------|:-----|:----------|:----| | Skrill | EUR | | | ### 拉脱维亚(LV) | 支付方式 | 交易币种 | 备注 | |:------------------|:-----|:----| | Trustly | EUR | | | Paysera | EUR | | | SEPA Direct Debit | EUR | | | Skrill | EUR | | | Trustly sale | EUR,GBP,PLN,HUF,CZK,DKK,SEK | | ### 立陶宛(LT) | 支付方式 | 交易币种 | 备注 | |:------------------|:-----|:----| | Trustly | EUR | | | Paysera | EUR | | | SEPA Direct Debit | EUR | | | Paysafecard | EUR | | | Trustly sale | EUR,GBP,PLN,HUF,CZK,DKK,SEK | | ### 荷兰(NL) | 支付方式 | 交易币种 | 备注 | |:------------------|:-----|:----| | Trustly | EUR | | | Klarna Pay later | EUR | | | Klarna Pay now | EUR | | | SEPA Direct Debit | EUR | | | Paysafecard | EUR | | | iDEAL | EUR | | | Skrill | EUR | | | Trustly sale | EUR,GBP,PLN,HUF,CZK,DKK,SEK | | ### 挪威(NO) | 支付方式 | 交易币种 | 备注 | |:-----------------|:--------|:----| | Trustly | EUR/NOK | | | Klarna Pay later | EUR | | | Klarna Slice it | NOK | | | SEPA Direct Debit | EUR | | | Paysafecard | NOK | | | Trustly sale | EUR,GBP,PLN,HUF,CZK,DKK,SEK | | ### 波兰(PL) | 支付方式 | 交易币种 | 备注 | |:------------------|:--------|:----| | Trustly | EUR/PLN | | | BLIK | PLN | | | SEPA Direct Debit | EUR | | | Paysafecard | PLN | | | P24 | EUR/PLN | | | Skrill | EUR | | | Trustly sale | EUR,GBP,PLN,HUF,CZK,DKK,SEK | | ### 葡萄牙(PT) | 支付方式 | 交易币种 | 备注 | |:------------------|:-----|:----| | SEPA Direct Debit | EUR | | | Paysafecard | EUR | | | Multibanco | EUR | | | Skrill | EUR | | ### 克罗地亚(HR) | 支付方式 | 交易币种 | 备注 | |:------------------|:-----|:----| | SEPA Direct Debit | EUR | | | Paysafecard | EUR | | | Skrill | EUR | | | ### 匈牙利(HU) | 支付方式 | 交易币种 | 备注 | |:------------------|:-----|:----| | SEPA Direct Debit | EUR | | | Paysafecard | EUR | | | Skrill | EUR | | | ### 爱尔兰(IE) | 支付方式 | 交易币种 | 备注 | |:------------------|:-----|:----| | SEPA Direct Debit | EUR | | | Paysafecard | EUR | | | Skrill | EUR | | | ### 冰岛(IS) | 支付方式 | 交易币种 | 备注 | |:------------------|:-----|:----| | SEPA Direct Debit | EUR | | ### 意大利(IT) | 支付方式 | 交易币种 | 备注 | |:------------------|:-----|:----| | SEPA Direct Debit | EUR | | | Paysafecard | EUR | | | Mybank | EUR | | | Skrill | EUR | | ### 意大利(IT) | 支付方式 | 交易币种 | 备注 | |:------------------|:-----|:----| | SEPA Direct Debit | EUR | | ### 列支敦士登公国(LI) | 支付方式 | 交易币种 | 备注 | |:------------------|:-----|:----| | SEPA Direct Debit | EUR | | | Paysafecard | EUR | | ### 卢森堡(LU) | 支付方式 | 交易币种 | 备注 | |:------------------|:-----|:----| | SEPA Direct Debit | EUR | | | Paysafecard | EUR | | ### 摩纳哥(MC) | 支付方式 | 交易币种 | 备注 | |:------------------|:-----|:----| | SEPA Direct Debit | EUR | | ### 摩尔多瓦(MD) | 支付方式 | 交易币种 | 备注 | |:-------|:-----|:----| | Skrill | EUR | | ### 马耳他(MT) | 支付方式 | 交易币种 | 备注 | |:------------------|:-----|:----| | SEPA Direct Debit | EUR | | | Paysafecard | EUR | | ### 英国(GB) | 支付方式 | 交易币种 | 备注 | |:------------------|:----------------------------|:----| | Trustly | GBP | | | Klarna Slice it | GBP | | | SEPA Direct Debit | EUR | | | Paysafecard | GBP | | | Skrill | EUR | | | | Trustly sale | EUR,GBP,PLN,HUF,CZK,DKK,SEK | | ### 希腊(GR) | 支付方式 | 交易币种 | 备注 | |:------------------|:-----|:----| | SEPA Direct Debit | EUR | | | Paysafecard | EUR | | | Mybank | EUR | | | Skrill | EUR | | ### 格鲁吉亚(GE) | 支付方式 | 交易币种 | 备注 | |:------------------|:-----|:----| | Paysafecard | EUR | | ### 直布罗陀(GI) | 支付方式 | 交易币种 | 备注 | |:------------------|:-----|:----| | Paysafecard | EUR | | ### 罗马尼亚(RO) | 支付方式 | 交易币种 | 备注 | |:------------------|:-----|:----| | SEPA Direct Debit | EUR | | | Paysafecard | RON | | | Skrill | EUR | | ### 瑞典(SE) | 支付方式 | 交易币种 | 备注 | |:------------------|:-----|:----| | Trustly | EUR | | | Klarna Slice it | SEK | | | Klarna Pay now | SEK | | | SEPA Direct Debit | EUR | | | Paysafecard | SEK | | | Skrill | EUR | | | ### 斯洛文尼亚(SI) | 支付方式 | 交易币种 | 备注 | |:------------------|:-----|:----| | SEPA Direct Debit | EUR | | | Paysafecard | EUR | | | Skrill | EUR | | | ### 圣马力诺(SM) | 支付方式 | 交易币种 | 备注 | |:------------------|:-----|:----| | SEPA Direct Debit | EUR | | ### 斯洛伐克(SK) | 支付方式 | 交易币种 | 备注 | |:------------------|:-----|:----| | SEPA Direct Debit | EUR | | | Paysafecard | EUR | | | Skrill | EUR | | | | Trustly sale | EUR,GBP,PLN,HUF,CZK,DKK,SEK | | ### Holy See(VA) | 支付方式 | 交易币种 | 备注 | |:------------------|:-----|:----| | SEPA Direct Debit | EUR | | ### 土耳其(TR) | 支付方式 | 交易币种 | 备注 | |:-------|:-----|:----| | Skrill | EUR | | | ### 乌克兰(UA) | 支付方式 | 交易币种 | 备注 | |:-------|:-----|:----| | Skrill | EUR | | | --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/appendix/apm/hosted/oceania/index.md description: >- 大洋洲APM支付方式指南,涵盖澳大利亚和新西兰的Paysafecard及Skrill支付选项。支持AUD和EUR交易币种,适用于需要在该地区提供多样化支付解决方案的商户。 --- # 大洋洲-APM ### 澳大利亚(AU) | 支付方式 | 交易币种 | 备注 | |:------------|:-----|:----| | Paysafecard | AUD | | | Skrill | EUR | | ### 新西兰(NZ) | 支付方式 | 交易币种 | 备注 | |:------------|:-----|:----| | Paysafecard | EUR | | | Skrill | EUR | | --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/appendix/apm/nonHosted/asia/index.md description: >- 该文档列出了韩国、越南及泰国支持的非托管替代支付方式(APM),包括当地主流银行卡、电子钱包和银行转账服务。适用于希望了解特定亚洲市场可用支付手段的商家或开发者。 --- # Non-hosted-支持的APM ## 韩国 | 支付方式 | 交易币种 | 备注 | |:-------------|:-----|:----| | Korean Cards | | | | BankPay APP | | | | Kakaopay | | | ## 越南 | 支付方式 | 交易币种 | 备注 | |:----------------------|:-----|:----| | VTC Pay | | | | MPay | | | | ZaloPay | | | | MoMo Wallet | | | | VINID | | | | Shopeepay Wallet | | | | Agribank | | | | BIDV Bank | | | | DongA Bank | | | | HD Bank | | | | MSB Bank | | | | MB BANK | | | | Nam A Bank | | | | National Citizen Bank | | | | OCB Bank | | | | Ocean Bank | | | | PVCombank | | | | Sacombank | | | | Seabank | | | | SHB Bank | | | | Techcombank | | | | Tien Phong Bank | | | | VIB Bank | | | | VietA Bank | | | | Vietcombank | | | | Viettin Bank | | | | VPB Bank | | | | ViettelMoney | | | | Prompt Pay QR | | | | GrabPay TH QR | | | | AirPay QR | | | ## 泰国 | 支付方式 | 交易币种 | 备注 | |:----------------------|:-----|:----| | Line Pay | | | | True Money | | | --- --- url: 'https://acquirer-api-docs-v4.pingpongx.com/notes/zh/appendix/APMList/index.md' description: >- 支付方式列表详述了各种支付手段及其特性,适用于需要集成或选择支付方案的开发者和商家。内容涵盖全球主流支付方式如信用卡、借记卡及多种电子钱包等,特别强调了各支付方式在不同地区的可用性及交易处理特点。 --- # 支付方式列表 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/appendix/Arbitration/index.md description: >- 仲裁是信用卡交易争议处理的最终阶段,当预仲裁未能解决争议时,双方可将争议提交至信用卡组织(如Visa或Mastercard)进行正式裁决。仲裁过程中,双方需提交相关证据和文件,信用卡组织评估后作出具有最终约束力的裁决,并据此处理资金。 --- # Arbitration 仲裁(Arbitration)是信用卡交易争议处理过程中的最后一个阶段。当预仲裁(Pre-Arbitration)阶段未能解决争议时,双方可以将争议提交到信用卡组织(如Visa或Mastercard)进行正式仲裁。仲裁的裁决结果具有最终约束力。 ## 仲裁的详细流程 1. 发起仲裁:如果预仲裁阶段未能达成一致,商户或发卡银行可以决定将争议提交到信用卡组织进行仲裁。 2. 提交证据:在仲裁阶段,双方需要提交所有相关的证据和文件,以支持各自的立场。商户需要提供详细的交易记录、持卡人签名的收据、商品或服务的交付证明、与持卡人的通信记录等。 3. 信用卡组织评估:信用卡组织(如Visa或Mastercard)会对双方提交的证据进行评估和审核,确定争议的事实情况。 4. 裁决结果:信用卡组织会根据评估结果作出最终裁决。裁决结果可能包括支持发卡银行的拒付请求,或者支持商户的交易有效性。裁决结果一旦作出,具有最终约束力,双方必须接受。 5. 资金处理:根据仲裁裁决结果,相应的资金处理会随之进行。如果裁决支持商户,争议金额将恢复到商户账户。如果裁决支持发卡银行,争议金额将退还给持卡人。 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/appendix/chargebackReasonCode/index.md description: >- 列举了与争议处理相关的枚举值,包括chargebackStatus、CBReasonCodeEnum、CBDocTypeCodeEnum和CBRequirementLevelEnum。这些枚举值定义了争议的不同状态、原因、所需证明材料类型及其是否必填属性,适用于支付争议管理和处理流程中,帮助开发者准 --- # disputes API 枚举说明 ## chargebackStatus 枚举说明 | Code | 描述 | |-----------|----------------------------------------------------------------------------| | PENDING | 待处理 | | PROCESSED | (1)不提交(渠道)「商户不发起拒付申诉」;(2)已处理/已提交 「商户发起了拒付申诉提交了申诉文件」这两种情况都会进入这个状态 | | REFUNDED | 已退款 | | REVOKED | 已撤销 | | ACCEPTED | 放弃申诉 | | EXPIRED | 已过期 | | WON | 申诉成功 | | LOST | 申诉失败 | | CLOSED | 未升级拒付争议关闭 | ## CBReasonCodeEnum 拒付类型枚举说明 | Code | 描述 | |-------------|------| | DUTY | 定责类 | | NO\_RECEIVED | 未收到货 | | WRONG\_GOODS | 货不对版 | | OTHERS | 其他类 | ## CBDocTypeCodeEnum 拒付证明类型枚举说明 | Code | 描述 | |----------------------|------------------| | TIDorInvoice | 交易信息截图 | | LogisticInfo | 运单信息截图 | | GoodsWereAsDescribed | 商品清晰图片及详细 | | ImageofGoodDeliverd | 实际发出的商品图片 | | CardholderSignLetter | 持卡人签署的争议撤销书或退款证明 | | CustomerContactInfo | 与买家沟通记录,如有可提供 | | CancelRefundPolicy | 取消或退款政策 | | DefendMaterial | 已生成的完整的报告 | ## CBRequirementLevelEnum 是否必填枚举说明 | Code | 描述 | |-------------|--------| | Conditional | 一定条件下填 | | Optional | 选填 | | Mandatory | 必填 | ## 异常编码详情 | errorCode | errorMessage | 中文描述 | |--------------------------|-----------------------------------------------|------------------------| | AccIdError | Request accid error | 商户店铺唯一编号不可为空 | | QueryTimeError | Request event query time error | 查询事件起止时间不可为空 | | ChargebackIdError | Request disputePspReference error | 拒付单号不可为空 | | ChargebackStatusError | Request chargebackStatus invalid | chargebackStatus 参数不合法 | | QueryPageError | Request query pageSize,pageNum error | 查询页数和行数不可为空 | | QueryPageMaxError | Request query pageSize min or max error | 查询行数超过最大或最小限制 | | UploadFileNameError | Request upload file name invalid | 文件名称不可为空 | | UploadFileTypeError | Request upload file type invalid | 文件种类参数不合法 | | CBNonExist | Invalid disputePspReference provided | 拒付单号查无或不属于此 Accid | | UploadFileError | Failed to store defense documents | 拒付文件上传失败 | | UploadFileNumMaxError | Request upload file number max error | 文件超过最大数量,文件个数最多不能超过6个 | | ContentCodeError | No content type of defense document specified | 申述材料类型参数不合法 | | DefendDisputeStatusError | Dispute is not defendable | 不具备提交申诉的条件 | | DefendEnded | Dispute defense period has ended | 拒付已过期,已经超过提交申诉的截止时间 | | DefendExist | Dispute already defended | 已经提交过申诉/放弃申诉 | | SystemError | System error | 系统异常 | | OtherError | Other error | 其他异常 | ## chargebackReasonCode 卡组织拒付原因代码说明 | 卡组织 | disputeType | 代码(chargebackReasonCode) | 原因描述(英) | 原因描述(中) | |------|-----------------------|--------------------------|------------------------------------------------------------------------------------------------------|------------------------------| | VISA | 定责类(DUTY) | 10.1 | EMV-Liability Shift Counterfeit Fraud | 责任转移假冒欺诈 | | VISA | 定责类(DUTY) | 10.2 | EMV-Liability Shift Counterfeit Non-Fraud | 责任转移假冒非欺诈 | | VISA | 定责类(DUTY) | 10.3 | Other Fraud Card-Present Environment | 欺诈-卡片出现环境 | | VISA | 定责类(DUTY) | 10.4 | Other Fraud Card-Absent Environment | 欺诈-无卡环境 | | VISA | 定责类(DUTY) | 10.5 | Visa Fraud Monitoring Program | Visa欺诈监控计划 | | VISA | 定责类(DUTY) | 11.1 | Card Recovery Bulletin | 丢失卡 | | VISA | 定责类(DUTY) | 11.2 | Decline Authorization | 授权被拒绝 | | VISA | 定责类(DUTY) | 11.3 | No Authorization | 未授权 | | VISA | 其他(OTHERS) | 12.1 | Late Presentment | 延时请款 | | VISA | 其他(OTHERS) | 12.2 | Incorrect Transaction Code | 交易代码不正确 | | VISA | 其他(OTHERS) | 12.3 | Incorrect Currency | 货币代码不正确 | | VISA | 其他(OTHERS) | 12.4 | Incorrect Account Number | 账号不正确 | | VISA | 其他(OTHERS) | 12.5 | Incorrect Amount | 金额不正确 | | VISA | 其他(OTHERS) | 12.6 | Duplicate Processing | 重复处理 | | VISA | 其他(OTHERS) | 12.7 | Invalid Data | 无效数据 | | VISA | 其他(OTHERS) | 13.2 | Cancelled Recurring | 已取消的循环交易 | | VISA | 其他(OTHERS) | 13.4 | Counterfeit Merchandise | 假冒商品 | | VISA | 其他(OTHERS) | 13.5 | Misrepresentation | 虚假交易 | | VISA | 其他(OTHERS) | 13.6 | Credit Not Processed | 未收到退款 | | VISA | 其他(OTHERS) | 13.7 | Cancelled Merchandise/Services | 已取消的商品/服务 | | VISA | 其他(OTHERS) | 13.8 | Original credit trasaction not accepted | 原始信用交易不被接受 | | VISA | 其他(OTHERS) | 13.9 | Non-receipt of cash or load trasaction value | 未收到现金或负载交易额 | | VISA | 未收到物品/服务(NO\_RECEIVED) | 13.1 | "Merchandise/Services Not Received" | "未提供服务或未收到商品" | | VISA | 货不对版(WRONG\_GOODS) | 13.3 | Not as described or defective merchandise/ | 货物破损、有瑕疵/货物、服务与描述不符 | | MC | 定责类(DUTY) | 4807 | Warning Bulletin | 黑名单 | | MC | 定责类(DUTY) | 4808 | Authorization-related Chargeback | 未获得授权 | | MC | 定责类(DUTY) | 4812 | Account number not on file | 账号不在档案中 | | MC | 定责类(DUTY) | 4837 | No cardholder authorization | 持卡人未授权 | | MC | 定责类(DUTY) | 4840 | Fraudulent processing of transaction | 欺诈处理交易 | | MC | 定责类(DUTY) | 4849 | Questionable merchant activity | 可疑的商户行为 | | MC | 定责类(DUTY) | 4870 | Chip Liability Shift | 芯片卡责任转移 | | MC | 定责类(DUTY) | 4871 | Chip/PIN Liability Shift - NRI Fraud | 芯片卡责任转移 - 丢失/被盗/未收到问题(NRI)欺诈 | | MC | 定责类(DUTY) | 4863 | Cardholder Does Not Recognize—Potential Fraud | 持卡人不承认交易—潜在欺诈 | | MC | 其他(OTHERS) | 4802 | Requested/Required Information Illegible or Missing | 信息难以辨认或丢失 | | MC | 其他(OTHERS) | 4831 | Transaction amount differs | 交易金额不符 | | MC | 其他(OTHERS) | 4834 | Duplicate processing | 重复处理 | | MC | 其他(OTHERS) | 4842 | Late presentment | 延时请款 | | MC | 其他(OTHERS) | 4846 | Correct transaction currency code was not provided | 未提供正确的交易货币代码 | | MC | 其他(OTHERS) | 4850 | Installment Billing Dispute | 分期付款争议 | | MC | 其他(OTHERS) | 4841 | Cancelled Recurring or digital goods Transaction | 取消经常性或数字商品交易 | | MC | 其他(OTHERS) | 4854 | Cardholder dispute not elsewhere classified (U.S. only) | 持卡人争议未分类(仅限美国) | | MC | 其他(OTHERS) | 4859 | Addendum, No-show, or ATM Dispute | 附件,No-show或ATM争议 | | MC | 其他(OTHERS) | 4860 | Credit not processed | 未收到退款 | | MC | 其他(OTHERS) | 6305 | Cardholder does not agree with billed amount | 持卡人对账单金额持有异议 | | MC | 其他(OTHERS) | 6321 | Cardholder does not recognize transaction | 持卡人不承认该笔交易 | | MC | 其他(OTHERS) | 6322 | Transaction Certificate (ICC Transaction) | 持卡人索要交易证明 | | MC | 其他(OTHERS) | 6323 | Transaction Information Document needed for cardholder's personal records expensereporting | 持卡人消费报销需要交易信息文件 | | MC | 其他(OTHERS) | 6341 | Fraud investigation | 欺诈调查 | | MC | 其他(OTHERS) | 6342 | Potential chargeback or compliance | 潜在的拒付或者应合规性文件要求 | | MC | 其他(OTHERS) | 6343 | Real-time Substantiation Audit Request(IIAS) | 实时审核要求 | | MC | 未收到物品/服务(NO\_RECEIVED) | 4855 | Goods or Services Not Provided | 货物/服务未收到 | | MC | 货不对版(WRONG\_GOODS) | 4853 | Defective/Not as described | 货物破损/货物、服务与描述不符 | | DC | 定责类(DUTY) | A02 | Authorization Processing Errors | 预授权处理错误 | | DC | 定责类(DUTY) | A06 | Unissued Account Number | 未发行的账号 | | DC | 定责类(DUTY) | C41 | Fraud - Card Present Transaction | 欺诈—有卡环境交易 | | DC | 定责类(DUTY) | C42 | Fraud - Card Not Present Transaction | 欺诈—无卡环境交易 | | DC | 定责类(DUTY) | C46 | Multiple Charges at Service Establishment Fraudulent Transaction | 在平台有多次欺诈收费行为 | | DC | 定责类(DUTY) | C50 | Suspect Service Establishment – No Response to the Suspected Fraudulent Service Establishment Report | 可疑的服务机构—对涉嫌欺诈的服务报告不予以回应 | | DC | 定责类(DUTY) | C51 | Suspect Service Establishment – Terminated Service Establishment | 可疑的服务机构—已经终止的服务 | | DC | 定责类(DUTY) | C53 | Fraud – Chip Card Counterfeit Transaction | 欺诈—芯片卡伪造交易 | | DC | 定责类(DUTY) | C54 | Fraud – Lost or Stolen Chip and PIN Card Transaction | 欺诈—丢失卡或被盗卡交易 | | DC | 其他(OTHERS) | B24 | Late Presentation | 延迟请款 | | DC | 其他(OTHERS) | B25 | Duplicate Charge | 重复收取 | | DC | 其他(OTHERS) | B26 | Alternate Settlement Currency Incorrect Exchange Rates | 替代结算货币汇率不正确 | | DC | 其他(OTHERS) | B27 | Incorrect Currency | 不支持的币种 | | DC | 其他(OTHERS) | D61 | Altered Amount | 修改过的金额 | | DC | 其他(OTHERS) | D65 | Incorrect Transaction Type | 不正确的交易类型 | | DC | 其他(OTHERS) | D66 | Credit not Processed | 未收到退款 | | DC | 其他(OTHERS) | D67 | Cardmember Paid by Other Means | 通过其它方式支付 | | DC | 其他(OTHERS) | D69 | Canceled Recurring Transactions | 取消的循环交易 | | DC | 其他(OTHERS) | D70 | Cardmember Does Not Recognize | 持卡人不承认该交易 | | DC | 其他(OTHERS) | D71 | Non–receipt of Cash (ATM) | 未收到现金收据 | | DC | 未收到物品/服务(NO\_RECEIVED) | D62 | Non-Receipt of Goods or Services | 未收到商品或服务 | | AE | 定责类(DUTY) | 4526 | Missing signature | 签名缺失 | | AE | 定责类(DUTY) | 4527 | Missing imprint | 卡信息泄露 | | AE | 定责类(DUTY) | 4540 | Card not present | 非持卡人亲自交易 | | AE | 定责类(DUTY) | 4758 | Expired/ not yet valid card | 无效卡/已过期交易 | | AE | 定责类(DUTY) | 4763 | Fraud full recourse | 已判定了的欺诈交易 | | AE | 定责类(DUTY) | 4798 | Fraud liability shift – counterfeit | 责任转移假冒欺诈 | | AE | 定责类(DUTY) | 4799 | Fraud liability shift – lost/ stolen | 责任转移卡丢失/卡被盗 | | AE | 定责类(DUTY) | 4521 | Invalid authorisation | 无效的授权 | | AE | 定责类(DUTY) | 4754 | Local regulatory/legal dispute | 本地监管/法律争议 | | AE | 定责类(DUTY) | 4755 | No valid authorisation | 无效的授权 | | AE | 其他(OTHERS) | 4512 | Multiple processing | 重复处理 | | AE | 其他(OTHERS) | 4507 | Incorrect transaction amount or primary account number presented | 账号或金额不准确 | | AE | 其他(OTHERS) | 4536 | Late presentment | 延迟请款 | | AE | 其他(OTHERS) | 4523 | Unassigned Cardmember account number | 未指定的卡号 | | AE | 其他(OTHERS) | 4752 | Credit/debit presentment error | 借记卡/信用卡处理错误 | | AE | 其他(OTHERS) | 4513 | Credit not presented | 取消的交易,没收到退款 | | AE | 其他(OTHERS) | 4515 | Paid through other means | 已通过其它方式支付 | | AE | 其他(OTHERS) | 4516 | No reply to disputes enquiry letter | 对争议咨询不予回复 | | AE | 其他(OTHERS) | 4517 | Insufficient or unclear reply to disputes enquiry letter | 对争议咨询的回复信息不足或不清楚 | | AE | 其他(OTHERS) | 4530 | Currency discrepancy | 汇率差异争议 | | AE | 其他(OTHERS) | 4534 | Multiple ROCs | 对额外的收费有争议 | | AE | 其他(OTHERS) | 4544 | Cancellation of recurring goods/services | 依然收到已取消的商品/服务的账单 | | AE | 其他(OTHERS) | 4750 | Car rental charge non-qualified/unsubstantiated | 租车费用不合理 | | AE | 未收到物品/服务(NO\_RECEIVED) | 4554 | Goods/ services ordered but not received | 未收到商品或服务 | | AE | 货不对版(WRONG\_GOODS) | 4553 | Not as described | 与商品描述不符 | ## 调单类原因代码说明 | 卡组织 | 代码(chargebackReasonCode) | 原因描述(英) | 原因描述(中) | |-----|--------------------------|------------------------------------------------------------------|----------------| | AE | 6003 | Chargeback documentation needed | 需要退单文件 | | AE | 6006 | Card Member claims fraud | 持卡人声称存在欺诈行为 | | AE | 6008 | Card Member requests proof of transaction | 持卡人要求提供交易证明 | | AE | 6013 | Documentation previously sent is illegible/ incomplete | 之前发送的文件不清晰/不完整 | | AE | 6014 | Card Member does not recognise Transaction or Transaction Amount | 持卡人不认可交易或交易金额 | | AE | 6016 | Card Member needs documentation for personal records | 持卡人需要文档作为个人记录 | > 补充说明:此处例举的code是调单通知的,其他和拒付通知重复的code未进行例举。 ## 欺诈提醒通知原因代码说明 | 卡组织 | 代码(chargebackReasonCode) | 原因描述(英) | 原因描述(中) | |------------|--------------------------|----------------------------------|----------| | VISA | 0 | Card reported lost | 已报告丢失的卡 | | VISA | 1 | Stolen | 被盗用 | | VISA | 2 | Not received as issued (NRI) | 未按原样收到 | | VISA | 3 | Fraudulent application | 欺诈申请 | | VISA | 4 | Issuer counterfeit | 发行人伪造 | | VISA | 5 | Miscellaneous | 杂项 | | VISA | 6 | Fraudulent use of account number | 账号的欺诈使用 | | VISA | 9 | Acquirer counterfeit | 收购方伪造 | | VISA | A | Incorrect processing | 处理错误 | | VISA | B | Account or credentials takeover | 账户或凭证劫持 | | Mastercard | 0 | Card reported lost | 已报告丢失的卡 | | Mastercard | 1 | Stolen | 被盗用 | | Mastercard | 2 | Never received issue | 从未收到发行物 | | Mastercard | 3 | Fraudulent application | 欺诈申请 | | Mastercard | 4 | Counterfeit card fraud | 伪造卡片欺诈 | | Mastercard | 5 | Account takeover fraud | 账户劫持欺诈 | | Mastercard | 6 | Card not present fraud | 非面对面交易欺诈 | | Mastercard | 7 | Multiple imprint fraud | 多次刷卡欺诈 | | Mastercard | 51 | Acquirer fraud | 收购方欺诈 | ## 其他拒付代码说明 | disputeType | 代码(chargebackReasonCode) | 原因描述(英) | 原因描述(中) | |-------------------------|--------------------------|--------------------------------------------------------------|-----------------| | 定责类(DUTY) | CO01 | Fraud | 欺诈 | | 未收到物品/服务(NO\_RECEIVED) | CO02 | The product / service is not provided | 未收到商品或服务 | | 货不对版(WRONG\_GOODS) | CO06 | Defective goods/Merchandise or service not as described | 商品有缺陷/商品或服务与描述不符 | | 定责类(DUTY) | CO08 | Unauthorized | 未授权 | | 其他(OTHERS) | CO03 | Credit not Processed | 未收到退款 | | 其他(OTHERS) | CO04 | Unsuccessful operation | 不成功的操作 | | 其他(OTHERS) | CO05 | Paid in another way | 已通过其它方式支付 | | 其他(OTHERS) | CO07 | Order or Subscription Canceled | 订单或订阅已取消 | | 其他(OTHERS) | CO09 | Duplicate transactions | 重复交易 | | 其他(OTHERS) | CO10 | Incorrect amount | 金额不正确 | | 其他(OTHERS) | CO11 | Other | 其他 | ## Klarna 拒付原因代码说明 | disputeType | 代码(chargebackReasonCode) | 原因描述(英) | 原因描述(中) | |-------------------------|--------------------------|-----------------------|-----------------| | 其他(OTHERS) | KL01 | Returns | 已退货未收到退款 | | 未收到物品/服务(NO\_RECEIVED) | KL02 | Goods not received | 未收到商品或服务 | | 其他(OTHERS) | KL03 | Incorrect Invoice | 持卡人对账单金额持有异议 | | 货不对版(WRONG\_GOODS) | KL04 | Faulty goods | 货物破损/货物、服务与描述不符 | | 其他(OTHERS) | KL05 | Already paid | 重复付款 | | 定责类(DUTY) | KL06 | Unauthorized purchases | 未授权交易 | | 定责类(DUTY) | KL07 | High-risk order | 高风险订单 | ## Alipay 拒付原因代码说明 | disputeType | 代码(chargebackReasonCode) | 原因描述(英) | 原因描述(中) | |-------------------------|--------------------------|--------------------------------------------------|------------| | 定责类(DUTY) | 6801 | Risk related Request | 风险相关请求 | | 其他(OTHERS) | 6802 | Non-risk related Request | 非风险相关请求 | | 定责类(DUTY) | 7803 | User denied participating in a Transaction | 用户否认参与交易 | | 未收到物品/服务(NO\_RECEIVED) | 78011 | Merchandise/Service Not Received | 未收到商品/服务 | | 货不对版(WRONG\_GOODS) | 78012 | Not as Described | 与描述不符 | | 其他(OTHERS) | 78013 | Refund not Processed | 退款未处理 | | 其他(OTHERS) | 78021 | Amount Differs | 金额不符 | | 其他(OTHERS) | 78022 | Duplicate Processed | 重复处理 | | 其他(OTHERS) | 78023 | Paid by Other Means | 通过其他方式支付 | --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/appendix/codeGrant/index.md description: >- CodeGrant是一种本地支付的Tokenization方案,通过用户身份验证授权支付,在电子商务和移动支付中广泛应用。适用于支持电子钱包绑定及后续支付操作,确保交易安全便捷。 --- # CodeGrant CodeGrant 是本地支付的Tokenization方案,用户必须通过某种形式的身份验证来授权支付。这种支付方式在现代电子商务和移动支付中非常普遍,尤其是随着智能手机和在线支付技术的普及。 ## 已支持的电子钱包 ## 绑定操作步骤 ## 绑后支付操作步骤 绑后支付操作步骤如下: --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/appendix/countryCode/index.md description: >- 国家或地区代码列表提供全球各国的二字码。适用于需要标准化国家标识符的场景,如国际支付、物流和数据交换等。该列表涵盖从阿富汗到中非共和国等多个国家和地区,确保在跨国业务中准确无误地使用国家代码。 --- # 国家代码 ## 国家或地区代码列表 | 国家/地区 | country/region | 二字码 | | --------------- | ---------------- | ---- | | 阿富汗 | Afghanistan | AF | | 奥兰群岛 | Åland Islands | AX | | 阿尔巴尼亚 | Albania | AL | | 阿尔及利亚 | Algeria | DZ | | 美属萨摩亚 | American Samoa | AS | | 安道尔共和国 | Andorra | AD | | 安哥拉 | Angola | AO | | 安圭拉 | Anguilla | AI | | 南极洲 | Antarctica | AQ | | 安提瓜和巴布达 | Antigua and Barbuda | AG | | 阿根廷 | Argentina | AR | | 亚美尼亚 | Armenia | AM | | 阿鲁巴 | Aruba | AW | | 澳大利亚 | Australia | AU | | 奥地利 | Austria | AT | | 阿塞拜疆 | Azerbaijan | AZ | | 巴哈马 | Bahamas | BS | | 巴林 | Bahrain | BH | | 孟加拉国 | Bangladesh | BD | | 巴巴多斯 | Barbados | BB | | 白俄罗斯 | Belarus | BY | | 比利时 | Belgium | BE | | 伯利兹 | Belize | BZ | | 贝宁 | Benin | BJ | | 百慕大 | Bermuda | BM | | 不丹 | Bhutan | BT | | 玻利维亚 | Bolivia (Plurinational State of) | BO | | 博内尔、圣尤斯特歇斯和萨巴 | Bonaire, Sint Eustatius and Saba | BQ | | 波斯尼亚和黑塞哥维那 | Bosnia and Herzegovina | BA | | 博茨瓦纳 | Botswana | BW | | 布韦岛 | Bouvet Island | BV | | 巴西 | Brazil | BR | | 英属印度洋领地 | British Indian Ocean Territory | IO | | 文莱达鲁萨兰国 | Brunei Darussalam | BN | | 保加利亚 | Bulgaria | BG | | 布基纳法索 | Burkina Faso | BF | | 布隆迪 | Burundi | BI | | 佛得角 | Cabo Verde | CV | | 柬埔寨 | Cambodia | KH | | 喀麦隆 | Cameroon | CM | | 加拿大 | Canada | CA | | 开曼群岛 | Cayman Islands | KY | | 中非共和国 | Central African Republic | CF | | 乍得 | Chad | TD | | 智利 | Chile | CL | | 中国 | China | CN | | 圣诞岛 | Christmas Island | CX | | 科科斯(基林)群岛 | Cocos (Keeling) Islands | CC | | 哥伦比亚 | Colombia | CO | | 科摩罗 | Comoros | KM | | 刚果 | Congo | CG | | 刚果民主共和国 | Congo (Democratic Republic of the) | CD | | 库克群岛 | Cook Islands | CK | | 哥斯达黎加 | Costa Rica | CR | | 科特迪瓦 | Côte d'Ivoire | CI | | 克罗地亚 | Croatia | HR | | 古巴 | Cuba | CU | | 库拉索 | Curaçao | CW | | 塞浦路斯 | Cyprus | CY | | 捷克共和国 | Czechia | CZ | | 丹麦 | Denmark | DK | | 吉布提 | Djibouti | DJ | | 多米尼加 | Dominica | DM | | 多米尼加共和国 | Dominican Republic | DO | | 厄瓜多尔 | Ecuador | EC | | 埃及 | Egypt | EG | | 萨尔瓦多 | El Salvador | SV | | 赤道几内亚 | Equatorial Guinea | GQ | | 厄立特里亚 | Eritrea | ER | | 爱沙尼亚 | Estonia | EE | | 埃塞俄比亚 | Ethiopia | ET | | 福克兰群岛 | Falkland Islands (Malvinas) | FK | | 法罗群岛 | Faroe Islands | FO | | 斐济 | Fiji | FJ | | 芬兰 | Finland | FI | | 法国 | France | FR | | 法属圭亚那 | French Guiana | GF | | 法属波利尼西亚 | French Polynesia | PF | | 法属南部领土 | French Southern Territories | TF | | 加蓬 | Gabon | GA | | 冈比亚 | Gambia | GM | | 格鲁吉亚 | Georgia | GE | | 德国 | Germany | DE | | 加纳 | Ghana | GH | | 直布罗陀 | Gibraltar | GI | | 希腊 | Greece | GR | | 格陵兰 | Greenland | GL | | 格林纳达 | Grenada | GD | | 瓜德罗普 | Guadeloupe | GP | | 关岛 | Guam | GU | | 危地马拉 | Guatemala | GT | | 根西岛 | Guernsey | GG | | 几内亚 | Guinea | GN | | 几内亚比绍 | Guinea-Bissau | GW | | 圭亚那 | Guyana | GY | | 海地 | Haiti | HT | | 赫德岛和麦克唐纳群岛 | Heard Island and McDonald Islands | HM | | 梵蒂冈 | Holy See | VA | | 洪都拉斯 | Honduras | HN | | 香港 | Hong Kong | HK | | 匈牙利 | Hungary | HU | | 冰岛 | Iceland | IS | | 印度 | India | IN | | 印度尼西亚 | Indonesia | ID | | 伊朗 | Iran (Islamic Republic of) | IR | | 伊拉克 | Iraq | IQ | | 爱尔兰 | Ireland | IE | | 曼岛 | Isle of Man | IM | | 以色列 | Israel | IL | | 意大利 | Italy | IT | | 牙买加 | Jamaica | JM | | 日本 | Japan | JP | | 泽西岛 | Jersey | JE | | 约旦 | Jordan | JO | | 哈萨克斯坦 | Kazakhstan | KZ | | 肯尼亚 | Kenya | KE | | 基里巴斯 | Kiribati | KI | | 朝鲜 | Korea (Democratic People's Republic of) | KP | | 韩国 | Korea (Republic of) | KR | | 科威特 | Kuwait | KW | | 吉尔吉斯斯坦 | Kyrgyzstan | KG | | 老挝 | Lao People's Democratic Republic | LA | | 拉脱维亚 | Latvia | LV | | 黎巴嫩 | Lebanon | LB | | 莱索托 | Lesotho | LS | | 利比里亚 | Liberia | LR | | 利比亚 | Libya | LY | | 列支敦士登 | Liechtenstein | LI | | 立陶宛 | Lithuania | LT | | 卢森堡 | Luxembourg | LU | | 澳门 | Macao | MO | | 马其顿 | Macedonia (the former Yugoslav Republic of) | MK | | 马达加斯加 | Madagascar | MG | | 马拉维 | Malawi | MW | | 马来西亚 | Malaysia | MY | | 马尔代夫 | Maldives | MV | | 马里 | Mali | ML | | 马耳他 | Malta | MT | | 马绍尔群岛 | Marshall Islands | MH | | 马提尼克 | Martinique | MQ | | 毛里塔尼亚 | Mauritania | MR | | 毛里求斯 | Mauritius | MU | | 马约特 | Mayotte | YT | | 墨西哥 | Mexico | MX | | 密克罗尼西亚联邦 | Micronesia (Federated States of) | FM | | 摩尔多瓦 | Moldova (Republic of) | MD | | 摩纳哥 | Monaco | MC | | 蒙古 | Mongolia | MN | | 黑山共和国 | Montenegro | ME | | 蒙特塞拉特 | Montserrat | MS | | 摩洛哥 | Morocco | MA | | 莫桑比克 | Mozambique | MZ | | 缅甸 | Myanmar | MM | | 纳米比亚 | Namibia | NA | | 瑙鲁 | Nauru | NR | | 尼泊尔 | Nepal | NP | | 荷兰 | Netherlands | NL | | 新喀里多尼亚 | New Caledonia | NC | | 新西兰 | New Zealand | NZ | | 尼加拉瓜 | Nicaragua | NI | | 尼日尔 | Niger | NE | | 尼日利亚 | Nigeria | NG | | 纽埃 | Niue | NU | | 诺福克岛 | Norfolk Island | NF | | 北马里亚纳群岛 | Northern Mariana Islands | MP | | 挪威 | Norway | NO | | 阿曼 | Oman | OM | | 巴基斯坦 | Pakistan | PK | | 帕劳 | Palau | PW | | 巴勒斯坦 | Palestine, State of | PS | | 巴拿马 | Panama | PA | | 巴布亚新几内亚 | Papua New Guinea | PG | | 巴拉圭 | Paraguay | PY | | 秘鲁 | Peru | PE | | 菲律宾 | Philippines | PH | | 皮特凯恩群岛 | Pitcairn | PN | | 波兰 | Poland | PL | | 葡萄牙 | Portugal | PT | | 波多黎各 | Puerto Rico | PR | | 卡塔尔 | Qatar | QA | | 留尼汪 | Réunion | RE | | 罗马尼亚 | Romania | RO | | 俄罗斯联邦 | Russian Federation | RU | | 卢旺达 | Rwanda | RW | | 圣巴泰勒米 | Saint Barthélemy | BL | | 圣赫勒拿、阿森松和特里斯坦达库尼亚 | Saint Helena, Ascension and Tristan da Cunha | SH | | 圣基茨和尼维斯 | Saint Kitts and Nevis | KN | | 圣卢西亚 | Saint Lucia | LC | | 圣马丁(法国部分) | Saint Martin (French part) | MF | | 圣皮埃尔和密克隆 | Saint Pierre and Miquelon | PM | | 圣文森特和格林纳丁斯 | Saint Vincent and the Grenadines | VC | | 萨摩亚 | Samoa | WS | | 圣马力诺 | San Marino | SM | | 圣多美和普林西比 | Sao Tome and Principe | ST | | 沙特阿拉伯 | Saudi Arabia | SA | | 塞内加尔 | Senegal | SN | | 塞尔维亚 | Serbia | RS | | 塞舌尔 | Seychelles | SC | | 塞拉利昂 | Sierra Leone | SL | | 新加坡 | Singapore | SG | | 圣马丁(荷兰部分) | Sint Maarten (Dutch part) | SX | | 斯洛伐克 | Slovakia | SK | | 斯洛文尼亚 | Slovenia | SI | | 所罗门群岛 | Solomon Islands | SB | | 索马里 | Somalia | SO | | 南非 | South Africa | ZA | | 南乔治亚岛和南桑威奇群岛 | South Georgia and the South Sandwich Islands | GS | | 南苏丹 | South Sudan | SS | | 西班牙 | Spain | ES | | 斯里兰卡 | Sri Lanka | LK | | 苏丹 | Sudan | SD | | 苏里南 | Suriname | SR | | 斯瓦尔巴岛和扬马延岛 | Svalbard and Jan Mayen | SJ | | 斯威士兰 | Swaziland | SZ | | 瑞典 | Sweden | SE | | 瑞士 | Switzerland | CH | | 叙利亚 | Syrian Arab Republic | SY | | 中国台湾省 | Taiwan, province of China | TW | | 塔吉克斯坦 | Tajikistan | TJ | | 坦桑尼亚联合共和国 | Tanzania, United Republic of | TZ | | 泰国 | Thailand | TH | | 东帝汶 | Timor-Leste | TL | | 多哥 | Togo | TG | | 托克劳 | Tokelau | TK | | 汤加 | Tonga | TO | | 特立尼达和多巴哥 | Trinidad and Tobago | TT | | 突尼斯 | Tunisia | TN | | 土耳其 | Turkey | TR | | 土库曼斯坦 | Turkmenistan | TM | | 特克斯和凯科斯群岛 | Turks and Caicos Islands | TC | | 图瓦卢 | Tuvalu | TV | | 乌干达 | Uganda | UG | | 乌克兰 | Ukraine | UA | | 阿拉伯联合酋长国 | United Arab Emirates | AE | | 大不列颠及北爱尔兰联合王国 | United Kingdom of Great Britain and Northern Ireland | GB | | 美国 | United States of America | US | | 美国本土外小岛屿 | United States Minor Outlying Islands | UM | | 乌拉圭 | Uruguay | UY | | 乌兹别克斯坦 | Uzbekistan | UZ | | 瓦努阿图 | Vanuatu | VU | | 委内瑞拉 | Venezuela (Bolivarian Republic of) | VE | | 越南 | Viet Nam | VN | | 英属维尔京群岛 | Virgin Islands (British) | VG | | 美属维尔京群岛 | Virgin Islands (U.S.) | VI | | 瓦利斯和富图纳 | Wallis and Futuna | WF | | 西撒哈拉 | Western Sahara | EH | | 也门 | Yemen | YE | | 赞比亚 | Zambia | ZM | | 津巴布韦 | Zimbabwe | ZW | ## 必传state参数的国家或地区 ```json [ "CA", "US" ] ``` --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/appendix/creditCardList/index.md description: >- CreditCard列出支持的信用卡类型及其详细信息。适用于全球范围内的在线支付场景,涵盖主要国际卡组织如Visa、MasterCard等。每种卡类型附有具体代码和枚举值,便于系统集成与识别。 --- # CreditCard --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/appendix/currencyExchange/index.md description: >- 换汇币种表格列出了多种原始货币及其支持的换汇目标货币。适用于需要进行货币兑换的场景,如国际支付、跨境交易等。主要特点包括广泛覆盖全球多个地区的货币,例如美元(USD)、欧元(EUR)、人民币(CNY)等,并支持从常见货币到小众货币的转换。 --- # 换汇币种 | 原始币种 | 支持换汇币种 | |:----:|:------:| | USD | LYD | | USD | LAK | | USD | BDT | | USD | LKR | | USD | PEN | | USD | DZD | | USD | COP | | USD | CLP | | USD | IDR | | USD | ILS | | USD | PKR | | USD | MMK | | USD | THB | | SEK | CNH | | USD | BHD | | USD | KRW | | USD | EGP | | USD | CHF | | USD | CZK | | USD | BRL | | USD | TND | | USD | PHP | | EUR | BHD | | EUR | EGP | | EUR | CHF | | EUR | CZK | | EUR | CRC | | EUR | TND | | USD | CRC | | USD | CNH | | USD | JPY | | HKD | JPY | | GBP | JPY | | CNH | JPY | | CAD | JPY | | USD | INR | | HKD | INR | | GBP | INR | | CNH | INR | | CAD | INR | | USD | HKD | | HKD | CNH | | GBP | USD | | GBP | HKD | | GBP | CNH | | EUR | BRL | | EUR | THB | | EUR | PHP | | EUR | VND | | EUR | USD | | EUR | KRW | | EUR | JPY | | EUR | INR | | EUR | HKD | | EUR | GBP | | EUR | CNH | | USD | CNY | | HKD | CNY | | GBP | CNY | | EUR | CNY | | CAD | CNY | | USD | CAD | | CAD | HKD | | GBP | CAD | | EUR | CAD | | CAD | CNH | | AUD | USD | | AUD | HKD | | GBP | AUD | | EUR | AUD | | AUD | CNH | | AUD | CAD | | USD | AED | | HKD | AED | | GBP | AED | | EUR | AED | | CNH | AED | | CAD | AED | | USD | ZAR | | HKD | ZAR | | GBP | ZAR | | EUR | ZAR | | CNH | ZAR | | CAD | ZAR | | USD | UAH | | HKD | UAH | | GBP | UAH | | EUR | UAH | | CNH | UAH | | CAD | UAH | | USD | TRY | | HKD | TRY | | GBP | TRY | | EUR | TRY | | CNH | TRY | | CAD | TRY | | USD | SAR | | HKD | SAR | | GBP | SAR | | EUR | SAR | | CNH | SAR | | USD | RON | | HKD | RON | | GBP | RON | | EUR | RON | | CNH | RON | | CAD | RON | | USD | QAR | | HKD | QAR | | GBP | QAR | | EUR | QAR | | CNH | QAR | | CAD | QAR | | USD | OMR | | HKD | OMR | | GBP | OMR | | EUR | OMR | | CNH | OMR | | CAD | OMR | | USD | NOK | | HKD | NOK | | GBP | NOK | | EUR | NOK | | CNH | NOK | | CAD | NOK | | USD | MYR | | HKD | MYR | | GBP | MYR | | EUR | MYR | | CNH | MYR | | CAD | MYR | | USD | KZT | | HKD | KZT | | GBP | KZT | | EUR | KZT | | CNH | KZT | | CAD | KZT | | USD | KWD | | HKD | KWD | | GBP | KWD | | EUR | KWD | | CNH | KWD | | CAD | KWD | | USD | JOD | | HKD | JOD | | GBP | JOD | | EUR | JOD | | CNH | JOD | | CAD | JOD | | USD | HUF | | HKD | HUF | | GBP | HUF | | EUR | HUF | | CNH | HUF | | CAD | HUF | | NZD | HKD | | GBP | NZD | | EUR | NZD | | NZD | CNH | | NZD | CAD | | USD | DKK | | HKD | DKK | | GBP | DKK | | EUR | DKK | | CNH | DKK | | CAD | DKK | | USD | PLN | | HKD | PLN | | GBP | PLN | | EUR | PLN | | CNH | PLN | | CAD | PLN | | USD | SEK | | HKD | SEK | | GBP | SEK | | EUR | SEK | | CAD | SEK | | USD | TWD | | HKD | TWD | | GBP | TWD | | EUR | TWD | | CNH | TWD | | CAD | TWD | | USD | SGD | | SGD | HKD | | GBP | SGD | | EUR | SGD | | SGD | CNH | | CAD | SGD | | USD | MXN | | HKD | MXN | | GBP | MXN | | EUR | MXN | | CNH | MXN | | CAD | MXN | | NZD | USD | | LYD | USD | | LAK | USD | | BDT | USD | | LKR | USD | | PEN | USD | | DZD | USD | | COP | USD | | CLP | USD | | IDR | USD | | ILS | USD | | PKR | USD | | MMK | USD | | THB | USD | | CNH | SEK | | BHD | USD | | KRW | USD | | EGP | USD | | CHF | USD | | CZK | USD | | BRL | USD | | TND | USD | | PHP | USD | | BHD | EUR | | EGP | EUR | | CHF | EUR | | CZK | EUR | | CRC | EUR | | TND | EUR | | CRC | USD | | CNH | USD | | JPY | USD | | JPY | HKD | | JPY | GBP | | JPY | CNH | | JPY | CAD | | INR | USD | | INR | HKD | | INR | GBP | | INR | CNH | | INR | CAD | | HKD | USD | | CNH | HKD | | USD | GBP | | HKD | GBP | | CNH | GBP | | BRL | EUR | | THB | EUR | | PHP | EUR | | VND | EUR | | USD | EUR | | KRW | EUR | | JPY | EUR | | INR | EUR | | HKD | EUR | | GBP | EUR | | CNH | EUR | | CNY | USD | | CNY | HKD | | CNY | GBP | | CNY | EUR | | CNY | CAD | | CAD | USD | | HKD | CAD | | CAD | GBP | | CAD | EUR | | CNH | CAD | | USD | AUD | | HKD | AUD | | AUD | GBP | | AUD | EUR | | CNH | AUD | | CAD | AUD | | AED | USD | | AED | HKD | | AED | GBP | | AED | EUR | | AED | CNH | | AED | CAD | | ZAR | USD | | ZAR | HKD | | ZAR | GBP | | ZAR | EUR | | ZAR | CNH | | ZAR | CAD | | UAH | USD | | UAH | HKD | | UAH | GBP | | UAH | EUR | | UAH | CNH | | UAH | CAD | | TRY | USD | | TRY | HKD | | TRY | GBP | | TRY | EUR | | TRY | CNH | | TRY | CAD | | SAR | USD | | SAR | HKD | | SAR | GBP | | SAR | EUR | | SAR | CNH | | RON | USD | | RON | HKD | | RON | GBP | | RON | EUR | | RON | CNH | | RON | CAD | | QAR | USD | | QAR | HKD | | QAR | GBP | | QAR | EUR | | QAR | CNH | | QAR | CAD | | OMR | USD | | OMR | HKD | | OMR | GBP | | OMR | EUR | | OMR | CNH | | OMR | CAD | | NOK | USD | | NOK | HKD | | NOK | GBP | | NOK | EUR | | NOK | CNH | | NOK | CAD | | MYR | USD | | MYR | HKD | | MYR | GBP | | MYR | EUR | | MYR | CNH | | MYR | CAD | | KZT | USD | | KZT | HKD | | KZT | GBP | | KZT | EUR | | KZT | CNH | | KZT | CAD | | KWD | USD | | KWD | HKD | | KWD | GBP | | KWD | EUR | | KWD | CNH | | KWD | CAD | | JOD | USD | | JOD | HKD | | JOD | GBP | | JOD | EUR | | JOD | CNH | | JOD | CAD | | HUF | USD | | HUF | HKD | | HUF | GBP | | HUF | EUR | | HUF | CNH | | HUF | CAD | | HKD | NZD | | NZD | GBP | | NZD | EUR | | CNH | NZD | | CAD | NZD | | DKK | USD | | DKK | HKD | | DKK | GBP | | DKK | EUR | | DKK | CNH | | DKK | CAD | | PLN | USD | | PLN | HKD | | PLN | GBP | | PLN | EUR | | PLN | CNH | | PLN | CAD | | SEK | USD | | SEK | HKD | | SEK | GBP | | SEK | EUR | | SEK | CAD | | TWD | USD | | TWD | HKD | | TWD | GBP | | TWD | EUR | | TWD | CNH | | TWD | CAD | | SGD | USD | | HKD | SGD | | SGD | GBP | | SGD | EUR | | CNH | SGD | | SGD | CAD | | MXN | USD | | MXN | HKD | | MXN | GBP | | MXN | EUR | | MXN | CNH | | MXN | CAD | | USD | NZD | --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/appendix/docUpdateRecord/index.md description: >- 文档更新记录列出了2025年各月的支付API及SDK更新详情,包括新增API端点地址、优化统一下单和面对面支付接口参数、增加微信小程序支付响应参数以及内嵌SDK功能增强等。 --- # 文档更新记录 ## 2025年1月 | 发布日期 | 发布事项 | 内容简介 | |-------------|--------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | 2025年1月5日 | Element SDK 文档重构 | **文档重构**:更新 Element SDK 集成指南至 2.0 版本**架构升级**:新增模块化架构设计(PingPongSDK、sdkController、registry、paymentService、EventHub)支持两种业务模式:payment(下单并支付)和 codeGrant(绑定钱包)统一的事件模型:所有支付元素支持相同的事件类型(ready、success、error、cancel、click)**新增功能**:支持 Apple Pay、Google Pay、PayPal 三种支付方式支持营销活动配置(payDiscount 参数)完整的初始化流程和支付流程时序图**文档优化**:添加完整的代码示例(HTML/CSS/JavaScript)详细的 API 参数说明10个常见问题解答版本历史记录**文档路径**:`/notes/zh/integrate/sdk-elements/` | 2025年1月6日 | SDK v4.2 接口参数优化 | **参数调整**:优化 PingPong.Checkout.create 接口参数**删除参数**:删除 `goodsName` - 商品名称删除 `goodsDesc` - 商品描述**新增参数**:新增 `goods` - 商品列表数组,包含 description、imgUrl、name、number、sku、unitPrice、virtualProduct 等字段**功能增强**:`updateCheckoutHook` 支持更新 goods 参数添加商品信息动态更新示例**文档优化**:统一代码示例风格,移除特殊标记更新完整示例代码配置**文档路径**:`/notes/zh/integrate/sdk-v4-2/` | ## 2025年10月 | 发布日期 | 发布事项 | 内容简介 | |-------------|--------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | 2025年10月31日 | 新增API端点地址文档 | **新增文档**:开发指南中新增"API端点地址"文档**主要内容**:站点架构说明(在线业务/终端业务/商户后台)三大站点域名配置(FRA/SG/US)站点选择原则(基于商户主体注册地)站点数据互通说明(FRA↔SG互通,US独立)**文档路径**:`/notes/zh/guide/endpoint/` | | 2025年10月13日 | 统一下单接口参数优化 | **客户信息字段扩展**:在customer对象中新增支付相关字段**包含字段**:`accountNumber` - 银行账号`domesticCardNumber` - 本地卡号`domesticCardIssuingDate` - 本地卡发行日期`domesticCardExpireMonth` - 本地卡到期月份`domesticCardExpireYear` - 本地卡到期年份**字段优化**:删除重复的merchantUserId字段,简化字段描述 | | 2025年10月13日 | 面对面支付接口参数优化 | **支付方式明确化**:更新paymentMethod字段描述**支持方式**:`Card Purchase` - 刷卡支付`QR-POSScan` - B扫C支付`QR Payment` - C扫B支付`Octopus` - 八达通刷卡支付(香港) | ## 2025年9月 | 发布日期 | 发布事项 | 内容简介 | |-------------|--------------------|---------------------------------------------------------| | 2025年9月11日 | /v4/payment/unifiedPay接口响应参数新增 | **新增字段**:为微信小程序支付新增extraParam响应参数**包含参数**:`wxTimeStamp``wxNonceStr``wxPackage``wxSignType``wxPaySign` | | 2025年9月11日 | 内嵌SDK功能增强 | **新增参数**:`useTabMode` - 当商户仅有卡支付时可隐藏选项框**新增事件**:`ready` - 初始化成功事件`error` - 初始化失败事件 | ## 2025年8月 | 发布日期 | 发布事项 | 内容简介 | |-------------|--------------------|---------------------------------------------------------| | 2025年8月28日 | 微信小程序支付功能上线 | **新增支付方式**:正式上线微信小程序支付功能**功能特性**:支持微信小程序内支付场景完整的支付流程和参数示例专门的技术文档和集成指南 | ## 2024年6月(API文档专业版上线) | 发布日期 | 发布事项 | 内容简介 | |-----------|--------|-----------------------------------------------------------| | 2024年6月8日 | 新版文档发布 | 新版文档对文档产品功能进行了更精准的划分,并且对文档内容进行了优化,更方便开发者查看,后续版本更新都会基于新版文档 | ## 2023年12月 | 发布日期 | 发布事项 | 内容简介 | |-------------|-----------------------|------------------------------------| | 2023年12月1日 | 拒付流程图更新 | 替换了流程图 | | 2023年12月12日 | 异步通知和交易查询接口中3DS枚举值变更 | 异步通知和交易查询接口中3DS枚举值变更,枚举值由数字变更成大写字母 | | 2023年12月13日 | 新增JS-SDK-2.0文档 | / | | 2023年12月14日 | 新增JS-SDK-2.0调试工具 | / | | 2023年12月15日 | 调整国家代码/交易币种列表,新增中文翻译列 | / | | 2023年12月21日 | 拒付新增异常代码 | UploadFileNumMaxError,表示`文件超过最大数量` | ## 2023年11月 | 发布日期 | 发布事项 | 内容简介 | |-------------|-------------------------------|--------------------------------------------| | 2023年11月16日 | 拒付主动获取调单明细和获取拒付明细返回处理截止时间格式调整 | 格式由原先的YYYY/MM/DD更新为yyyy-MM-dd HH:mm:ss | | 2023年11月22日 | 风险管理部分调整 | (1)拒付部分整合到风险管理部分;(2)风控组件增加SecureShieldJs组件 | ## 2023年10月 | 发布日期 | 发布事项 | 内容简介 | |-------------|-----------|-------------------------------| | 2023年10月12日 | 新增错误码 | 新增错误码:301021,301022,具体见附录状态码表 | | 2023年10月23日 | 交易对账单接口下架 | 新增SFTP对账服务 | ## 2023年9月 | 发布日期 | 发布事项 |内容简介 | |------------|------------------|----------------------------------------------------------------------------| | 2023年9月5日 | 新增产品文档 | 新增线下条码支付产品文档,文档地址:https://acquirer-api-docs-v4.pingpongx.com/notes/zh/onlinePayment/offlineBarcodePayment/ | | 2023年9月5日 | 新增调单通知reasonCode | 文档地址:https://acquirer-api-docs-v4.pingpongx.com/notes/zh/appendix/chargebackReasonCode/,见调单类原因代码说明部分 | | 2023年9月6日 | 新增错误码 | 错误码:108003,退款失败(退款余额不足) | | 2023年9月8日 | 新增异步通知 | 新增异步通知:欺诈提醒通知,eventCode:NOTIFICATION\_OF\_FRAUD | | 2023年9月12日 | 新增接口 | 新增接口:一键支付新增查询接口,接口名称:/v4/authorization/list | | 2023年9月14日 | 异步通知重试规则调整 | 更新后重试间隔为 5s/5s/3m/10m/20m/30m/30m/30m/60m/3h/3h/3h | | 2023年9月20日 | 新增错误码 | 错误码:107101,The transaction is closed before completing it。 交易失败(交易关单) | --- --- url: 'https://acquirer-api-docs-v4.pingpongx.com/notes/zh/appendix/exchange/index.md' description: >- 换汇币种支持列出可兑换的货币对。该表适用于需要进行国际货币兑换的场景,涵盖从AED到JPY等多种主要货币间的转换,帮助用户了解支持的货币种类及兑换方向,便于跨境交易和资金管理。 --- # 换汇币种支持 ## Currency Exchange | Currency From | Currency To | |---------------|-------------| | AED | CAD | | AED | CNH | | AED | EUR | | AED | GBP | | AED | HKD | | AED | USD | | AUD | CAD | | AUD | CNH | | AUD | EUR | | AUD | GBP | | AUD | HKD | | AUD | USD | | CAD | CNH | | CAD | EUR | | CAD | GBP | | CAD | HKD | | CAD | USD | | CNY | CAD | | CNY | CNH | | CNY | EUR | | CNY | GBP | | CNY | HKD | | CNY | USD | | EUR | AED | | EUR | AUD | | EUR | CAD | | EUR | CNH | | EUR | CNY | | EUR | GBP | | EUR | HKD | | EUR | INR | | EUR | JPY | | EUR | KRW | | EUR | MXN | | EUR | SGD | | EUR | USD | | EUR | SEK | | EUR | VND | | EUR | PHP | | EUR | THB | | EUR | DKK | | EUR | BRL | | EUR | NZD | | GBP | CAD | | GBP | CNH | | GBP | EUR | | GBP | HKD | | GBP | USD | | HKD | CAD | | HKD | CNH | | HKD | EUR | | HKD | GBP | | HKD | USD | | INR | CAD | | INR | CNH | | INR | EUR | | INR | GBP | | INR | HKD | | INR | USD | | JPY | CAD | | JPY | CNH | | JPY | EUR | | JPY | GBP | | JPY | HKD | | JPY | USD | | MXN | CAD | | MXN | CNH | | MXN | EUR | | MXN | GBP | | MXN | HKD | | MXN | USD | | SGD | CAD | | SGD | CNH | | SGD | EUR | | SGD | GBP | | SGD | HKD | | SGD | USD | | USD | CAD | | USD | CNH | | USD | EUR | | USD | GBP | | USD | HKD | | SEK | CAD | | SEK | CNH | | SEK | EUR | | SEK | GBP | | SEK | HKD | | SEK | USD | | DKK | CAD | | DKK | CNH | | DKK | EUR | | DKK | GBP | | DKK | HKD | | DKK | USD | | NZD | CAD | | NZD | CNH | | NZD | EUR | | NZD | GBP | | NZD | HKD | | NZD | USD | | MYR | CAD | | MYR | CNH | | MYR | EUR | | MYR | GBP | | MYR | HKD | | MYR | USD | | SAR | USD | | KWD | USD | | QAR | USD | | BHD | USD | | JOD | USD | | OMR | USD | | TWD | USD | | KRW | USD | | USD | KRW | | EGP | USD | | RUB | USD | | CHF | USD | | CZK | USD | | PLN | USD | | HUF | USD | | ZAR | USD | | RON | USD | | TRY | USD | | UAH | USD | | CRC | USD | | BRL | USD | | CNH | USD | | TND | USD | | NOK | USD | | KZT | USD | | PHP | USD | | CRC | EUR | | BRL | EUR | | CNH | EUR | | TND | EUR | | NOK | EUR | | KZT | EUR | | PHP | EUR | | IDR | USD | | BDT | USD | | CLP | USD | | COP | USD | | DZD | USD | | LAK | USD | | LKR | USD | | LYD | USD | | PEN | USD | | THB | USD | | USD | RUB | | CNY | RUB | | VND | USD | | USD | VND | | EUR | NOK | | EUR | CZK | | EUR | PLN | | EUR | RON | | EUR | CHF | | COP | HKD | | HKD | COP | | USD | TRY | | NGN | USD | | BYN | USD | | ALL | USD | | GEL | USD | | PKR | USD | | USD | NGN | | MZN | USD | | JMD | USD | | EUR | CZK | | USD | JMD | | USD | MZN | | RUB | CNH | | CNH | RUB | | COP | USD | | USD | COP | | KRW | HKD | | THB | HKD | | USD | DOP | | DOP | USD | | USD | CNY | | USD | BBD | | BBD | USD | | USD | PHP | | USD | JPY | | USD | SGD | | HKD | KRW | | HKD | SGD | | USD | THB | | USD | IDR | | HKD | THB | | HKD | JPY | --- --- url: 'https://acquirer-api-docs-v4.pingpongx.com/notes/zh/appendix/faq/index.md' description: >- 文档更新记录汇总了2023年各月的发布事项及内容简介,包括拒付流程图更新、异步通知和交易查询接口中3DS枚举值变更、新增JS-SDK-2.0文档及其调试工具、国家代码/交易币种列表调整、新增错误码、交易对账单接口下架、新增线下条码支付产品文档等。 --- # 文档更新记录 ## 2023年12月 | 发布日期 | 发布事项 | 内容简介 | |-------------|-----------------------|------------------------------------| | 2023年12月1日 | 拒付流程图更新 | 替换了流程图 | | 2023年12月12日 | 异步通知和交易查询接口中3DS枚举值变更 | 异步通知和交易查询接口中3DS枚举值变更,枚举值由数字变更成大写字母 | | 2023年12月13日 | 新增JS-SDK-2.0文档 | / | | 2023年12月14日 | 新增JS-SDK-2.0调试工具 | / | | 2023年12月15日 | 调整国家代码/交易币种列表,新增中文翻译列 | / | | 2023年12月21日 | 拒付新增异常代码 | UploadFileNumMaxError,表示`文件超过最大数量` | ## 2023年11月 | 发布日期 | 发布事项 | 内容简介 | |-------------|-------------------------------|--------------------------------------------| | 2023年11月16日 | 拒付主动获取调单明细和获取拒付明细返回处理截止时间格式调整 | 格式由原先的YYYY/MM/DD更新为yyyy-MM-dd HH:mm:ss | | 2023年11月22日 | 风险管理部分调整 | (1)拒付部分整合到风险管理部分;(2)风控组件增加SecureShieldJs组件 | ## 2023年10月 | 发布日期 | 发布事项 | 内容简介 | |-------------|-----------|-------------------------------| | 2023年10月12日 | 新增错误码 | 新增错误码:301021,301022,具体见附录状态码表 | | 2023年10月23日 | 交易对账单接口下架 | 新增SFTP对账服务 | ## 2023年9月 | 发布日期 | 发布事项 | 内容简介 | |------------|------------------|----------------------------------------------------------------------------| | 2023年9月5日 | 新增产品文档 | 新增线下条码支付产品文档,文档地址:https://acquirer-api-docs-v4.pingpongx.com/notes/zh/onlinePayment/offlineBarcodePayment/ | | 2023年9月5日 | 新增调单通知reasonCode | 文档地址:https://acquirer-api-docs-v4.pingpongx.com/notes/zh/appendix/chargebackReasonCode/,见调单类原因代码说明部分 | | 2023年9月6日 | 新增错误码 | 错误码:108003,退款失败(退款余额不足) | | 2023年9月8日 | 新增异步通知 | 新增异步通知:欺诈提醒通知,eventCode:NOTIFICATION\_OF\_FRAUD | | 2023年9月12日 | 新增接口 | 新增接口:一键支付新增查询接口,接口名称:/v4/authorization/list | | 2023年9月14日 | 异步通知重试规则调整 | 更新后重试间隔为 5s/5s/3m/10m/20m/30m/30m/30m/60m/3h/3h/3h | | 2023年9月20日 | 新增错误码 | 错误码:107101,The transaction is closed before completing it。 交易失败(交易关单) | --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/appendix/GpayBankCode/index.md description: GpayBankCode提供了越南主要银行的代码表,包括银行名称、银行代码和Pin Bank代码。适用于需要在支付系统中识别或验证越南银行信息的场景。 --- # GpayBankCode | Tên Ngân hàng | Bank code | Pin Bank code | |-------------------------------------------------------------|-----------|---------------| | Ngân hàng TMCP Ngoại thương Việt Nam | VCB | 970436 | | Ngân hàng TMCP Quốc tế | VIB | 970441 | | Ngân hàng TMCP Quân đội | MB | 970422 | | Ngân hàng TMCP Công thương Việt Nam | CTG | 970415 | | Ngân hàng TMCP phát triển TPHCM | HDB | 970437 | | Ngân hàng TMCP Quốc dân | NVB | 970419 | | Ngân hàng TMCP Hàng Hải Việt Nam | MSB | 970426 | | Ngân hàng TMCP Việt Á | VAB | 970427 | | Ngân hàng TNHH MTV Dầu khí toàn cầu | GPB | 970408 | | Ngân hàng TMCP Đại Dương | OJB | 970414 | | Ngân hàng TMCP Bắc Á | NASB | 970409 | | Ngân hàng TMCP Đông Á | DAB | 970406 | | Ngân hàng TMCP An Bình | ABB | 970425 | | Ngân hàng TMCP Đầu tư và phát triển Việt Nam | BIDV | 970418 | | Ngân hàng TMCP Sài Gòn Hà Nội | SHB | 970443 | | Ngân hàng TMCP Bảo Việt | BVB | 970438 | | Ngân hàng TMCP Bưu điện Liên Việt | LPB | 970449 | | Ngân hàng TMCP Tiên Phong | TPB | 970423 | | Ngân hàng Nông Nghiệp và PTNT Việt Nam | VARB | 970405 | | Ngân hàng TMCP Sài Gòn | SCB | 970429 | | Ngân hàng TMCP Kiên Long | KLB | 970452 | | Ngân hàng TMCP Đông Nam Á | Seab | 970440 | | Ngân hàng Liên doanh Việt Nga | VRB | 970421 | | Ngân hàng TNHH MTV PUBLIC Việt Nam | PBVN | 970439 | | Ngân hàng TMCP NAM Á | NAB | 970428 | | Ngân hàng TMCP Đại Chúng Việt Nam | PVCB | 970412 | | Ngân hàng Sài Gòn Công Thương | SGB | 970400 | | Ngân hàng TMCP Kỹ thương Việt Nam | TCB | 970407 | | Ngân hàng TMCP Xuất nhập khẩu Việt Nam | EIB | 970431 | | Ngân hàng TMCP Á châu | ACB | 970416 | | Ngân hàng TMCP Sài gòn Thương tín | STB | 970403 | | Ngân hàng TMCP Việt Nam Thịnh vượng | VPB | 970432 | | Ngân hàng TMCP Phương Đông | OCB | 970448 | | Ngân hàng TNHH MTV Xăng dầu Petrolimex | PGB | 970430 | | Ngân hàng TNHH MTV United Overseas Bank (Việt Nam) | UOB | 970458 | | Ngân hàng TNHH Indovina | IVB | 970434 | | Ngân hàng TNHH Woori bank | WOO | 970457 | | Ngân hàng TNHH MTV Shinhan (Việt Nam) | SVB | 970424 | | Ngân hàng TMCP Việt Nam thương tín | VB | 970433 | | Ngân hàng TMCP Bản Việt | VCCB | 970454 | | Ngân hàng TNHH một thành viên Hong Leong Việt Nam | HLB | 970442 | | Ngân hàng TNHH Một Thành Viên Standard Chartered (Việt Nam) | SCBank | 970410 | | Ngân hàng Thương mại TNHH MTV Xây dựng Việt Nam | CBB | 970444 | | Ngân hàng Hợp tác xã Việt Nam | COOPBANK | 970446 | | Ngân hàng số CAKE by VPBank | CAKE | 546034 | | Ngân hàng TNHH MTV HSBC (Việt Nam) | HSBC | 458761 | --- --- url: 'https://acquirer-api-docs-v4.pingpongx.com/notes/zh/appendix/lang/index.md' description: >- Locale定义了支持的语言和地区代码,适用于需要多语言支持的应用场景。表中列出了德语、英语等主要语言及其变体的Locale标识符与API传送值,如de代表德语,en-US代表美式英语。 --- # Locale | Locale | 语言名称 | API传送取值 | |:------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|:---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|:--------| | dede-DEde-CHde-ATde-LUde-LI | 德语德语(德国)德语(瑞士)德语(奥地利)德语(卢森堡)德语(列支敦士登) | de | | enen-USen-EGen-AUen-GBen-CAen-NZen-IEen-ZAen-JMen-BZen-TTen-SG | 英语英语(美国)英语(埃及)英语(澳大利亚)英语(英国)英语(加拿大)英语(新西兰)英语(爱尔兰)英语(南非)英语(牙买加)英语(伯利兹)英语(特里尼达和多巴哥)英语(新加坡) | en | | eses-ARes-GT es-CR es-PA es-DO es-MX es-VEes-CO es-PE es-EC es-CL es-UY es-PY es-BO es-SV es-HN es-NI es-PR | 西班牙语西班牙语(阿根廷)西班牙语(危地马拉)西班牙语(哥斯达黎加)西班牙语(巴拿马)西班牙语(多米尼加共和国)西班牙语(墨西哥)西班牙语(委内瑞拉)西班牙语(哥伦比亚)西班牙语(秘鲁)西班牙语(厄瓜多尔)西班牙语(智利)西班牙语(乌拉圭)西班牙语(巴拉圭)西班牙语(玻利维亚)西班牙语(萨尔瓦多)西班牙语(洪都拉斯)西班牙语(尼加拉瓜)西班牙语(波多黎各(美)) | es | | frfr-FRfr-BEfr-CAfr-CHfr-LU | 法语法语(法国)法语(比利时)法语(加拿大)法语(瑞士)法语(卢森堡) | fr | | itit-CH | 意大利语意大利语(瑞士) | it | | jaja-JP | 日语日语 | ja | | ru-Latnru-MI | 俄语(莫斯科)俄语 | ru | | zh-CN | 中文(简体) | zh | | et-EE | 爱沙尼亚语 | et | | pt-BR | 葡萄牙语(巴西) | pt-BR | | bg-BG | 保加利亚语(保加利亚) | bg | | pl-PL | 波兰语(波兰) | pl | | da-DK | 丹麦语(丹麦) | da | | fi-FI | 芬兰语(芬兰) | fi | | zh-HKzh-MO | 中文(繁体,香港特别行政区)中文(繁体,澳门特别行政区) | zh-HK | | kk-KZ | 哈萨克语(哈萨克斯坦) | kz | | ko-KR | 朝鲜语(韩国) | ko-KR | | nl-NLnl-BEfy-NL | 荷兰语(荷兰)荷兰语(比利时)弗里西亚语(荷兰) | nl | | cs-CZ | 捷克语(捷克共和国) | cs | | hr-HR | 克罗地亚语(克罗地亚) | cy | | lv-LV | 拉脱维亚语(拉脱维亚) | lv | | lt-LT | 立陶宛语(立陶宛) | lt | | ro-RO | 罗马尼亚语(罗马尼亚) | ro | | nonnsma-NOnn-NO | 律勒萨米语(挪威)挪威语(尼诺斯克语)南萨米语(挪威)sma-NO | no | | pt-PT | 葡萄牙语(葡萄牙) | pt | | sv-SE se-SEsmj-SEsma-SE | 瑞典语(瑞典)北萨米语(瑞典)律勒萨米语(瑞典)南萨米语(瑞典) | se | | srsh | 塞尔维亚语塞波尼斯-克罗地亚语 | sp | | sk-SK | 斯洛伐克语(斯洛伐克) | sk | | sl-SI | 斯洛文尼亚语(斯洛文尼亚) | si | | zh-TW | 中文(繁体,台湾) | zh-TW | | th-TH | 泰语(泰国) | th | | tr-TR | 土耳其语(土耳其) | tr | | uk-UA | 乌克兰语(乌克兰) | ua | | uz | 乌兹别克语 | uz | | vi-VIE | 越南语(越南) | vi | | el-GR | 希腊语(希腊) | el | | hu-HU | 匈牙利语(匈牙利) | hu | | id-ID | 印度尼西亚语(印度尼西亚) | id | --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/appendix/languageCode/index.md description: >- 语言代码列表提供了多种语言及其对应地区的Locale标识符和API传送取值,用于在多语言环境中统一语言设置。表格列出了包括德语、英语、西班牙语、法语、意大利语和日语等主要语言的地区变体及对应的API参数值,便于开发者根据用户所在地区选择合适的语言版本。 --- # 语言代码 ## 语言代码列表 | Locale | 语言名称 | API传送取值 | |---------|----------------|---------| | ar | 阿拉伯语 | ar | | bg-BG | 保加利亚语(保加利亚) | bg | | cs-CZ | 捷克语(捷克共和国) | cs | | da-DK | 丹麦语(丹麦) | da | | de-DE | 德语(德国) | de | | de-AT | 德语(奥地利) | de | | de-CH | 德语(瑞士) | de | | el-GR | 希腊语(希腊) | el | | en-US | 英语(美国) | en | | en-GB | 英语(英国) | en | | en-CA | 英语(加拿大) | en | | en-AU | 英语(澳大利亚) | en | | en-IE | 英语(爱尔兰) | en | | en-NZ | 英语(新西兰) | en | | en-ZA | 英语(南非) | en | | en-SG | 英语(新加坡) | en | | es-ES | 西班牙语(西班牙) | es | | es-MX | 西班牙语(墨西哥) | es | | es-AR | 西班牙语(阿根廷) | es | | es-CO | 西班牙语(哥伦比亚) | es | | et-EE | 爱沙尼亚语 | et | | fi-FI | 芬兰语(芬兰) | fi | | fr-FR | 法语(法国) | fr | | fr-CA | 法语(加拿大) | fr | | fr-BE | 法语(比利时) | fr | | fr-CH | 法语(瑞士) | fr | | hr-HR | 克罗地亚语(克罗地亚) | hr | | hu-HU | 匈牙利语(匈牙利) | hu | | id-ID | 印度尼西亚语(印度尼西亚) | id | | it-IT | 意大利语(意大利) | it | | it-CH | 意大利语(瑞士) | it | | ja-JP | 日语 | ja | | ko-KR | 朝鲜语(韩国) | ko | | lt-LT | 立陶宛语(立陶宛) | lt | | lv-LV | 拉脱维亚语(拉脱维亚) | lv | | nl-NL | 荷兰语(荷兰) | nl | | nl-BE | 荷兰语(比利时) | nl | | no | 挪威语 | no | | pl-PL | 波兰语(波兰) | pl | | pt-PT | 葡萄牙语(葡萄牙) | pt | | pt-BR | 葡萄牙语(巴西) | pt\_BR | | ro-RO | 罗马尼亚语(罗马尼亚) | ro | | ru-RU | 俄语(俄罗斯) | ru | | sk-SK | 斯洛伐克语(斯洛伐克) | sk | | sl-SI | 斯洛文尼亚语(斯洛文尼亚) | sl | | sr | 塞尔维亚语 | sr | | sv-SE | 瑞典语(瑞典) | sv | | th-TH | 泰语(泰国) | th | | tr-TR | 土耳其语(土耳其) | tr | | uk-UA | 乌克兰语(乌克兰) | uk | | uz | 乌兹别克语 | uz | | vi-VN | 越南语(越南) | vi | | zh-CN | 中文(简体) | zh\_CN | | zh-HK | 中文(繁体,香港特别行政区) | zh\_HK | | zh-TW | 中文(繁体,台湾) | zh\_TW | --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/appendix/merchantTransactionId/index.md description: >- merchantTransactionId是商家交易标识符,用于唯一标识商家的每笔交易。在电子商务和支付系统中,通过生成唯一的merchantTransactionId,商家能够准确跟踪订单状态及处理情况。该标识符通常与支付服务提供商生成的transactionId关联,以确保交易可被有效管理和追踪 --- # merchantTransactionId ## merchantTransactionId参数说明 merchantTransactionId 通常指商家交易标识符,是用于唯一标识商家的交易的字符串或数字。在许多系统和场景中,merchantTransactionId 也可以称为商家订单号、商户交易编号等。 与 transactionId 类似,merchantTransactionId 的作用是确保每个商家交易都具有唯一的标识符,以便系统可以准确地跟踪和管理每个交易。在电子商务网站上,当商家接收到客户的订单时,他们可以选择自己的方式生成唯一的 merchantTransactionId。这样,商家就可以使用 merchantTransactionId 来跟踪订单状态并保证订单的正确处理。 在支付系统中,商家往往需要将其 merchantTransactionId 提供给支付服务提供商来处理付款。这个标识符通常会与支付服务提供商生成的 transactionId 进行关联,并且可以帮助商家追踪和确认付款的状态。 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/appendix/paymentMethods/index.md description: >- 支付方式列表涵盖了多种国际和本地支付选项,包括信用卡(如VISA、Mastercard、American Express)、借记卡(如JCB、DinersClub、Discover)及特定地区支付工具(如Giropay、iDeal、Trustpay、My Bank、SEPA、Kakaopay),适用 --- # 支付方式 更多支付方式请下载 支付方式.xlsx | 支付方式 | 备注 | |:-----------|:---------------------------| | VISA | VISA 卡 | | Mastercard | Mastercard 卡 | | American | Express American Express 卡 | | JCB | JCB 卡 | | DinersClub | DinersClub 卡 | | Discover | Discover 卡 | | Giropay | Giropay | | iDeal | iDeal | | Trustpay | Trustpay | | My Bank | My Bank | | SEPA | SEPA | | Kakaopay | Kakaopay | --- --- url: 'https://acquirer-api-docs-v4.pingpongx.com/notes/zh/appendix/register/index.md' description: >- 介绍商户通过PingPongCheckout官网注册和登录的流程。适用于全球商户快速创建收单账户并使用服务。新用户需填写基本信息完成注册,并在首次登录时修改密码;支持简体中文和英文两种语言界面,推荐使用Chrome浏览器访问。 --- # 商户入驻流程 ## 系统注册 商户可通过 PingPongCheckout 官网点击注册,进行收单账户的创建。 按照页面提示填写姓名,邮箱,手机号,输入验证码进行注册, 注册后将在申请邮箱中收到初始密码邮件,用此密码登录即可。 ## 系统登陆 已注册的商户可直接进行登陆操作,在浏览器地址栏输入 https://checkout.pingpongx.com/ ,即可进入商户服务平台登录页。(建议使用 Chrome 浏览器) 在登录页输入企业admin邮件地址、登录名、密码来完成登录。 每个用户首次登录 都需要修改密码, 系统支持简体中文、英文两种语言,可根据需要选择相应语言登录。 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/appendix/sanctionedCountries/index.md description: >- 制裁国家列表提供了受国际制裁的国家和地区信息,包括中文名称和国家二字码。适用于需要遵守国际制裁规定的支付、贸易及其他业务场景。特别注意,克里米亚、顿涅茨克和卢甘斯克地区虽然属于乌克兰,但在某些情况下被单独提及。 --- # 制裁国家列表 | 制裁国家 | 中文名称 | 国家二字码 | |---------------------------------------------|------------------|-------| | Afghanistan | 阿富汗 | AF | | Burundi | 布隆迪 | BI | | Central African Rep | 中非共和国 | CF | | Crimea, Donetsk, Luhansk Regions of Ukraine | 克里米亚、顿涅茨克、卢甘斯克地区 | | | Cuba | 古巴 | CU | | Haiti | 海地 | HT | | Iran, Islamic Republic of | 伊朗 | IR | | Libya | 利比亚 | LY | | Mali | 马里 | ML | | Myanmar | 缅甸 | MM | | North Korea | 朝鲜 | KP | | Somalia | 索马里 | SO | | South Sudan | 南苏丹 | SS | | Syria | 叙利亚 | SY | | Yemen | 也门 | YE | | Zimbabwe | 津巴布韦 | ZW | ::: note 注意 "Crimea, Donetsk, Luhansk Regions of Ukraine"这一项没有国家二字码,因为这些地区是乌克兰的一部分,但在特定国际情况下可能被单独提及。 ::: --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/appendix/stateCode/index.md description: 此文档提供了美国和加拿大各州及地区的中文名称、英文名称及其对应的简码。适用于需要在支付系统中识别或验证这些地区信息的场景,如地址填写、物流配送等。 --- # 美国加拿大地区各state简码表 ## 加拿大各州 |中文名称|英文名称|code| |:---:|:---:|:----:| |安大略省 |Ontario| ON| |魁北克省|Quebec|QC| |新斯科舍省| Nova Scotia|NS| |新不伦瑞克省| New Brunswick| NB| |曼尼托巴省| Manitoba|MB| |不列颠哥伦比亚省| British Columbia | BC | |爱德华王子岛省| Prince Edward Island| PE | |阿尔伯塔省 | Alberta | AB | |萨斯喀彻温省| Saskatchewan | SK | |西北地区| Northwest Territories | NT | |努纳武特地区| Nunavut | NU | |纽芬兰与拉布拉多省 | Newfoundland and Labrador | NL | |育空|Yukon|YT| ## 美国各州 |州名| 英文| 简称| |:---:|:---:|:----:| |亚拉巴马州|Alabama|AL| |阿拉斯加州|Alaska|AK| |亚利桑那州|Arizona|AZ| |阿肯色州|Arkansas|AR| |加利福尼亚州|California|CA| |科罗拉多州|Colorado|CO| |康涅狄格州|Connecticut|CT| |特拉华州|Delaware|DE| |佛罗里达州|Florida|FL| |佐治亚州|Georgia|GA| |夏威夷州|Hawaii|HI| |爱达荷州|Idaho|ID| |伊利诺伊州|Illinois|IL| |印第安纳州|Indiana|IN| |爱荷华州|Iowa|IA| |堪萨斯州|Kansas|KS| |肯塔基州|Kentucky|KY| |路易斯安那州|Louisiana|LA| |缅因州|Maine|ME| |马里兰州|Maryland|MD| |马萨诸塞州|Massachusetts|MA| |密歇根州|Michigan|MI| |明尼苏达州|Minnesota|MN| |密西西比州|Mississippi|MS| |密苏里州|Missouri|MO| |蒙大拿州|Montana|MT| |内布拉斯加州|Nebraska|NE| |内华达州|Nevada|NV| |新罕布什尔州|New Hampshire|NH| |新泽西州|New Jersey|NJ| |新墨西哥州|New Mexico|NM| |纽约州|New York|NY| |北卡罗来纳州|North Carolina|NC| |北达科他州|North Dakota|ND| |俄亥俄州|Ohio|OH| |俄克拉何马州|Oklahoma|OK| |俄勒冈州|Oregon|OR| |宾夕法尼亚州|Pennsylvania|PA| |罗得岛州|Rhode Island|RI| |南卡罗来纳州|South Carolina|SC| |南达科他州|South Dakota|SD| |田纳西州|Tennessee|TN| |得克萨斯|Texas|TX| |犹他州|Utah|UT| |佛蒙特州|Vermont|VT| |弗吉尼亚州|Virginia|VA| |华盛顿州|Washington|WA| |西弗吉尼亚州|West Virginia|WV| |威斯康星州|Wisconsin|WI| |怀俄明州|Wyoming|WY| |美属萨摩亚群岛|American Samoa|AS| |华盛顿哥伦比亚特区|District of Columbia|DC| |美属北马里亚纳群岛|Northern Mariana Islands|MP| |密克罗尼西亚联邦国|Federated States of Micronesia|FM| |美国关岛|Guam|GU| |帕劳|Palau|PW| |波多黎各|Puerto|PR| |马绍尔群岛|Marshall Islands|MH| |维尔京群岛|Virgin Islands|VI| --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/appendix/successCodeList/index.md description: >- 状态码文档列出了支付系统中各类操作结果的返回码及其说明,适用于请求处理、交易状态及配置校验等场景。成功状态如交易成功(000000)和请求成功(001000),异常包括商户禁用(101000)、参数错误(102000)等,帮助开发者快速定位问题并优化集成。 --- # 状态码 ## 请求成功或交易成功 | 返回码 | 说明 | 描述 | |:-------|:------|:-----------------------| | 000000 | 交易成功 | Transaction succeeded | | 001000 | 请求成功 | Successful request | | 002000 | 交易进行中 | Transaction processing | ## 配置校验异常 | 返回码 | 说明 | 描述 | |:-------|:---------|:-------------------------| | 101000 | 商户已经被禁用 | Merchant is disabled | | 101001 | 商户配置有误 | Error on merchant config | | 101002 | 3DS 配置有误 | Error on 3DS config | ## 基础校验异常 | 返回码 | 说明 | 描述 | |:-------|:--------------------|:------------------------------------------------------------------------| | 102000 | 请求参数不合法 | Invalid or missing parameter | | 102001 | 交易已取消 | transaction is cancelled | | 102100 | 请求参数错误 | Request param error | | 102101 | 请求参数错误 | Request param error | | 102102 | 卡号格式不正确 | CardNumber invalid format | | 102103 | 手机号格式不正确 | MobilePhone invalid format | | 102104 | 支付令牌密文格式无效 | TokenCryptogram invalid format | | 102105 | 持卡人姓名格式不正确 | CardInfo.holderName invalid format | | 102106 | 卡号有效期格式不正确 | ExpiryDate invalid format | | 102107 | CVC格式不正确 | CVC invalid format | | 102108 | 手机号不正确,请输入正确的手机号并重试 | Invalid phone number, please input correct phone number and try again.. | | 102109 | 手机号必传,请输入手机号 | Phone number is required, please input phone number | | 102110 | 持卡人姓名错误,请输入卡上显示的姓名(通常仅限字母) | Wrong cardholder name,please enter the name as shown on your card, typically letters only. | | 103000 | 无效授权参数 | Invalid authentication | | 104000 | 签名不匹配 | Invalid signature | | 105000 | 无效交易或交易已过期 | Invalid or expired transaction | | 105001 | 重复交易 | Duplicate transaction | | 105002 | 暂时无法通过,请稍后再试 | Cannot approve at this time, please try again later | ## 业务校验异常 | 返回码 | 说明 | 描述 | |:-------|:--------------------------|:-------------------------------------------------------------------------| | 106000 | 无效交易币种 | Invalid transaction currency | | 106001 | 无效卡品牌 | Invalid card scheme | | 106002 | 无效国家 | Invalid country | | 106003 | 无效语种 | Invalid language | | 107000 | 交易失败(重复交易) | Transaction failed (duplicated Transaction) | | 107001 | 交易失败(交易不存在) | Transaction failed (transaction does not exist) | | 107002 | 退款、预授权确认、预授权取消失败(原交易不存在) | Transaction failed (original transaction does not exist) | | 107003 | 退款、预授权确认、预授权取消失败(原交易类型不符) | Transaction failed (original transaction transactionType not match) | | 107004 | 退款、预授权确认、预授权取消失败(原交易状态不符) | Transaction failed (original transaction transaction status not match) | | 107005 | 退款、预授权确认、预授权取消失败(原交易币种不符) | Transaction failed (original transaction transaction currency not match) | | 107100 | 交易失败(用户取消) | Transaction failed (User Cancel) | | 107101 | 交易失败(交易关单) | The transaction is closed before completing it | | 108000 | 退款失败(可退款金额不足) | Refund failed (refund amount exceeded original transaction) | | 108001 | 退款失败(超过退款时限) | Refund failed (out of the range) | | 108002 | 退款失败(争议交易不可退款) | Refund failed (already chargeBacked) | | 108003 | 退款失败(退款余额不足) | Refund failed (refund amount exceeded refund balance) | | 109010 | 预授权确认失败(订单正在风控审核中) | Capture failed since order is under risk reviewing. | | 109000 | 预授权确认失败(原交易已取消) | Capture failed(original transaction was reverse) | | 109001 | 预授权确认失败(当前确认金额超过原交易金额) | Capture failed (capture amount exceeded original transaction) | | 109002 | 预授权取消失败(原交易已完成预授权) | Reverse failed (original transaction was captured) | | 109003 | 预授权取消失败(与原交易金额不一致) | Reverse failed (inconsistent with the original transaction amount) | ## ⻛控异常 | 返回码 | 说明 | 描述 | |:-------|:-------|:----------------------------------------| | 200000 | 高⻛险拦截 | Transaction reject(high risk) | | 201000 | 有欺诈嫌疑 | Transaction reject(suspected fraud) | | 202000 | 过期卡 | Transaction reject(expired card) | | 202001 | 挂失卡 | Transaction reject(stolen or lost card) | | 203000 | ⻛控系统异常 | Error on the risk system | ## 银行返回异常 | 返回码 | 说明 | 描述 | |:-------|:-------------------------------|:-------------------------------------------------------------------------------------------------------| | 300000 | 交易被拒绝(无效卡) | Transaction declined (invalid card) | | 300001 | 交易被拒绝(无效校验码) | Transaction declined (invalid CVV) | | 300002 | 交易被拒绝(有效期错误) | Transaction declined (wrong expiry date) | | 300003 | 交易被拒绝(持卡人错误) | Transaction declined (account holder not valid) | | 300004 | 持卡人无权进行此交易 | Transaction not permitted to cardholder | | 300005 | 受限制或无效的卡 | Restricked or invalid card | | 300006 | 被阻止或首次使用 | Blocked or first used | | 300007 | 无效卡源 | Invalid issuer | | 300008 | 无效的PIN | Invalid PIN | | 300009 | 不正确的PIN | Incorrect PIN | | 300010 | 无效的安全码 | Invalid security code | | 301001 | 交易被拒绝(参数格式错误) | Transaction declined (format error) | | 301002 | 交易失败,请联系发卡行 | Transaction failed, please contact issuer | | 301003 | 交易被拒绝(超出限额) | Transaction declined (limit exceeded) | | 301004 | 交易被拒绝(尝试次数过多) | Transaction declined (too many invalid tries) | | 301005 | 交易被拒绝(超出限制次数) | Transaction declined (maximum transaction frequency exceeded) | | 301006 | 交易被拒绝(超出商家限额) | Transaction declined (merchants limit exceeded) | | 301007 | 交易被拒绝(限制卡) | Transaction declined (restricted card) | | 301008 | 交易被拒绝(过期卡) | Transaction declined (expired card) | | 301009 | 交易被拒绝(当前卡被锁定或已被挂失) | Transaction declined (card lost) | | 301101 | 发卡行拒绝,请联系发卡行 | Card Issuer reject,please contact card issuer | | 301010 | 交易被拒绝(个人识别号码不正确) | Transaction declined (Incorrect personal identification number) | | 301011 | 交易被拒绝(持卡人 3DS 校验失败) | Transaction declined (cardholder authentication verification failure) | | 301012 | 交易被拒绝(无效金额) | Transaction declined (invalid amount) | | 301013 | 交易被拒绝(重复交易) | Transaction declined (duplicate transaction) | | 301015 | 交易被拒绝(请重新尝试授权) | Transaction declined (Retry using authentication,such as EMV 3DS) | | 301021 | 交易被拒绝(个人姓名不正确) | Transaction declined (Incorrect personal name, please correct it and retry) | | 301022 | 交易被拒绝(个人信息不匹配) | Transaction declined (personal information not match, please correct it and retry) | | 301023 | 用户 KYC 未通过 | User kyc not qualified | | 301099 | 交易被拒绝(其他原因) | Transaction declined (other reason) | | 301100 | 卡bin不支持 | Unsupported card BIN | | 301101 | 发卡行拒绝,请联系发卡行 | Card Issuer reject,please contact card issuer. | | 301103 | 违反相关法律 | Violation of law | | 301104 | 无效交易 | Invalid Transaction | | 301105 | 交易关闭失败 | Transaction closure failed | | 302000 | 交易被拒绝 (高⻛险交易) | Transaction declined (High risk transaction) | | 302001 | 交易被拒绝(由于风险政策)。请尝试其他支付方式或联系商户支持 | Acquirer transaction Refuse(due to risk policy).Try another payment method or contact merchant support | | 303000 | 退款失败 (可退款金额不足、原交易已取消或正在退款中) | Refund failed(refund volume exceeded or tx reversed or invalid workflow) | | 304000 | Recurring交易失败(原交易不存在) | Recurring failed (original transaction does not exist) | | 305001 | ISP认证信息不存在 | ISP authentication information does not exist | | 305002 | ISP认证失败 | ISP authentication failed | ## 3DS 验证异常 | 返回码 | 说明 | 描述 | |:-------|:----------------------|:-------------------------------------------------------------------| | 400000 | 3DS 认证失败 | Transaction failed (3DS validation failed) | | 400001 | 持卡人未开通 3DS 交易 | Transaction failed(customer not participating in 3DSecure program) | | 400002 | 3DS认证失败(消费者身份验证失败) | Transaction failed (3DS\_CONSUMER\_AUTHENTICATION\_FAILED) | | 400003 | 3DS认证失败(无法对付款人进行身份验证) | Transaction failed (3DS\_AUTHENTICATION\_FAILED) | | 400004 | 3DS认证失败(无法对付款人进行身份验证) | Transaction failed (3DS\_MISSING\_FIELD) | | 400005 | 3DS认证失败(无法对付款人进行身份验证) | Transaction failed (3DS\_INVALID\_DATA) | ## 营销系统异常 | 返回码 | 说明 | 描述 | |:-------|:---------|:------------------------------------------------------------| | 131000 | 营销预算已达上限 | Marketing budget has reached its limit. | | 132000 | 营销笔数已达上限 | The number of marketing transactions has reached its limit. | | 133000 | 营销规则错误 | Marketing rule error. | ## 系统异常 | 返回码 | 说明 | 描述 | |:-------|:-------------------------|:---------------------------------------------------------------------------------------| | 500000 | 内部网关异常 | Error on the internal gateway | | 500001 | 内部网关异常(内部服务调用异常) | Error on the internal gateway(invoke internal service error) | | 500002 | 内部网关异常(状态机异常) | Error on the internal gateway(state machine error) | | 500003 | 内部网关异常(流程数据不存在) | Error on the internal gateway(invalid workflow | | 500004 | 内部网关异常(流程已经终止) | Error on the internal gateway(workflow was terminated) | | 500005 | 内部网关异常(3DS 交易异常) | Error on the internal gateway(threeDSecure transaction error) | | 500006 | 内部网关异常(处理响应异常) | Error on the internal gateway(analysis response error) | | 500008 | 内部网关异常(通道路由错误,没有可用的支付通道) | Error on the internal gateway (Channel Route Error - there is no available subChannel) | | 500009 | 通道路由错误,没有可用的merchantId | Channel Route Error - there is no available merchantId | | 500010 | 发卡方系统或支付网络暂时无响应 | Issuer unavailable or switch inoperative | | 600000 | 外部系统异常,请稍后重试 | Error on the external system - Please try again later | | 600001 | 外部系统请求失败 | Request the external gateway error | | 600002 | 外部系统响应超时 | Received external gateway response timeout | | 600003 | 发卡机构系统异常 | System malfunction(Card Issuer) | ## 支付响应码修改对照表 | 返回码 | 修改前描述 | 修改后描述 | |--------|-------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------| | 102105 | HolderName invalid format 持卡人姓名格式不正确 | CardInfo.holderName invalid format持卡人姓名格式不正确 | | 301002 | Transaction declined (Do not honor,Please contact the issuing bank to confirm the bank card payment limit)交易被拒绝(不予承兑,请联系发卡行确认银行卡支付限额) | Transaction failed, please contact issuer交易失败,请联系发卡行 | | 301105 | Transaction cancellation failed交易取消失败 | Transaction closure failed交易关闭失败 | | 302001 | Transaction reject(PP risk control) 交易被拒绝 (PP风控拒绝) | Acquirer transaction Refuse(due to risk policy).Try another payment method or contact merchant support 交易被拒绝(由于风险政策)。请尝试其他支付方式或联系商户支持 | --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/appendix/transactionCurrency/index.md description: >- 交易币种列表提供了全球多种货币的详细信息,包括货币名称、三字码及最小单位的小数位数。适用于需要处理多币种交易的支付系统或金融应用,确保在国际支付中准确表示货币金额。 --- # 交易币种 ## 交易币种 | 币种 | 货币 | 三字码 | 最小单位(小数位数) | |:------------|:----------------------------------------------|:----|:-----------| | 阿富汗尼 | Afghani | AFN | 2 | | 阿尔及利亚第纳尔 | Algerian Dinar | DZD | 2 | | 阿根廷比索 | Argentine Peso | ARS | 2 | | 亚美尼亚德拉姆 | Armenian Dram | AMD | 2 | | 阿鲁巴弗罗林 | Aruban Florin | AWG | 2 | | 澳大利亚元 | Australian Dollar | AUD | 2 | | 阿塞拜疆马纳特 | Azerbaijanian Manat | AZN | 2 | | 巴哈马元 | Bahamian Dollar | BSD | 2 | | 巴林第纳尔 | Bahraini Dinar | BHD | 3 | | 泰铢 | Baht | THB | 2 | | 巴波亚 | Balboa | PAB | 2 | | 巴巴多斯元 | Barbados Dollar | BBD | 2 | | 白俄罗斯卢布 | Belarusian Ruble | BYN | 2 | | 伯利兹元 | Belize Dollar | BZD | 2 | | 百慕大元 | Bermudian Dollar | BMD | 2 | | 委内瑞拉玻利瓦尔 | Bolívar | VEF | 2 | | 玻利维亚诺 | Boliviano | BOB | 2 | | 巴西雷亚尔 | Brazilian Real | BRL | 2 | | 文莱元 | Brunei Dollar | BND | 2 | | 保加利亚列弗 | Bulgarian Lev | BGN | 2 | | 布隆迪法郎 | Burundi Franc | BIF | 0 | | 佛得角埃斯库多 | Cabo Verde Escudo | CVE | 2 | | 加拿大元 | Canadian Dollar | CAD | 2 | | 开曼群岛元 | Cayman Islands Dollar | KYD | 2 | | 西非法郎(BCEAO) | CFA Franc BCEAO | XOF | 0 | | 中非法郎(BEAC) | CFA Franc BEAC | XAF | 0 | | 太平洋法郎 | CFP Franc | XPF | 0 | | 智利比索 | Chilean Peso | CLP | 0 | | 哥伦比亚比索 | Colombian Peso | COP | 2 | | 科摩罗法郎 | Comoro Franc | KMF | 0 | | 刚果法郎 | Congolese Franc | CDF | 2 | | 可兑换马克 | Convertible Mark | BAM | 2 | | 尼加拉瓜科多巴 | Cordoba Oro | NIO | 2 | | 哥斯达黎加科朗 | Costa Rican Colon | CRC | 2 | | 古巴比索 | Cuban Peso | CUP | 2 | | 捷克克朗 | Czech Koruna | CZK | 2 | | 冈比亚达拉西 | Dalasi | GMD | 2 | | 丹麦克朗 | Danish Krone | DKK | 2 | | 马其顿第纳尔 | Denar | MKD | 2 | | 吉布提法郎 | Djibouti Franc | DJF | 0 | | 圣多美和普林西比多布拉 | Dobra | STD | 2 | | 多米尼加比索 | Dominican Peso | DOP | 2 | | 越南盾 | Dong | VND | 0 | | 东加勒比元 | East Caribbean Dollar | XCD | 2 | | 埃及镑 | Egyptian Pound | EGP | 2 | | 萨尔瓦多科朗 | El Salvador Colon | SVC | 2 | | 埃塞俄比亚比尔 | Ethiopian Birr | ETB | 2 | | 欧元 | Euro | EUR | 2 | | 福克兰群岛镑 | Falkland Islands Pound | FKP | 2 | | 斐济元 | Fiji Dollar | FJD | 2 | | 匈牙利福林 | Forint | HUF | 0 | | 加纳塞地 | Ghana Cedi | GHS | 2 | | 直布罗陀镑 | Gibraltar Pound | GIP | 2 | | 海地古德 | Gourde | HTG | 2 | | 巴拉圭瓜拉尼 | Guarani | PYG | 0 | | 几内亚法郎 | Guinea Franc | GNF | 0 | | 圭亚那元 | Guyana Dollar | GYD | 2 | | 港元 | Hong Kong Dollar | HKD | 2 | | 乌克兰格里夫尼亚 | Hryvnia | UAH | 2 | | 冰岛克朗 | Iceland Krona | ISK | 0 | | 印度卢比 | Indian Rupee | INR | 2 | | 伊朗里亚尔 | ranian Rial | IRR | 2 | | 伊拉克第纳尔 | Iraqi Dinar | IQD | 3 | | 牙买加元 | Jamaican Dollar | JMD | 2 | | 约旦第纳尔 | Jordanian Dinar | JOD | 3 | | 肯尼亚先令 | Kenyan Shilling | KES | 2 | | 巴布亚新几内亚基那 | Kina | PGK | 2 | | 老挝基普 | Kip | LAK | 2 | | 克罗地亚库纳 | Kuna | HRK | 2 | | 科威特第纳尔 | Kuwaiti Dinar | KWD | 3 | | 安哥拉宽扎 | Kwanza | AOA | 2 | | 缅甸缅元 | Kyat | MMK | 2 | | 格鲁吉亚拉里 | Lari | GEL | 2 | | 黎巴嫩镑 | Lebanese Pound | LBP | 2 | | 阿尔巴尼亚列克 | Lek | ALL | 2 | | 洪都拉斯伦皮拉 | Lempira | HNL | 2 | | 塞拉利昂利昂 | Leone | SLL | 2 | | 利比里亚元 | Liberian Dollar | LRD | 2 | | 利比亚第纳尔 | Libyan Dinar | LYD | 3 | | 斯威士兰里兰吉尼 | Lilangeni | SZL | 2 | | 莱索托洛蒂 | Loti | LSL | 2 | | 马达加斯加阿里亚里 | Malagasy Ariary | MGA | 2 | | 马拉维克瓦查 | Malawi Kwacha | MWK | 2 | | 马来西亚令吉 | Malaysian Ringgit | MYR | 2 | | 毛里求斯卢比 | Mauritius Rupee | MUR | 2 | | 墨西哥比索 | Mexican Peso | MXN | 2 | | 墨西哥投资单位 | Mexican Unidad de Inversion (UDI) | MXV | 2 | | 摩尔多瓦列伊 | Moldovan Leu | MDL | 2 | | 摩洛哥迪拉姆 | Moroccan Dirham | MAD | 2 | | 莫桑比克梅蒂卡尔 | Mozambique Metical | MZN | 2 | | 波利维亚索尔(资金) | Mvdol | BOV | 2 | | 尼日利亚奈拉 | Naira | NGN | 2 | | 厄立特里亚纳克法 | Nakfa | ERN | 2 | | 纳米比亚元 | Namibia Dollar | NAD | 2 | | 尼泊尔卢比 | Nepalese Rupee | NPR | 2 | | 荷属安的列斯盾 | Netherlands Antillean Guilder | ANG | 2 | | 以色列新谢克尔 | New Israeli Sheqel | ILS | 2 | | 新台币 | New Taiwan Dollar | TWD | 2 | | 新西兰元 | New Zealand Dollar | NZD | 2 | | 不丹努扎姆 | Ngultrum | BTN | 2 | | 朝鲜圆 | North Korean Won | KPW | 2 | | 挪威克朗 | Norwegian Krone | NOK | 2 | | 毛里塔尼亚乌吉亚 | Ouguiya | MRO | 2 | | 汤加潘加 | Pa’anga | TOP | 2 | | 巴基斯坦卢比 | Pakistan Rupee | PKR | 2 | | 澳门元 | Pataca | MOP | 2 | | 可兑换比索 | Peso Convertible | CUC | 2 | | 乌拉圭比索 | Peso Uruguayo | UYU | 2 | | 菲律宾比索 | Philippine Peso | PHP | 2 | | 英镑 | Pound Sterling | GBP | 2 | | 博茨瓦纳普拉 | Pula | BWP | 2 | | 卡塔尔里亚尔 | Qatari Rial | QAR | 2 | | 危地马拉格查尔 | Quetzal | GTQ | 2 | | 南非兰特 | Rand | ZAR | 2 | | 阿曼里亚尔 | Rial Omani | OMR | 3 | | 柬埔寨瑞尔 | Riel | KHR | 2 | | 罗马尼亚列伊 | Romanian Leu | RON | 2 | | 马尔代夫拉菲亚 | Rufiyaa | MVR | 2 | | 印度尼西亚盾 | Rupiah | IDR | 0 | | 俄罗斯卢布 | Russian Ruble | RUB | 2 | | 卢旺达法郎 | Rwanda Franc | RWF | 0 | | 圣赫勒拿镑 | Saint Helena Pound | SHP | 2 | | 沙特里亚尔 | Saudi Riyal | SAR | 2 | | 塞尔维亚第纳尔 | Serbian Dinar | RSD | 2 | | 塞舌尔卢比 | Seychelles Rupee | SCR | 2 | | 新加坡元 | Singapore Dollar | SGD | 2 | | 秘鲁索尔 | Sol | PEN | 2 | | 所罗门群岛元 | Solomon Islands Dollar | SBD | 2 | | 吉尔吉斯斯坦索姆 | Som | KGS | 2 | | 索马里先令 | Somali Shilling | SOS | 2 | | 塔吉克斯坦索莫尼 | Somoni | TJS | 2 | | 南苏丹镑 | South Sudanese Pound | SSP | 2 | | 斯里兰卡卢比 | Sri Lanka Rupee | LKR | 2 | | 苏丹镑 | Sudanese Pound | SDG | 2 | | 苏里南元 | Surinam Dollar | SRD | 2 | | 瑞典克朗 | Swedish Krona | SEK | 2 | | 瑞士法郎 | Swiss Franc | CHF | 2 | | 叙利亚镑 | Syrian Pound | SYP | 2 | | 孟加拉塔卡 | Taka | BDT | 2 | | 萨摩亚塔拉 | Tala | WST | 2 | | 坦桑尼亚先令 | Tanzanian Shilling | TZS | 2 | | 哈萨克斯坦腾格 | Tenge | KZT | 2 | | 特立尼达和多巴哥元 | Trinidad and Tobago Dollar | TTD | 2 | | 蒙古图格里克 | Tugrik | MNT | 2 | | 突尼斯第纳尔 | Tunisian Dinar | TND | 3 | | 土耳其里拉 | Turkish Lira | TRY | 2 | | 土库曼斯坦新马纳特 | Turkmenistan New Manat | TMT | 2 | | 阿联酋迪拉姆 | UAE Dirham | AED | 2 | | 乌干达先令 | Uganda Shilling | UGX | 0 | | 南美洲开发基金单位 | Unidad de Fomento | CLF | 4 | | 哥伦比亚真值 | Unidad de Valor Real | COU | 2 | | 乌拉圭指数保值单位 | Uruguay Peso en Unidades Indexadas (URUIURUI) | UYI | 0 | | 美元 | US Dollar | USD | 2 | | 美元(次日) | US Dollar (Next day) | USN | 2 | | 乌兹别克斯坦苏姆 | Uzbekistan Sum | UZS | 2 | | 瓦努阿图瓦图 | Vatu | VUV | 0 | | 瑞士“和”欧元 | WIR Euro | CHE | 2 | | 瑞士“和”法郎 | WIR Franc | CHW | 2 | | 韩元 | Won | KRW | 0 | | 也门里亚尔 | Yemeni Rial | YER | 2 | | 日元 | Yen | JPY | 0 | | 人民币 | Yuan Renminbi | CNY | 2 | | 赞比亚克瓦查 | Zambian Kwacha | ZMW | 2 | | 津巴布韦元 | Zimbabwe Dollar | ZWL | 2 | | 波兰兹罗提 | Zloty | PLN | 2 | --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/appendix/XenditRefundBankList/index.md description: >- 泰国退款银行列表提供了支持退款服务的泰国银行代码和名称。适用于处理泰国地区的退款交易,涵盖主要商业银行及部分国际银行分支机构,确保退款流程中银行信息准确无误。 --- # 泰国退款银行列表 | Code | Bank Name | |-------------|---------------------------------------------| | TH\_ANZ | ANZ Bank (Thai) Public Company Limited | | TH\_BBL | Bangkok Bank Public Company Limited | | TH\_BAA | Bank for Agriculture and Agricultural | | TH\_BOA | Bank of America National Association | | TH\_BAY | Bank of Ayudhya Public Company Limited | | TH\_BOC | Bank of China (Thai) Public Company Limited | | TH\_BT | Bank of Thailand | | TH\_BNP | BNP Paribas Bank | | TH\_CIMB | CIMB Thai Bank Public Company Limited | | TH\_CITI | Citibank N.A. | | TH\_DEUTSCHE | Deutsche Bank Aktiengesellschaft | | TH\_GHB | Government Housing Bank | | TH\_GSB | Government Saving Bank | | TH\_HKS | Hong Kong & Shanghai Corporation Limited | | TH\_ICBC | ICBC Thai Commercial Bank | | TH\_IBT | Islamic Bank of Thailand | | TH\_JPM | JP Morgan Chase Bank | | TH\_KKB | Kasikornbank Public Company Limited | | TH\_KNB | Kiatnakin Bank Public Company Limited | | TH\_KTB | Krung Thai Bank Public Company Limited | | TH\_LHB | Land and Houses Bank Public Company Limited | | TH\_MICB | Mega International Commercial Bank PCL | | TH\_MIZUHO | Mizuho Corporate Bank Limited | | TH\_SCB | Siam Commercial Bank Public Company Limited | | TH\_SC | Standard Chartered Bank (Thai) Public | | TH\_SMBC | Sumitomo Mitsui Banking Corporation | | TH\_RBS | The Royal Bank of Scotland N.V. | | TH\_TTCR | The Thai Credit Retail Bank Public Company | | TH\_TISCO | Tisco Bank Public Company Limited | | TH\_TTB | TTB Bank | | TH\_UOB | United Overseas Bank (Thai) PCL | --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/checkout/api/close/index.md description: >- 申请关单接口用于商家主动关闭未完成的支付订单。适用于用户取消购买或超时未支付等场景,通过此API可以及时更新订单状态,减少资金冻结时间。主要参数包括订单号、关闭原因等,支持全球范围内的在线支付交易。 --- # 申请关单 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/checkout/api/getAccessToken/index.md description: >- 获取 sdkAccessToken 用于在 checkout 过程中验证商户身份。适用于需要集成支付功能的线上商店或应用,支持全球范围内的支付处理。主要功能包括生成临时访问令牌,关键参数有merchantId、apiKey等,确保安全可靠的支付体验。 --- # 获取 sdkAccessToken --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/checkout/api/getCapture/index.md description: >- 预授权确认查询接口用于获取支付预授权的确认状态。适用于需要验证预授权是否成功的场景,支持全球范围内的支付方式。调用时需注意应在同步返回后进行,以避免查询异常。请求响应采用JSON格式,包含关键参数如交易ID等,确保准确追踪每笔交易的状态。 --- # 预授权确认查询 ::: danger 注意 请在同步返回之后调用查询接口,否则可能会发生查询异常的情况 ::: --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/checkout/api/getOne/index.md description: >- 交易查询接口用于获取特定交易的详细信息。适用于需要对已完成或正在进行中的交易进行状态跟踪和管理的场景。主要功能包括通过交易ID获取交易详情,支持的关键参数有transaction_id。 --- # 交易查询 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/checkout/api/getRefund/index.md description: >- getRefund 接口用于查询已发起的退款请求状态。适用于需要确认退款是否成功的场景。调用前请确保退款同步返回完成,以避免查询异常。主要功能包括通过订单号或退款单号获取退款详情,关键参数有order_id和refund_id。 --- # 退款查询 ::: danger 注意 请在退款同步返回之后调用查询接口,否则可能会发生查询异常的情况 ::: --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/checkout/api/getVoid/index.md description: >- getVoid 接口用于查询预授权撤销状态。适用于完成预授权交易后需要确认撤销结果的场景,确保在同步返回之后调用以避免查询异常。主要功能包括验证撤销是否成功,并返回相关状态信息。 --- # 预授权撤销查询 ::: danger 注意 请在同步返回之后调用查询接口,否则可能会发生查询异常的情况 ::: --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/checkout/api/LogisticsUpload/index.md description: >- LogisticsUpload接口用于上传订单物流信息。适用于电商平台在用户完成支付后,商家需要更新订单物流状态的场景。支持的主要功能包括添加或更新物流详情,关键参数有订单ID、物流公司及物流单号等。 --- # LogisticsUpload --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/checkout/api/modifications/capture/index.md description: >- 预授权确认接口用于商家在获得顾客支付卡信息后,完成最终交易金额的扣款。适用于在线购物、酒店预订等需要先冻结资金再进行实际支付的场景。关键功能包括根据预授权ID执行扣款操作,支持调整扣款金额。主要参数有预授权ID、扣款金额及货币类型。 --- # 预授权权确认 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/checkout/api/modifications/close/index.md description: >- 关闭支付会话接口用于结束当前支付流程。适用于需要终止未完成支付操作的场景,如用户取消订单或支付超时。主要功能包括发送关闭请求、接收确认响应。关键参数有session_id和merchant_order_no。 --- # close --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/checkout/api/modifications/refund/index.md description: >- 申请退款接口用于处理用户支付后的退款请求。适用于需要执行退款操作的场景,支持即时或延迟退款。主要功能包括提交退款申请、查询退款状态等。关键参数有订单号、退款金额及退款原因等。 --- # 申请退款 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/checkout/api/modifications/void/index.md description: >- 预授权撤销接口用于取消已执行但未完成结算的预授权交易。适用于需要立即停止预授权扣款的情况,如订单取消或支付方式变更。主要功能包括撤销指定预授权、实时反馈撤销状态。关键参数包括预授权ID和商户订单号。 --- # VOID-预授权撤销 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/checkout/api/reserve/index.md description: >- 下单接口用于在Hosted模式下创建支付订单。适用于需要将支付流程托管给支付服务提供商的场景。关键特性包括通过merchantTransactionId唯一标识一笔交易,一旦创建,该ID对应的参数不可更改;若需修改参数,则必须使用新的merchantTransactionId重新发起请求。 --- # 下单接口 ::: danger 注意 同一笔支付订单(merchantTransactionId)修改入参发起新的支付请求,还是会取第一次请求传入的参数。如果需要变更入参,则需要修改 merchantTransactionId 重新发起支付请求。 ::: --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/checkout/api/uniformly/index.md description: >- Direct API(Non-Hosted模式)用于在checkout模块中实现下单并支付功能。适用于需要直接集成支付流程的场景,支持多种支付方式。使用时需注意,在非托管模式下进行卡支付必须接入风控组件以确保交易安全。主要参数包括订单信息和支付方式配置。 --- # 下单并支付 ::: danger 注意 Non-Hosted模式下卡支付必须接入风控组件 ::: --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/covers/americas/AR/index.md description: >- 阿根廷支付方式涵盖传统和数字方法,信用卡占35%交易量,现金仍占25%。电子商务市场增长迅速,数字钱包使用增加,分期付款因高通胀而受欢迎。商家需提供多种支付选项,包括主要信用卡、本地支付方式如Rapi pago及数字钱包,并考虑汇率风险管理。 --- # 覆盖地区 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/covers/americas/BR/index.md description: >- 覆盖巴西的支付方式。信用卡占总交易量30%,Boleto Bancário占25%。电子商务市场快速发展,移动支付和数字钱包使用增加。PIX自2020年推出后迅速普及。商家需提供多种支付选项,包括国际信用卡、本地支付方式如Boleto和PIX,以及分期付款。 --- # 覆盖地区 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/covers/americas/CA/index.md description: >- 介绍加拿大支付市场的特点,包括对卡支付的偏好及数字钱包的普及。借记卡和信用卡占总交易量70%,Klarna为常用数字钱包。移动支付增长迅速,现金在特定场景下仍重要。商家需支持国际与本地支付方式,并提供双语界面以适应市场需求。 --- # 覆盖地区 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/covers/americas/CL/index.md description: >- 覆盖智利市场的支付方式。信用卡和借记卡是最主要的支付手段,分别占总交易量的40%和25%,银行转账占比20%。数字钱包使用率上升,现金在某些小额交易中仍重要。商家应提供包括信用卡、借记卡、银行转账(如Servipag)及分期付款在内的多种支付选项,并优化在线银行支付体验以适应高银行账户普及率。 --- # 覆盖地区 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/covers/americas/CO/index.md description: >- 覆盖地区模块介绍了哥伦比亚的支付市场特点。该国现金支付仍占主导地位,但信用卡和数字钱包使用率不断增长。主要支付方式包括信用卡、PSE系统、现金支付网络(如Efecty)和分期付款选项。商家需提供多样化的支付选项以适应不同地区的消费者偏好。 --- # 覆盖地区 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/covers/americas/GT/index.md description: >- 危地马拉支付方式多样化,现金主导市场占50%,信用卡和借记卡分别占20%和15%,银行转账占10%。电子商务在城市地区和年轻人群中逐渐增长。VisaNet是重要的本地支付网络,数字钱包如Tigo Money使用增加但尚处于早期阶段。商家需提供多种支付选项,包括现金、主要银行卡、银行转账及新兴数字支付 --- # 覆盖地区 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/covers/americas/HN/index.md description: >- 洪都拉斯支付市场以现金为主,占总交易量的55%,信用卡和借记卡使用缓慢增长,各占15%。银行转账占10%。电子商务处于早期阶段,Tigo Money是重要的移动支付平台。商家需提供多种支付选项,包括现金、主要银行卡、银行转账及新兴数字支付方式。考虑到无银行账户消费者的需求,还需提供分期付款等灵活支付 --- # 覆盖地区 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/covers/americas/MX/index.md description: >- 覆盖墨西哥地区的支付方式。墨西哥市场以现金为主,但信用卡、借记卡及数字支付增长迅速。OXXO便利店支付为无银行账户消费者提供在线购物途径。商家需支持多种支付选项,包括主要银行卡、本地支付如OXXO和SPEI,以及分期付款。 --- # 覆盖地区 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/covers/americas/PE/index.md description: >- 秘鲁支付市场以现金为主导,但数字支付正在增长。主要支付方式包括现金(40%)、借记卡(20%)、信用卡(15%)和银行转账(15%)。PagoEfectivo是当地独特的支付解决方案,支持现金和网上银行支付,适合无银行账户或信用卡的消费者。商家需提供多样化的支付选项,如主流卡种、银行转账、数字钱包及 --- # 覆盖地区 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/covers/americas/SR/index.md description: >- 苏里南支付市场以现金为主,占55%交易量,借记卡和信用卡分别占20%和15%,银行转账占7%。电子商务正在发展,本地银行如DSB Bank和Hakrinbank起重要作用。移动支付和数字钱包使用增加但普及率低。商家需提供多种支付选项,包括现金、主要银行卡、银行转账及新兴数字支付方式,并考虑分期付款和 --- # 覆盖地区 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/covers/americas/SV/index.md description: >- 覆盖萨尔瓦多的支付市场,介绍该地区的支付方式和特点。现金仍为主要支付手段,占45%;信用卡、借记卡及数字钱包分别占20%、15%和15%,且数字钱包增长迅速。萨尔瓦多是首个将比特币作为法定货币的国家,Chivo钱包支持比特币和美元交易。商家需提供多种支付选项,包括现金、主流银行卡、数字钱包(如Chi --- # 覆盖地区 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/covers/americas/US/index.md description: >- 覆盖美国地区的支付方式偏好,信用卡是最受欢迎的支付手段,占总交易量的40%,数字钱包如PayPal和Apple Pay在电子商务领域增长迅速。借记卡仍为重要支付方式,尤其适用于日常小额交易。移动支付采用率持续上升,但现金在某些场景中依然重要。商家需提供多种支付选项以满足市场需求。 --- # 覆盖地区 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/covers/asiaPacific/HK/index.md description: >- 描述香港支付市场的覆盖情况。支持二维码支付(如AlipayHK、WeChat Pay HK)、电子钱包(八达通、PayMe等)、信用卡和借记卡以及现金支付。移动支付普及率高,市场以多样化、高安全性和技术创新为特点。 --- # 覆盖地区 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/covers/asiaPacific/ID/index.md description: >- 描述了印度尼西亚电子商务及移动支付的快速发展情况。该国拥有2.71亿年轻人口,数字经济特别是电商和数字钱包领域增长显著,60%的互联网用户通过智能手机上网,Dana、Paypal和DOKU等移动钱包普及迅速。尽管目前仅50%的人口在线且银行卡普及率低于20%,但其发展潜力巨大。 --- # 覆盖地区 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/covers/asiaPacific/IN/index.md description: >- 覆盖地区文档介绍了印度互联网和电子商务市场的快速增长及其支付特点。印度拥有3.9亿互联网用户,其中1.6亿在线购物,市场潜力巨大。尽管数字化转型面临城乡差异和性别上网比例不均等挑战,但支付方式多样化:银行卡普及,超过9亿张借记卡和信用卡;本地和国际支付体系并存,包括RuPay;新兴支付方式如网上银行 --- # 覆盖地区 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/covers/asiaPacific/JP/index.md description: >- 覆盖地区文档介绍了日本独特的支付市场,尽管是世界第三大经济体,但现金支付占比高达82%。便利店支付(Konbini)占总购买量的10%,成为第二大常用支付方式。由于日本跨境购物率低,本地化策略对于进入该市场至关重要。 --- # 覆盖地区 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/covers/asiaPacific/MY/index.md description: >- 覆盖地区文档介绍了马来西亚支付市场的特点。该国拥有3200万人口,文化多样,经济稳定增长。70%的居民支持无现金社会转型,40%的人口使用数字钱包,政府提供财务激励推动普惠金融。在线银行占主要支付服务商Adyen市场交易量的50%,显示消费者对在线金融服务的高度信任。 --- # 覆盖地区 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/covers/asiaPacific/PH/index.md description: >- 覆盖菲律宾的电子商务和支付市场特点。该地区是东南亚增长最快的电子商务市场之一,年增长率达25%,主要由高度互联网使用率和移动设备普及推动。尽管信用卡普及率较低,但数字钱包如GCash迅速发展,用户已达3000万。 --- # 覆盖地区 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/covers/asiaPacific/SG/index.md description: >- 介绍新加坡支付市场的特点,包括其作为全球金融枢纽、蓬勃发展的电子商务、高度移动化以及多样化的支付方式。新加坡是世界最大金融中心之一,拥有极其友好的商业环境和广泛的国际联系,55%的交易为跨境交易,智能手机普及率约90%,银行卡是最受欢迎的支付方式,流通量达770万张。 --- # 覆盖地区 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/covers/asiaPacific/southKorea/index.md description: >- 韩国作为全球领先的电子商务市场之一,其零售电商交易额预计将持续增长。该地区信用卡使用率极高,平均每人的持卡量为6.7张,占所有支付方式的70%,包括本地发行的单一品牌卡及与国际支付体系合作的双品牌卡。此外,网上银行和电子钱包如KakaoPay在电商中也十分流行。 --- # 覆盖地区 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/covers/asiaPacific/TH/index.md description: >- 介绍泰国支付市场的数字化转型特点。数字支付快速增长,政府推动电子支付系统,移动支付和电子钱包如TrueMoney、Rabbit LINE Pay和AirPay使用率提升。二维码支付普及,PromptPay标准促进小额支付数字化。主要银行推出移动银行应用,提供转账、支付和投资等全面的数字金融服务。 --- # 覆盖地区 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/covers/asiaPacific/VN/index.md description: >- 越南支付市场高速增长,年轻人口推动新技术采用。现金与数字支付并存,本土企业主导市场,政府支持无现金化政策。市场竞争激烈,农村地区金融服务覆盖率低,发展潜力大。 --- # 覆盖地区 --- --- url: 'https://acquirer-api-docs-v4.pingpongx.com/notes/zh/covers/europe/AT/index.md' description: >- 文档描述奥地利支付市场的特点,涵盖传统与创新支付方式。现金和借记卡依然广泛使用,但数字支付、非接触式支付及移动支付增长迅速。本地EPS和国际支付平台受欢迎,在线支付多样化且跨境电商需求增加。监管环境符合PSD2,注重安全和数据保护。金融科技公司数量增加,传统银行也积极转型。 --- # 覆盖地区 --- --- url: 'https://acquirer-api-docs-v4.pingpongx.com/notes/zh/covers/europe/BE/index.md' description: >- 覆盖比利时的支付市场特点,包括广泛使用的银行卡、Bancontact系统主导本地支付、移动支付和数字钱包使用率上升、无接触支付普及、在线支付多样化及国际支付平台广泛使用。Payconiq等移动支付解决方案受欢迎,银行间转账系统高效便捷。符合欧盟PSD2监管,注重支付安全与消费者保护。现金使用减少,金 --- # 覆盖地区 --- --- url: 'https://acquirer-api-docs-v4.pingpongx.com/notes/zh/covers/europe/BG/index.md' description: >- 覆盖地区文档介绍了保加利亚支付市场的特点,包括数字支付快速增长、现金使用仍普遍、电子商务发展多样化、创新支付技术如无接触支付和移动支付的引入。本地支付偏好银行转账,监管环境符合欧盟PSD2标准,政府推动数字化支付以提高金融包容性,金融科技加速创新。 --- # 覆盖地区 --- --- url: 'https://acquirer-api-docs-v4.pingpongx.com/notes/zh/covers/europe/CH/index.md' description: >- 描述了瑞士支付市场的特点,包括高度发达的金融体系、多样化的支付方式及数字支付的增长趋势。移动支付和数字钱包使用率上升,无接触支付普及,电子商务发展迅速且跨境支付需求旺盛。尽管现金使用仍重要,但国际支付平台如Apple Pay等也广泛使用。监管环境严格,注重支付安全,与欧盟支付规则保持一致。 --- # 覆盖地区 --- --- url: 'https://acquirer-api-docs-v4.pingpongx.com/notes/zh/covers/europe/CY/index.md' description: >- 覆盖地区模块介绍了塞浦路斯的支付市场特点,包括数字支付增长、现金使用情况、电子商务发展及创新支付技术的应用。银行卡特别是借记卡使用率上升,移动支付和数字钱包逐渐普及。尽管现金使用仍普遍,但在线支付解决方案多样化,国际支付平台使用增加。Contactless支付在零售业广泛采用,移动支付如Apple --- # 覆盖地区 --- --- url: 'https://acquirer-api-docs-v4.pingpongx.com/notes/zh/covers/europe/CZ/index.md' description: >- 覆盖捷克共和国的支付市场特点,包括数字支付增长、现金使用减少、电子商务发展、创新支付技术和监管环境。详细介绍了银行卡和移动支付的普及、在线支付解决方案多样化、无接触支付的应用以及符合欧盟PSD2指令的监管要求。 --- # 覆盖地区 --- --- url: 'https://acquirer-api-docs-v4.pingpongx.com/notes/zh/covers/europe/DE/index.md' description: >- 描述德国支付市场的特点,包括多样化的支付生态系统、强大的银行基础设施、数字支付快速增长及电子商务的蓬勃发展。特别强调了SEPA标准促进的跨境支付、严格的监管环境以及创新支付技术如生物识别和区块链的应用。 --- # 覆盖地区 --- --- url: 'https://acquirer-api-docs-v4.pingpongx.com/notes/zh/covers/europe/DK/index.md' description: >- 丹麦的支付市场高度数字化,接近无现金社会,数字支付占主导。网上银行和移动银行使用率高,电子发票和自动支付广泛应用。Contactless支付在零售领域普及,生物识别支付等新技术逐步引入。在线支付解决方案多样化,跨境电商支付需求增长。监管环境符合欧盟支付服务指令(PSD2),政府积极推动数字化支付。国 --- # 覆盖地区 --- --- url: 'https://acquirer-api-docs-v4.pingpongx.com/notes/zh/covers/europe/EE/index.md' description: >- 爱沙尼亚支付市场高度数字化,移动支付和数字钱包使用广泛,e-ID系统提供安全基础。电子商务发展迅速,跨境支付需求旺盛,金融科技公司活跃,区块链技术应用探索中。符合欧盟PSD2指令,政府支持创新。该国接近无现金社会,多数交易通过数字方式完成。 --- # 覆盖地区 --- --- url: 'https://acquirer-api-docs-v4.pingpongx.com/notes/zh/covers/europe/ES/index.md' description: >- 西班牙支付市场以数字支付快速增长为特点,银行卡尤其是借记卡使用广泛,移动支付和数字钱包普及率上升。现金使用频率下降,小额支付转向数字方式。电子商务发展迅速,在线支付方式多样化,国际支付平台广泛应用。银行业积极推动数字化转型,网上银行和移动银行服务普及。监管环境符合欧盟PSD2指令,注重支付安全和消费 --- # 覆盖地区 --- --- url: 'https://acquirer-api-docs-v4.pingpongx.com/notes/zh/covers/europe/FI/index.md' description: >- 覆盖地区模块描述芬兰的支付市场特点,包括高度数字化、低现金使用率和高移动支付普及率。借记卡是主要支付方式,无接触支付普遍。电子商务多样化且跨境支付需求增长。PSD2推动开放银行生态,金融科技与传统银行合作紧密。监管环境严格,注重支付安全和数据保护。国际支付平台如Apple Pay普及,本地解决方案在 --- # 覆盖地区 --- --- url: 'https://acquirer-api-docs-v4.pingpongx.com/notes/zh/covers/europe/FR/index.md' description: >- 覆盖地区文档介绍了法国支付市场的特点,包括广泛使用的银行卡(如Carte Bancaire)、快速增长的移动支付和数字钱包、强大的银行业基础以及多样化的在线支付解决方案。法国符合欧盟PSD2指令,注重支付安全和消费者保护,金融科技公司快速发展,现金使用逐年减少。 --- # 覆盖地区 --- --- url: 'https://acquirer-api-docs-v4.pingpongx.com/notes/zh/covers/europe/GB/index.md' description: >- 英国支付市场高度数字化,非现金支付占主导,移动支付和数字钱包普及。信用卡、借记卡及银行转账广泛使用,金融科技公司和数字银行蓬勃发展。电子商务生态完善,在线支付解决方案丰富,跨境电商支付需求大。金融行为监管局(FCA)严格监管,确保支付安全与消费者保护。 --- # 覆盖地区 --- --- url: 'https://acquirer-api-docs-v4.pingpongx.com/notes/zh/covers/europe/GR/index.md' description: >- 描述了希腊支付市场的特点,包括快速增长的数字支付、银行卡使用率上升、移动支付和数字钱包普及、现金使用仍普遍但逐渐减少。电子商务发展迅速,国际支付平台使用增加,非接触式支付和移动支付应用如Viva Wallet受欢迎。符合欧盟PSD2监管,政府支持数字支付以提高税收透明度,金融科技加速创新,传统银行加 --- # 覆盖地区 --- --- url: 'https://acquirer-api-docs-v4.pingpongx.com/notes/zh/covers/europe/HR/index.md' description: >- 克罗地亚支付市场特点包括银行卡使用率上升、移动支付和数字钱包普及、2023年加入欧元区促进支付系统现代化及与其他欧元区国家的支付整合加速。现金使用减少,电子商务发展带动在线支付解决方案多样化和国际支付平台使用增加。创新支付技术如无接触支付在零售领域普及,移动支付应用逐步引入。监管环境符合欧盟PSD2 --- # 覆盖地区 --- --- url: 'https://acquirer-api-docs-v4.pingpongx.com/notes/zh/covers/europe/HU/index.md' description: >- 匈牙利支付市场特点包括银行卡使用率上升、移动支付和数字钱包普及增加,现金使用减少。政府推动非现金支付,即时支付系统(AFR)和本地移动支付解决方案如Satispay受欢迎。电子商务发展迅速,在线支付方式多样化,国际支付平台使用增加。Contactless支付在零售领域普及,二维码支付等新兴支付方式逐 --- # 覆盖地区 --- --- url: 'https://acquirer-api-docs-v4.pingpongx.com/notes/zh/covers/europe/IE/index.md' description: >- 覆盖地区文档详细描述了爱尔兰的支付市场特点。该市场以快速增长的数字支付为特征,包括广泛使用的银行卡、移动支付及数字钱包;现金使用减少,小额支付转向数字方式;非接触式支付和创新移动支付应用如Revolut受欢迎;电子商务在线支付方式多样化,国际支付平台广泛使用;PSD2推动金融创新,金融科技公司与传统 --- # 覆盖地区 --- --- url: 'https://acquirer-api-docs-v4.pingpongx.com/notes/zh/covers/europe/IT/index.md' description: >- 介绍意大利支付市场的特点,包括现金使用普遍但数字支付快速增长、借记卡和信用卡普及、无接触支付日益流行、移动支付和电子商务发展迅速。本地支付创新如PagoPA系统简化公共服务支付,符合欧盟PSD2监管要求,金融科技加速发展,传统银行加大数字化转型力度。 --- # 覆盖地区 --- --- url: 'https://acquirer-api-docs-v4.pingpongx.com/notes/zh/covers/europe/LT/index.md' description: >- 立陶宛支付市场特点包括:银行卡使用率高,移动支付和数字钱包普及迅速;作为欧洲金融科技中心之一,创新支付公司众多;现金使用减少,数字支付主导日常交易;电子商务发展带动在线支付多样化;非接触式支付和即时支付系统广泛应用;符合欧盟PSD2监管要求,金融创新环境良好;跨境支付需求旺盛,与欧盟国家支付整合度高 --- # 覆盖地区 --- --- url: 'https://acquirer-api-docs-v4.pingpongx.com/notes/zh/covers/europe/LU/index.md' description: >- 描述了卢森堡支付市场的特点,包括高度发达的金融体系、数字支付普及、跨境支付需求旺盛以及创新支付技术的应用。该地区支持多种货币的支付解决方案,电子商务发展迅速,监管环境符合欧盟PSD2标准,注重支付安全和消费者保护。 --- # 覆盖地区 --- --- url: 'https://acquirer-api-docs-v4.pingpongx.com/notes/zh/covers/europe/LV/index.md' description: >- 覆盖地区文档描述了拉脱维亚的支付市场特点,包括银行卡使用率上升、移动支付和数字钱包普及增加、现金使用减少等趋势。电子商务发展迅速,国际支付平台使用增加,无接触支付和本地移动支付解决方案如Satispay逐渐流行。该地区符合欧盟支付服务指令(PSD2),注重支付安全与消费者保护,金融科技特别是移动支付 --- # 覆盖地区 --- --- url: 'https://acquirer-api-docs-v4.pingpongx.com/notes/zh/covers/europe/MT/index.md' description: >- 马耳他的支付市场正经历数字支付增长,银行卡和移动支付普及率上升。作为地中海地区的金融科技中心,吸引了众多支付和区块链公司。尽管现金仍被广泛接受,但使用频率下降,小额支付转向数字方式。在线支付解决方案多样化,国际支付平台使用增加。Contactless支付在零售领域普及,移动支付应用如Apple Pa --- # 覆盖地区 --- --- url: 'https://acquirer-api-docs-v4.pingpongx.com/notes/zh/covers/europe/NL/index.md' description: >- 描述荷兰支付市场的特点,包括高度数字化、本地支付方式如iDEAL和借记卡的普及、创新支付技术如无接触支付和Tikkie应用、开放银行生态、电子商务发展以及现金使用减少。荷兰拥有高效的银行间清算系统和高支付安全标准。 --- # 覆盖地区 --- --- url: 'https://acquirer-api-docs-v4.pingpongx.com/notes/zh/covers/europe/NO/index.md' description: >- 挪威的支付市场以数字支付为主,现金使用极少。移动支付和数字钱包普及,电子银行发达,网上银行和移动银行使用率高,自动支付广泛应用。Contactless支付普遍,生物识别支付等新技术逐步引入。在线支付方式多样化,跨境电商支付需求增长。尽管非欧盟成员,挪威支付规则与欧盟保持一致,注重支付安全和消费者保护 --- # 覆盖地区 --- --- url: 'https://acquirer-api-docs-v4.pingpongx.com/notes/zh/covers/europe/PL/index.md' description: >- 波兰支付市场快速数字化,现金使用减少,数字支付和移动支付增长迅速。BLIK支付系统广泛使用,银行间转账高效便捷。借记卡和非接触式支付普及,电子商务多样化,在线支付平台如Przelewy24受欢迎。金融科技初创公司增加,传统银行加速数字化转型。符合欧盟PSD2监管,政府推动非现金支付。国际化趋势明显, --- # 覆盖地区 --- --- url: 'https://acquirer-api-docs-v4.pingpongx.com/notes/zh/covers/europe/PT/index.md' description: >- 葡萄牙支付市场正经历数字支付快速增长,银行卡特别是借记卡使用率上升,移动支付和数字钱包普及。Multibanco系统和MB WAY应用在本地支付中占据主导地位。尽管现金仍被广泛接受,但小额支付逐渐转向数字方式。在线支付解决方案多样化,国际支付平台使用增加。非接触式支付和二维码支付等新兴技术逐步引入。 --- # 覆盖地区 --- --- url: 'https://acquirer-api-docs-v4.pingpongx.com/notes/zh/covers/europe/RO/index.md' description: >- 覆盖罗马尼亚支付市场,介绍该地区的支付特点。数字支付快速增长,银行卡使用率上升,移动支付和数字钱包普及;现金使用仍普遍但逐渐减少。电子商务发展迅速,在线支付方式多样化,国际支付平台使用增加。创新支付技术如无接触支付和移动支付应用逐步引入。本地支付偏好包括银行转账和RoPayments。监管环境符合欧 --- # 覆盖地区 --- --- url: 'https://acquirer-api-docs-v4.pingpongx.com/notes/zh/covers/europe/SE/index.md' description: >- 瑞典支付市场接近无现金社会,数字支付占主导,许多商户不再接受现金。创新支付技术如生物识别和Contactless支付普及,开放银行生态活跃,传统银行积极数字化转型。电子商务发展迅速,在线支付解决方案多样化,跨境电商支付需求增长。监管环境符合欧盟PSD2指令,注重支付安全和消费者保护。国际化趋势明显, --- # 覆盖地区 --- --- url: 'https://acquirer-api-docs-v4.pingpongx.com/notes/zh/covers/europe/SI/index.md' description: >- 介绍斯洛文尼亚的支付市场特点,包括高银行卡使用率、移动支付和数字钱包的普及、减少的现金使用、多样化的在线支付解决方案及国际支付平台使用增加。特别强调了非接触式支付和移动支付应用如Google Pay和Apple Pay的普及趋势,以及符合欧盟PSD2法规的监管环境,金融科技加速创新,传统银行向数字化 --- # 覆盖地区 --- --- url: 'https://acquirer-api-docs-v4.pingpongx.com/notes/zh/covers/europe/SK/index.md' description: >- 斯洛伐克支付市场特点包括:银行卡使用率上升,移动支付和数字钱包普及增加,现金使用减少,电子商务发展迅速,无接触支付和移动支付应用如Google Pay、Apple Pay逐渐普及。银行转账在在线支付中占重要地位,本地支付方式如TatraPay受欢迎。监管环境符合欧盟PSD2标准,注重支付安全与消费者 --- # 覆盖地区 --- --- url: 'https://acquirer-api-docs-v4.pingpongx.com/notes/zh/covers/Global/index.md' description: 覆盖地区模块介绍PingPongCheckout支持的全球支付方式,帮助企业通过单一集成接受来自世界各地的电子钱包和信用卡支付,扩大国际业务范围。 --- # 覆盖地区 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/dispute/apis/acceptDispute/index.md description: >- 放弃申诉 API 用于商家决定不再对特定争议进行进一步抗辩。适用于当商家评估后认为继续申诉无益的情况。通过此接口,可以终止争议处理流程。关键参数包括争议 ID 和商家账户信息。 --- # 放弃申诉 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/dispute/apis/chargeback/index.md description: >- 查询拒付记录API用于获取指定条件下的拒付信息。支持通过商户编号、时间范围、拒付类型及状态等参数进行筛选,返回结果包括拒付的详细状态和处理情况。适用于需要监控和管理拒付流程的商户。关键参数有accId、startDate、endDate、chargebackType和chargebackStatus --- # 查询拒付记录 拒付是交易的撤销,通常是由持卡人(持卡人)对他们信用卡的交易产生争议时发起。 ## 拒付类型 |chargebackType|desc| |:-------|:------| |retrieval|调单| |1st\_chargeback|一拒| |chargeback\_reversal|拒付撤销| |pre\_arbitration|预仲裁| |arbitration|仲裁| ## 拒付状态 1 为初始态;3、4、5 为中间态;6、7、8、9 为终态 | 序号 | chargebackStatus | desc | 状态描述 | |:----|:-----------------|:----------------------------|:-----| | 1 | PENDING | 商户还未处理拒付/调单 | 初始态 | | 3 | PROCESSED | 商户已提交材料 | 中间态 | | 4 | EXPIRED | 商户逾期未处理 | 中间态 | | 5 | ACCEPTED | 商户点击放弃申诉按钮或因 未对调单申诉而后续产生的拒付 | 中间态 | | 6 | REVOKED | 收单渠道拒付文件,拒付撤销 | 初始态 | | 7 | WON | 收到渠道文件,申诉成功 | 终态 | | 8 | LOST | 收到渠道文件,申诉失败 | 终态 | | 9 | REFUNDED | 商户在拒付/调单录入时已全额退款 | 终态 | ## 请求地址 ```text https://{host}/v2/chargeback ``` ## 请求参数 | 参数字段 | 参数类型 | 参数属性 | 参数说明 | |:-----------------|:------------|:-----|:------------------------------------| | accId | String(64) | M | PingPong 商户店铺编号 | | queryType | String(64) | M | NEW/UPDATE【新增/修改】 | | startDate | String(64) | C | 拒付生成时间/更新时间纬度,查询开始时间, 格式 yyyy-mm-dd | | endDate | String(64) | C | 拒付生成时间/更新时间纬度,查询截止时间, 格式 yyyy-mm-dd | | chargebackType | String(64) | O | 拒付类型 详见拒付类型表 | | chargebackStatus | String(64) | O | 拒付状态 详见拒付状态表,默认为查询所有类型 | | page | Integer | O | 分⻚⻚码,默认 1 | | pagesize | Integer | O | 单⻚记录条数,默认 100,最大支持 1000 | | signType | String(32) | M | 签名类型,支持 MD5、SHA256,具体⻅本文"签名规约"一栏 | | sign | String(256) | M | 签名内容,具体⻅本文"签名规约"一栏 | | version | String(64) | M | 当前固定为1.0,后续随接口变动可能有调整 | ## 响应参数 | 参数字段 | 参数属性 | 参数说明 | |:----------|:-----|:------------------| | clientId | M | PingPong 商户商户号 | | totalSize | M | 总记录数 | | data | M | \[data]以下为单笔明细(多组) | ### data\[i] : |参数字段| 参数说明| |:-----|:------| |accId |PingPong |商户店铺编号| |chargebackId| PingPong |拒付 ID,随拒付类型变更而变更| |chargebackType|拒付类型,枚举值,详见拒付类型表| |chargebackStatus |拒付状态,枚举值,详见拒付状态表| |chargebackAmount |拒付金额| |chargebackCurrency |拒付币种| |reasonType |拒付分类,枚举值| |reasonCode |拒付原因| |reasonDescription| 拒付原因对应描述| |createDate |拒付创建时间| |updateDate |拒付更新时间| |appealDate |最晚处理时间| |cardNo |卡号,掩码,只展示前 6 后 4| |cardScheme |卡组织| |cardholderName |持卡人姓名| |transactionTime| 原始交易时间| |transactionId |原始交易 PingPongCheckout 流水号| |merchantTransactionId |原始交易商户网站流水号| |amount |原始交易金额| |currency| 原始交易币种| |registerUserEmail |持卡人邮箱| |shippingphoneNo |收货人联系电话| |shippingLastName |收货人姓| |shippingFirstName |收货人名| |storeUrl |店铺地址| |goodsName| 商品名称| --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/dispute/apis/chargebackTrace/index.md description: >- 查询拒付操作记录API用于获取特定交易的拒付处理历史。通过提供PingPong商户店铺编号、交易订单号等必填参数,可查询到包括拒付类型、状态及其变更时间等详细信息。支持MD5或SHA256签名方式以确保数据安全。 --- # 查询拒付操作记录 ## 请求地址 ::: code-tabs @tab 🧪 沙箱环境 ```http https://sandbox-acquirer-payment.pingpongx.com/v2/chargeback/trace ``` @tab 🏭 生产环境 ```http https://acquirer-payment.pingpongx.com/v2/chargeback/trace ``` ::: ## 请求参数 | 参数字段 | 参数类型 | 参数属性 | 参数说明 | |:--------------|:------------|:-----|:--------------------------------------------------------------------------------------------| | accId | String(64) | M | PingPong 商户店铺编号 | | transactionId | String(64) | M | PingPong 商户店铺编号 | | signType | String(32) | M | 签名规约,支持 MD5、SHA256,具体⻅本文签名规约一栏 | | sign | String(128) | M | 签名,具体⻅本文签名规约一栏,所有参数均参与签名 | | version | String(10) | M | 当前固定为1.0,后续随接口变动可能有调整 | ## 响应参数 以下为data\[i]单笔明细(多组) |参数字段| 参数说明| |:-----|:------| |transactionId |PingPong 原始交易订单号| |id |拒付状态变更流水 ID| |chargebackId| PingPong 拒付 ID,跟随拒付类型变更而变更| |chargebackType|拒付类型 详见拒付类型表| |chargebackStatus|拒付状态 详见拒付状态表,默认为查询所有类型| |createDate |拒付状态时间 YYYY-MM-DD hhmmss| |updateDate |拒付状态更新时间 YYYY-MM-DD hhmmss| |creator |流水记录创建者| ## 拒付类型 |chargebackType|desc| |:-------|:------| |retrieval|调单| |1st\_chargeback|一拒| |chargeback\_reversal|拒付撤销| |pre\_arbitration|预仲裁| |arbitration|仲裁| ## 拒付状态 1 为初始态;3、4、5 为中间态;6、7、8、9 为终态 | 序号 | chargebackStatus | desc | 状态描述 | |:----|:-----------------|:----------------------------|:-----| | 1 | PENDING | 商户还未处理拒付/调单 | 初始态 | | 3 | PROCESSED | 商户已提交材料 | 中间态 | | 4 | EXPIRED | 商户逾期未处理 | 中间态 | | 5 | ACCEPTED | 商户点击放弃申诉按钮或因 未对调单申诉而后续产生的拒付 | 中间态 | | 6 | REVOKED | 收单渠道拒付文件,拒付撤销 | 初始态 | | 7 | WON | 收到渠道文件,申诉成功 | 终态 | | 8 | LOST | 收到渠道文件,申诉失败 | 终态 | | 9 | REFUNDED | 商户在拒付/调单录入时已全额退款 | 终态 | --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/dispute/apis/defendDispute/index.md description: >- 提交材料并进行抗辩API允许商家针对拒付请求提供证据和支持文件。适用于当客户发起拒付时,商家需要通过上传相关证明材料来为自己辩护的情况。主要功能包括提交电子文档、备注信息等关键参数以完成抗辩流程。 --- # 提交材料并进行抗辩 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/dispute/apis/deleteDefenseDocument/index.md description: >- 此API用于从系统中删除特定拒付案件的上传材料。适用于商家或支付处理方需要更新或移除不再相关的争议文件时使用。通过指定dispute_id和document_id作为关键参数,可以精准定位并执行删除操作。 --- # 删除拒付材料 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/dispute/apis/disputeUploadFile/index.md description: >- 上传文件API用于提交与争议相关的证据材料。适用于需要向支付平台提供额外信息以支持或反驳争议的情况,如交易截图、发货凭证等。主要功能包括通过HTTP POST方法上传文件,关键参数有file(文件内容)、dispute_id(争议编号)及file_type(文件类型)。 --- # 上传文件 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/dispute/apis/getDefenseReasons/index.md description: >- 查询拒付抗辩材料API用于获取特定拒付案件的抗辩理由及所需材料。适用于商家在面对客户发起的拒付请求时,准备相关证据进行抗辩。主要功能包括根据案件ID查询详细信息,关键参数有dispute_id。 --- # 查询拒付抗辩材料 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/dispute/apis/getDisputeInfo/index.md description: 主动获取拒付明细API允许商家查询具体的拒付信息。适用于需要详细了解某一拒付案件详情的场景,支持通过案件ID获取包括拒付原因、状态及处理建议等关键数据。 --- # 主动获取拒付明细 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/dispute/apis/getRetrievalDispute/index.md description: >- 主动获取调单明细API允许商户或支付服务提供商查询特定拒付案件的详细信息。适用于需要详细了解拒付原因、状态及处理进度的情况。通过指定案件ID作为关键参数,用户能够获得包括但不限于拒付金额、发起方、当前状态等在内的全面数据。 --- # 主动获取调单明细 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/dispute/apis/supplyDefenseDocument/index.md description: >- 上传拒付材料API用于提交与争议相关的证据文件,帮助商家在发生拒付时进行有效辩护。适用于处理信用卡或借记卡交易中的拒付情况。主要功能包括添加文档、查看状态及获取结果;关键参数有dispute_id(争议编号)、file(文件)等。 --- # 上传拒付材料 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/dispute/v4-apis/acceptDispute/index.md description: >- 放弃申诉 API 用于商家决定不再对特定拒付进行争议处理。适用于当商家评估后认为继续争议无益或希望快速解决拒付情况时使用。通过此 API,可以终止当前的争议流程,需提供交易标识符作为关键参数。 --- # 放弃申诉 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/dispute/v4-apis/chargeback/index.md description: >- 查询拒付记录API用于获取特定时间段内的拒付信息。支持按拒付类型和状态筛选,涵盖从调单到仲裁的多种拒付类型及不同处理阶段的状态。关键参数包括商户编号、查询类型、时间范围等,返回结果中包含详细的拒付记录信息。 --- # 查询拒付记录 拒付是交易的撤销,通常是由持卡人(持卡人)对他们信用卡的交易产生争议时发起。 ## 拒付类型 |chargebackType|desc| |:-------|:------| |retrieval|调单| |1st\_chargeback|一拒| |chargeback\_reversal|拒付撤销| |pre\_arbitration|预仲裁| |arbitration|仲裁| ## 拒付状态 1 为初始态;3、4、5 为中间态;6、7、8、9 为终态 | 序号 | chargebackStatus | desc | 状态描述 | |:----|:-----------------|:----------------------------|:-----| | 1 | PENDING | 商户还未处理拒付/调单 | 初始态 | | 3 | PROCESSED | 商户已提交材料 | 中间态 | | 4 | EXPIRED | 商户逾期未处理 | 中间态 | | 5 | ACCEPTED | 商户点击放弃申诉按钮或因 未对调单申诉而后续产生的拒付 | 中间态 | | 6 | REVOKED | 收单渠道拒付文件,拒付撤销 | 初始态 | | 7 | WON | 收到渠道文件,申诉成功 | 终态 | | 8 | LOST | 收到渠道文件,申诉失败 | 终态 | | 9 | REFUNDED | 商户在拒付/调单录入时已全额退款 | 终态 | ## 请求地址 ```text https://{host}/v2/chargeback ``` ## 请求参数 | 参数字段 | 参数类型 | 参数属性 | 参数说明 | |:-----------------|:------------|:-----|:------------------------------------| | accId | String(64) | M | PingPong 商户店铺编号 | | queryType | String(64) | M | NEW/UPDATE【新增/修改】 | | startDate | String(64) | C | 拒付生成时间/更新时间纬度,查询开始时间, 格式 yyyy-mm-dd | | endDate | String(64) | C | 拒付生成时间/更新时间纬度,查询截止时间, 格式 yyyy-mm-dd | | chargebackType | String(64) | O | 拒付类型 详见拒付类型表 | | chargebackStatus | String(64) | O | 拒付状态 详见拒付状态表,默认为查询所有类型 | | page | Integer | O | 分⻚⻚码,默认 1 | | pagesize | Integer | O | 单⻚记录条数,默认 100,最大支持 1000 | | signType | String(32) | M | 签名类型,支持 MD5、SHA256,具体⻅本文"签名规约"一栏 | | sign | String(256) | M | 签名内容,具体⻅本文"签名规约"一栏 | | version | String(64) | M | 当前固定为1.0,后续随接口变动可能有调整 | ## 响应参数 | 参数字段 | 参数属性 | 参数说明 | |:----------|:-----|:------------------| | clientId | M | PingPong 商户商户号 | | totalSize | M | 总记录数 | | data | M | \[data]以下为单笔明细(多组) | ### data\[i] : |参数字段| 参数说明| |:-----|:------| |accId |PingPong |商户店铺编号| |chargebackId| PingPong |拒付 ID,随拒付类型变更而变更| |chargebackType|拒付类型,枚举值,详见拒付类型表| |chargebackStatus |拒付状态,枚举值,详见拒付状态表| |chargebackAmount |拒付金额| |chargebackCurrency |拒付币种| |reasonType |拒付分类,枚举值| |reasonCode |拒付原因| |reasonDescription| 拒付原因对应描述| |createDate |拒付创建时间| |updateDate |拒付更新时间| |appealDate |最晚处理时间| |cardNo |卡号,掩码,只展示前 6 后 4| |cardScheme |卡组织| |cardholderName |持卡人姓名| |transactionTime| 原始交易时间| |transactionId |原始交易 PingPongCheckout 流水号| |merchantTransactionId |原始交易商户网站流水号| |amount |原始交易金额| |currency| 原始交易币种| |registerUserEmail |持卡人邮箱| |shippingphoneNo |收货人联系电话| |shippingLastName |收货人姓| |shippingFirstName |收货人名| |storeUrl |店铺地址| |goodsName| 商品名称| --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/dispute/v4-apis/chargebackTrace/index.md description: >- 查询拒付操作记录API用于获取指定交易的拒付处理历史。通过传递商户店铺编号、交易订单号等必填参数,可获得包括拒付状态变更流水ID、拒付类型及状态等详细信息。支持MD5或SHA256签名方式确保数据安全。 --- # 查询拒付操作记录 ## 请求地址 ```bash https://sandbox-acquirer-payment.pingpongx.com/v2/chargeback/trace ``` ```bash https://acquirer-payment.pingpongx.com/v2/chargeback/trace ``` ## 请求参数 | 参数字段 | 参数类型 | 参数属性 | 参数说明| |:--------------|:-------------|:-----|:------| | accId | String(64) | M | PingPong 商户店铺编号| | transactionId | String(64)| M |PingPong 商户店铺编号| | signType | String(32) | M | 签名规约,支持 MD5、SHA256,具体⻅本文签名规约一栏 | | sign | String(128) | M | 签名,具体⻅本文签名规约一栏,所有参数均参与签名 | | version | String(10) | M | 当前固定为1.0,后续随接口变动可能有调整 | ## 响应参数 以下为data\[i]单笔明细(多组) |参数字段| 参数说明| |:-----|:------| |transactionId |PingPong 原始交易订单号| |id |拒付状态变更流水 ID| |chargebackId| PingPong 拒付 ID,跟随拒付类型变更而变更| |chargebackType|拒付类型 详见拒付类型表| |chargebackStatus|拒付状态 详见拒付状态表,默认为查询所有类型| |createDate |拒付状态时间 YYYY-MM-DD hhmmss| |updateDate |拒付状态更新时间 YYYY-MM-DD hhmmss| |creator |流水记录创建者| ## 拒付类型 |chargebackType|desc| |:-------|:------| |retrieval|调单| |1st\_chargeback|一拒| |chargeback\_reversal|拒付撤销| |pre\_arbitration|预仲裁| |arbitration|仲裁| ## 拒付状态 1 为初始态;3、4、5 为中间态;6、7、8、9 为终态 | 序号 | chargebackStatus | desc | 状态描述 | |:----|:-----------------|:----------------------------|:-----| | 1 | PENDING | 商户还未处理拒付/调单 | 初始态 | | 3 | PROCESSED | 商户已提交材料 | 中间态 | | 4 | EXPIRED | 商户逾期未处理 | 中间态 | | 5 | ACCEPTED | 商户点击放弃申诉按钮或因 未对调单申诉而后续产生的拒付 | 中间态 | | 6 | REVOKED | 收单渠道拒付文件,拒付撤销 | 初始态 | | 7 | WON | 收到渠道文件,申诉成功 | 终态 | | 8 | LOST | 收到渠道文件,申诉失败 | 终态 | | 9 | REFUNDED | 商户在拒付/调单录入时已全额退款 | 终态 | --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/dispute/v4-apis/defendDispute/index.md description: >- 提交材料并进行抗辩API允许商家针对拒付提出异议。适用于收到客户通过银行发起的拒付时,商家需提供证据支持其交易合法性的情况。关键功能包括上传证明文件、填写争议理由等。主要参数有disputeId, evidenceType和evidenceContent。 --- # 提交材料并进行抗辩 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/dispute/v4-apis/deleteDefenseDocument/index.md description: >- 删除拒付材料API允许商家移除已上传的拒付相关文件。适用于需要更新或清理现有证据材料的情况。通过指定dispute_id和document_id作为关键参数,可精准定位并删除目标文件。此功能帮助保持拒付处理过程中的信息准确性和时效性。 --- # 删除拒付材料 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/dispute/v4-apis/disputeUploadFile/index.md description: >- 上传文件API用于在争议处理过程中向系统提交相关证据文件。适用于需要为特定交易或服务纠纷提供支持材料的情况,支持多种文件类型上传。关键参数包括文件路径、文件类型及与特定争议案例的关联标识。 --- # 上传文件 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/dispute/v4-apis/getDefenseReasons/index.md description: >- 查询拒付抗辩材料API用于获取处理拒付时所需的抗辩理由及相关信息。适用于商家在收到消费者通过银行发起的拒付请求后,需要准备相应抗辩材料以争取资金返还的情况。主要功能包括列出所有可用的抗辩理由及对应的状态码,关键参数有dispute_id和reason_code。 --- # 查询拒付抗辩材料 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/dispute/v4-apis/getDisputeInfo/index.md description: >- 主动获取拒付/未升级争议明细API用于查询特定拒付案例或未升级争议事件的详细信息。适用于商家需要了解拒付或争议原因、状态及处理建议的情况。主要功能包括通过指定案件ID获取相关信息,支持的关键参数有dispute_id。 --- # 主动获取拒付/未升级争议明细 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/dispute/v4-apis/getRetrievalDispute/index.md description: >- 主动获取调单明细API用于查询特定拒付案件的详细信息。适用于需要详细了解拒付原因及处理状态的场景。主要功能包括通过指定案件ID获取详细的调单数据,关键参数有disputeId等。 --- # 主动获取调单明细 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/dispute/v4-apis/supplyDefenseDocument/index.md description: >- 上传拒付材料API用于提交商家针对拒付的辩护文件。适用于商家在遇到信用卡交易争议时,通过此接口向支付平台提供支持其立场的相关证据。关键参数包括案件ID、文档类型及文件内容等。 --- # 上传拒付材料 --- --- url: 'https://acquirer-api-docs-v4.pingpongx.com/notes/zh/guide/APIUsage/index.md' description: >- API 使用基本规则介绍了PingPongCheckout支付API V4的使用规范,适用于需要集成支付功能的开发者。所有请求需通过HTTPS发送,并采用JSON格式。关键特性包括:支持UTF-8字符集、参数兼容性良好以及包含必要的公共请求与响应参数如accId、clientId等,确保安全性和数据 --- # API 使用基本规则 ## 基本信息 * 所有的API请求必须使用HTTPS。 * 请求时不应忽略服务器证书验证的错误,避免被恶意劫持。 ## 数据格式 所有的API请求必须使用HTTPS。 PingPongCheckout支付API V4 使用 JSON 作为消息体的数据交换格式。请求须设置HTTP头部(图片上传API除外): ```text:line-numbers title="📡 HTTP Headers" Content-Type: application/json Accept: application/json ``` ::: note 提示 API应答中的数据有可能包含商户传入的数据,即可能是未经检查的用户输入内容。为了避免XSS(Cross-site scripting)攻击,请调用方在使用应答数据前根据场景做适当的转义或者过滤。 ::: ## 参数兼容性 * PingPongCheckout支付API V4 新的API版本可能在请求或应答中加入新的参数或者JSON的键值对 * PingPongCheckout支付API V4 新的API版本不会去除请求和应答中已经存在的必填参数或者JSON的键值对 * PingPongCheckout支付API V4 当请求或应答中的JSON键值对的值为空(null)时,可以省略 ## 字符集 PingPongCheckout支付API V4 支持UTF-8字符集。 ## 公共请求参数 | 参数字段 | 参数类型 | 参数属性 | 参数说明 | |:-----------|:------------|:-----|:-------------------------------------------------------------------------------------| | accId | String(64) | M | PingPong 商户店铺编号 | | clientId | String(64) | M | PingPong 商户号 | | signType | String(32) | M | 签名规约,支持 MD5、SHA256,具体⻅本文签名规约一栏 | | sign | String(128) | M | 签名,具体⻅本文签名规约一栏,所有参数均参与签名 | | version | String(10) | M | 当前固定为1.0,后续随接口变动可能有调整 | | bizContent | String | M | 请求参数的集合,最大长度不限,除公共参数外所有请求参数都必须放在这个参数中传递 ,格式:JSON字符串 | ::: note 提示 * PingPongCheckout支付API V4 在请求时候,请求参数必须包含公共参数,业务参数需要在`bizContent`中传递。 * 请求时候必须携带`sign`参数,`accId`,`clientId`,`signType`,`version`,`bizContent`均参与签名 ::: ## 公共响应参数 | 参数字段 | 参数属性 | 参数说明 | |:------------|:-------|:--------------------------------------------------------------------------------------| | accId | M | PingPong 店铺号 | | clientId | M | PingPong 商户号 | | code | M | 状态码 | | description | M | 描述 | | signType | M | 签名规约,支持 MD5、SHA256,具体⻅本文签名规约 一栏 | | sign | M | 签名,具体⻅本文签名规约一栏,所有参数均参与签名 | | bizContent | String | 业务响应参数作为整体传入,长度不限 | ::: note 提示 * PingPongCheckout支付API V4 应答参数包含公共响应参数,业务参数在`bizContent`中传递。 ::: ## 地区和国家格式 PingPongCheckout支付API V4 国家或地区的格式需要符合ISO 3166-1标准。请对照ISO 3166-1国家代码一栏。 美国和加拿大地区州代码请对照美国和加拿大州代码一栏。 ## API状态码 请对照API状态码一栏。 ## 金额格式 {#amount-format} ### 基本格式 金额传参为小数点格式,小数点后非0位数不能超过对应币种的小数位数,比如,USD币种最多为两位小数,正例:12.34,12.1,12.10,12,12.120000,12.0000,反例:12.121,12.0008,12.00100。 详见交易币种 需要注意的是币种对应的小数点位数当前使用的是JDK8自带的规则,某些国家币种的单位如果近年来有变化的话可能不适用,需自定义调整,在接入时也需注意。 ### 交易合规要求 根据交易合规要求,**支付金额必须严格等于商品金额计算公式**: ``` amount = sum(unitPrice × number) + shippingFee + sum(unitTaxAmount × number) - sum(totalDiscountAmount) ``` | 字段 | 说明 | |:-----|:-----| | `unitPrice` | 商品单价 | | `number` | 商品数量 | | `shippingFee` | 运费(如有) | | `unitTaxAmount` | 单个商品税费(如有) | | `totalDiscountAmount` | 单个商品总优惠金额(如有) | ::: warning 注意 \*\* Klarna 特殊规则\*\*:使用 Klarna 支付时,商品总价必须等于支付金额(不包含运费等额外费用),即 `sum(goods.unitPrice × goods.number) = amount`。运费请单独添加 shipping-fee 商品项(name 和 description 都设置为 shipping-fee)。 详见Klarna-收银台或Klarna-S2S ::: ## 必传字段规则 {#required-fields} 根据商户业务类型不同,以下字段的必传要求有所区别: | 字段 | 实物商户 | 游戏虚拟类 | 其他虚拟类 | |:------------------|:------:|:--------------------------:|:--------------------------:| | `shippingAddress` | **必填** | 可选 | 可选 | | `billingAddress` | **必填** | 可选 | **必填** | | `customer.email` | **必填** | 与 merchantUserId **必填其一** | 与 merchantUserId **必填其一** | | `merchantUserId` | 可选 | 与 customer.email **必填其一** | 与 customer.email **必填其一** | ### 字段说明 * **shippingAddress**:送货地址信息 * **billingAddress**:账单地址信息 * **merchantUserId**:商户用户ID * **email**:用户邮箱 ### 商户类型说明 | 商户类型 | 说明 | 典型场景 | |-------|---------------|-----------| | 实物商户 | 销售实体商品,需要物流配送 | 电商平台、零售商 | | 游戏虚拟类 | 游戏充值、虚拟道具等 | 游戏平台、应用内购 | | 其他虚拟类 | 数字服务、订阅等 | SaaS、在线教育 | ::: tip 提示 * 以上必传规则仅在支付方式不要求传送的情况下适用。 * 若特定支付方式本身要求传送这些参数,则无论商户类型如何,都需要传送。 * 游戏虚拟类和其他虚拟类商户,`merchantUserId` 和 `customer.email` 至少需要填写一个,用于标识用户身份。 * 详情可以咨询技术支持 ::: ## 签名规则 全报文字段参与签名(sign字段除外),字段根据ASCII码递增排序(字母升序排序)拼接,如果遇到相同字符则按照第二个字符的键值 ASCII 码递增排序,以此类推 排序后的参数与其对应值,组合成 参数=参数值 的格式,并且把这些参数用 & 字符连接起来,此时生成的字符串为待签名字符串 请求参数和同步返回参数,以及异步通知都为全报文签名 详见签名规约 ## 0元支付 0元不允许支付,系统已限制,但0元绑卡可以 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/guide/bestPractices/apmDemo/index.md description: >- 介绍APM接入方式的最佳实践,适用于需要集成如Klarna等本地支付方式的开发者。内容涵盖模拟展示支付效果的方法,强调结算页商品信息与实际支付请求参数独立,便于灵活测试和开发。 --- # APM 接入方式实践 ::: note 提示 本方案仅模拟展示 APM(例如klarna)支付的效果,结算页中的商品信息仅供展示,支付请求参数与商品信息展示数据无关,可以修改请求参数模拟下单。 ::: --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/guide/bestPractices/apmDemoResult/index.md description: >- apmDemoResult 介绍如何使用API进行支付结果查询的最佳实践。适用于需要实时获取支付状态的场景,支持多种支付方式如信用卡、借记卡等。关键特性包括交易ID验证和状态更新通知,确保数据安全与准确性。 --- # apmDemoResult --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/guide/bestPractices/currencyExchange/index.md description: >- 换汇说明介绍在PingPongCheckout中处理不同币种交易的规范。当展示币种与实际支付币种不一致时,需进行换汇操作。文档提供了换汇请求参数示例、信用卡及APM展示示例,并解释了异步通知中的关键参数如`currency`和`exchangedCurrency`。提示开发者注意汇率波动可能导致的金 --- # 换汇说明 ## 背景 PingPongCheckout 不同的支付方式支持不同的交易币种,当客户展示的交易币种与实际交易币种不一致时,那么我们需要进行换汇操作。 ## 名词解释 1. 展示金额、币种:下单接口中请求的交易币种,如图"换汇请求参数"所示 2. 实际金额、币种:当前支付方式下,PingPongCheckout 实际支持的交易币种,即用户实际需要支付的金额和币种 ## 换汇请求参数示例 例如商户网站中显示的计价币种为 USD,用户实际支付币种为 HKD。那么接口传参如图所示。 ## 信用卡展示示例 ## APM 展示示例 ## 异步返回示例 异步通知中如图所示,其中的`currency`参数是展示金额、币种,`exchangedCurrency` 参数代表换汇后币种,如需查看详情,请前往异步通知API。 ::: note 提示 需要的注意的是如果长时间没有完成支付,那么有可能出现因为汇率波动导致展示金额与实际支付金额不一致的情况。我们目前提供以下换汇币种对。 如果有业务需要配置列表以外的换汇规则请咨询技术支持人员。 ::: --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/guide/bestPractices/fetchStatus/index.md description: >- 支付回调和查单实现指引介绍PingPongCheckout V4的两种同步状态方式:异步通知与交易查询。为确保订单状态准确更新,建议商户通过前端重定向至支付结果页面并调用查单接口确认状态,同时后台需有效处理异步通知,并在未收到通知时主动发起交易查询。此外,针对长时间未支付订单,系统将自动关单并通过指 --- # 支付回调和查单实现指引 ## 背景 PingPongCheckout V4提供两种同步商户服务端和PingPongCheckout 服务端的状态的方式: 1. 异步通知 2. 交易查询 如果仅仅依靠异步通知,由于网络异常或者系统的波动,可能会导致用户支付成功,但是商户侧未能成功接收到支付结果通知,进而显示订单未支付的情况。商户侧的订单状态更新不及时,容易造成用户投诉。 ## 解决方案 1. 商户前端页面重定向到payResultUrl页面,商户需要调用商户查单接口确认订单状态,并把查询结果展示给用户。 2. 商户后台需要准确、高效地处理PingPongCheckout V4 支付发送的异步支付结果通知,并按接口规范把处理结果返回。 3. 商户后台未收到异步支付结果通知时,商户应该主动调用 交易查询 ,同步订单状态。 ::: note 提示 上述方案最契合收银台接入方式,若是Non-hosted模式接入,可以直接从下单并支付同步返回结果中获取订单状态。若获取的结果不是终态,可以按照上述流程执行。 ::: ## PingPongCheckout主导的关单 由于用户长时间未支付的订单,PingPongCheckout V4会进行关单处理,关闭订单后,用户无法继续支付,商户可以通过查询接口或者异步通知获取到`CLOSED`状态。 ::: note 提示 如果上送了自定义关单结果通知地址 `closeNotificationUrl`,订单到达`CLOSED`状态会发送关单通知。 ::: --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/guide/bestPractices/rescue/index.md description: >- 交易挽回指南介绍如何处理因账户资金不足等原因导致的失败交易。PingPongCheckout 为有成功机会的被拒绝支付提供自动重试或短期重试窗口,以提高支付成功率。商户可通过设置相同的 requestId 来避免重复支付(仅限Non-Hosted模式)。对于不在重试窗口内的交易,建议通过在订单号后添 --- # 交易挽回 ## 交易挽回 失败的交易在某些情况下,例如当购物者账户资金不足时,如果在稍后的时间点再次提交支付,支付可能会成功。在其他情况下,例如当购物者账户已经关闭时,支付将被永久拒绝。 PingPongCheckout会为有成功机会的被拒绝或的支付安排自动重试或者对于无法成功的交易提供一个短期的重试窗口。挽回一个支付可能需要多次重试尝试。这些尝试都在一个短期窗口内由您安排进行。 ## 交易重试窗口 * 对于同一笔支付订单,在未支付成功前可以允许继续发起支付请求(一笔支付订单对应多笔支付请求) * 如果商户不希望同一笔支付订单发生多次支付请求,那么支付接口中同一笔支付订单的requestId传一样的即可就只允许一次支付请求(仅限Non-Hosted模式) * 因为根据requestId幂等,在订单未支付成功前,如果商户传不同的requestId(或收银台模式),同时发起支付请求,存在重复支付的可能,此时需要人工后台操作退款 ::: note 提示 对于不在重试窗口的情况,建议您在订单号后面加上后缀来发起一笔新的交易。当您在做对账或者成功率观察统计时候,可以根据后缀规则匹配成同一笔订单。 ::: --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/guide/bestPractices/specialRefund/index.md description: >- 特殊支付方式退款说明介绍如何对特定支付方式进行退款操作,包括VNM QR、promptPay和VA等。每种支付方式的退款请求需遵循特定参数要求,如账户号、手机号或邮箱等,并且部分参数为必填项。在对接前请与技术支持确认。 --- # 特殊支付方式退款说明 ## 背景 申请退款API适用于对支持退款功能的支付方式发起退款,目前存在部分支付方式发起退款请求需要按照渠道要求传入特殊参数,具体见以下说明。 ::: note 提示 对接前请和技术支持确认。 ::: ## VNM QR | 参数名称 | 必填 | 参数描述 | |---------------|-----|----------------------------------------------------------------------------------------------------------------------------------------| | accountNumber | M | 接收退款的账户号,支持的账户类型:账户号(account number)、卡号(card number)。商户需要向客户咨询后提供此信息。 | | channelCode | C | 银行的code,如果退款账户号类型是账户号(account number),则该字段为必填项。目前该接口支持向越南46家银行的账户进行转账。支持的银行列表见 附录 | ## promptPay | 参数名称 | 必填 | 参数描述 | 备注 | |------------------|-----|------------|------------------------------------------------------------------| | phone | C | 手机号 | 银行账号/证件号/手机号三者必填其一,否则报错 | | identificationId | C | 证件号 | 银行账号/证件号/手机号三者必填其一,否则报错 | | accountNumber | C | 银行账号 | 银行账号/证件号/手机号三者必填其一,否则报错 | | channelCode | M | 银行名 | 支持的银行列表见 附录 | | customer.name | M | 用户银行账户下的姓名 | / | ## VA * BCA * Mandiri * Bank Syariah Indonesia * DOKU VA * BRI * CIMB * Permata * BNI | 参数名称 | 必填 | 参数描述 | 备注 | |---------------|-----|------------|-------------------| | phone | C | 手机号 | 手机号/邮箱二者必填其一,否则报错 | | email | C | 邮箱 | 手机号/邮箱二者必填其一,否则报错 | | customer.name | M | 用户银行账户下的姓名 | / | --- --- url: 'https://acquirer-api-docs-v4.pingpongx.com/notes/zh/guide/endpoint/index.md' description: >- API端点地址文档介绍了PingPongCheckout提供的在线、终端及商户后台的API接入域名。根据业务场景和注册地选择对应站点(FRA、SG、US),支持沙箱和生产环境,提供详细的API域名配置和JS-SDK集成说明。 --- # API 端点地址 本文档说明 PingPongCheckout 提供的各个站点的 API 端点地址配置。根据您的业务场景和集成方式,选择对应的 API 域名进行接入。 ## 站点架构概览 PingPongCheckout 提供三类站点服务: * **在线业务**:用于在线支付场景,支持收银台和 S2S 模式 * 美国主体使用美国站点(US) * 欧洲以外地区使用欧洲站点(FRA) * 使用SG站点前提申请。 * **终端业务**:用于终端支付场景,支持线下支付设备集成 * 请联系技术支持获取终端业务接入信息,确认站点选择。 * **商户后台**:用于商户管理、订单查询、数据统计等后台操作 * 根据站点选择,使用对应的商户后台域名。 ## 站点分布 PingPongCheckout 在全球部署了三个主要站点,商户根据主体注册地选择对应站点: | 站点代码 | 站点名称 | 地理位置 | 商户主体注册地 | 在线支付 | POS终端支付 | |---------|--------|--------|-------------|---------|---------| | **FRA** | 法兰克福站点 | 欧洲-德国 | 欧洲及其他地区注册商户 | 使用欧洲 站点 | 请咨询技术支持 | | **SG** | 新加坡站点 | 亚太-新加坡 | 亚太地区注册商户 | 使用欧洲 站点 | 请咨询技术支持 | | **US** | 美国站点 | 北美-美国 | 北美地区注册商户 | 使用美国站点 | 请咨询技术支持 | ## 一、线上收单 API 域名 线上收单 API 用于在线支付场景,包括收银台模式(Checkout)和服务器对服务器模式(S2S)。 ### 沙箱环境 用于开发和测试阶段,所有站点共用统一的沙箱环境。 ```text:line-numbers title="🧪 沙箱环境 API" https://sandbox-acquirer-payment.pingpongx.com ``` ### 生产环境 根据商户主体注册地,选择对应的生产环境域名: | 站点 | API 域名 | 商户主体注册地 | |------------|------------------------------------------------------|-------------| | **FRA 站点** | `https://acquirer-payment.pingpongx.com` | 欧洲及其他地区注册商户 | | **SG 站点** | `https://acquirer-payment-checkout-sg.pingpongx.com` | 使用前请联系技术支持 | | **US 站点** | `https://acquirer-payment-checkout-us.pingpongx.com` | 北美地区注册商户 | ### 前端资源 JavaScript SDK/onePage SDK 同样遵循分区原则,必须与 API 使用相同的站点。SDK 用于前端页面集成收银台组件。 #### 沙箱环境 ```html:line-numbers title="🧪 沙箱环境 JS-SDK" // [!code focus] ``` #### 生产环境 | SDK 类型 | FRA 站点 CDN 地址 | SG 站点 CDN 地址 | 详细文档 | |--------------------|----------------------------------------------------------------------------------|---------------------------------------------------------------------------------|----------------------------------------------------| | **JavaScript SDK** | `https://pay-cdn.pingpongx.com/production-fra/static/pp-checkout/pp-checkout.js` | `https://pay-cdn.pingpongx.com/production-sg/static/pp-checkout/pp-checkout.js` | [SDK 接入指南](/notes/zh/integrate/sdk-v4/) | | **onePage SDK** | `https://pay-cdn.pingpongx.com/production-fra/static/pp-checkout/pp-checkout.js` | `https://pay-cdn.pingpongx.com/production-sg/static/pp-checkout/pp-checkout.js` | [onePage 接入指南](/notes/zh/integrate/sdk-v4-2/) | | **SDK Elements** | `https://pay-cdn.pingpongx.com/production-fra/static/pp-checkout/pp-checkout.js` | `https://pay-cdn.pingpongx.com/production-sg/static/pp-checkout/pp-checkout.js` | [Elements 架构设计](/notes/zh/integrate/sdk-elements/) | ::: tip CDN 选择原则 前端 SDK 的 CDN 地址必须与后端 API 选择的站点保持一致。 ::: ### 使用说明 ::: tip 站点选择原则 商户应根据**主体注册地**选择对应站点: * **欧洲注册商户**:使用 FRA 站点 * **亚太注册商户**:优先使用 FRA 站点,如果申请使用 SG 站点,请联系技术支持 * **北美注册商户**:使用 US 站点 * **其他地区注册商户**:使用 FRA 站点 ::: ### 集成示例 #### API 集成示例 ```javascript:line-numbers title="config/api-endpoints.js" // [!code highlight] 根据商户所在地区配置 API 域名 const API_BASE_URLS = { sandbox: 'https://sandbox-acquirer-payment.pingpongx.com', 'prod-fra': 'https://acquirer-payment.pingpongx.com', 'prod-sg': 'https://acquirer-payment-checkout-sg.pingpongx.com', 'prod-us': 'https://acquirer-payment-checkout-us.pingpongx.com' }; // [!code highlight] 选择对应的环境 const environment = 'prod-fra'; // 或 'prod-sg', 'prod-us' const baseURL = API_BASE_URLS[environment]; // API 请求示例 const apiUrl = `${baseURL}/v4/payment/prePay`; ``` #### JS-SDK 集成示例 ```javascript:line-numbers title="sdk/dynamic-loader.js" // [!code highlight] 根据后端选择的域名配置 JS-SDK CDN 地址 const SDK_URLS = { sandbox: 'https://pay-cdn.pingpongx.com/production-fra/static/pp-checkout/sandbox/pp-checkout.js', 'prod-fra': 'https://pay-cdn.pingpongx.com/production-fra/static/pp-checkout/pp-checkout.js', 'prod-sg': 'https://pay-cdn.pingpongx.com/production-sg/static/pp-checkout/pp-checkout.js' }; // [!code highlight] 动态加载对应站点的 SDK const environment = 'prod-fra'; // 根据上述说明选择后端域名,和后端环境匹配 const sdkURL = SDK_URLS[environment]; // 动态创建 script 标签加载 SDK const script = document.createElement('script'); script.type = 'module'; script.src = sdkURL; document.head.appendChild(script); // [!code highlight] SDK 加载完成后使用 script.onload = function() { // SDK 已加载,可以初始化收银台组件 const checkout = document.createElement('pp-checkout'); checkout.setAttribute('locale', 'zh'); document.body.appendChild(checkout); }; ``` #### 完整集成示例 ```javascript:line-numbers title="src/env.js" // [!code highlight] 配置类 - 统一管理 API 和 SDK 配置 class PaymentConfig { constructor(region = 'fra', environment = 'production') { this.region = region; // 'fra', 'sg', 'us' this.environment = environment; // 'production', 'sandbox' } // 获取 API 基础 URL getAPIBaseURL() { if (this.environment === 'sandbox') { return 'https://sandbox-acquirer-payment.pingpongx.com'; } const urls = { 'fra': 'https://acquirer-payment.pingpongx.com', 'sg': 'https://acquirer-payment-checkout-sg.pingpongx.com', 'us': 'https://acquirer-payment-checkout-us.pingpongx.com' }; return urls[this.region]; } // 获取 JS-SDK URL getSDKURL() { if (this.environment === 'sandbox') { return 'https://pay-cdn.pingpongx.com/production-fra/static/pp-checkout/sandbox/pp-checkout.js'; } const urls = { 'fra': 'https://pay-cdn.pingpongx.com/production-fra/static/pp-checkout/pp-checkout.js', 'sg': 'https://pay-cdn.pingpongx.com/production-sg/static/pp-checkout/pp-checkout.js' }; return urls[this.region]; } } // [!code highlight] 使用示例 const config = new PaymentConfig('fra', 'production'); // const apiURL = config.getAPIBaseURL(); const sdkURL = config.getSDKURL(); console.log('API URL:', apiURL); console.log('SDK URL:', sdkURL); ``` ## 二、线下收单 API 域名 线下收单 API 用于终端支付场景,如线下门店、POS 机、支付终端等设备集成。 ### 沙箱环境 ```text:line-numbers title="🧪 沙箱环境 API" https://sandbox-acquirer-payment.pingpongx.com ``` ### 生产环境 | 站点 | API 域名 | 商户主体注册地 | 站点选择 | |------------|-----------------------------------------------------|-------------|---------| | **FRA 站点** | `https://acquirer-payment-instore.pingpongx.com` | 欧洲及其他地区注册商户 | 请联系技术支持 | | **SG 站点** | `https://acquirer-payment-instore-sg.pingpongx.com` | 亚太地区注册商户 | 请联系技术支持 | | **US 站点** | `https://acquirer-payment-instore-us.pingpongx.com` | 北美地区注册商户 | 请联系技术支持 | ### 使用说明 ::: tip 终端支付 * 请联系技术支持选择合适的站点和获取接入信息 ::: ### 集成示例 ```javascript:line-numbers title="src/instore-config.js" // [!code highlight] 线下收单 API 域名配置 const INSTORE_API_BASE_URLS = { sandbox: 'https://sandbox-acquirer-payment.pingpongx.com', 'prod-fra': 'https://acquirer-payment-instore.pingpongx.com', 'prod-sg': 'https://acquirer-payment-instore-sg.pingpongx.com', 'prod-us': 'https://acquirer-payment-instore-us.pingpongx.com' }; // [!code highlight] 终端设备根据部署地区选择对应域名 const environment = 'prod-fra'; const instoreBaseURL = INSTORE_API_BASE_URLS[environment]; ``` ## 三、商户后台地址 商户后台用于商户管理、订单查询、财务对账、数据报表等后台操作。 | 站点 | 商户后台地址 | 商户主体注册地 | |------------|-------------------------------------|-------------| | **FRA 站点** | `https://checkout.pingpongx.com` | 欧洲及其他地区注册商户 | | **SG 站点** | 同 FRA 站点 | -- | | **US 站点** | `https://checkout-us.pingpongx.com` | 北美地区注册商户 | ::: info 说明 * SG 站点的商户后台与 FRA 站点共用,访问地址为 `https://checkout.pingpongx.com` * US 站点商户需访问独立的美国后台 `https://checkout-us.pingpongx.com` * 商户后台不涉及 API 集成,仅用于管理和查询操作 ::: ## 四、API 版本说明 当前文档适用于 **PingPongCheckout API V4** 版本。 ### API 路径结构 ```text:line-numbers title="🔗 API 路径格式" {base_url}/v4/{module}/{endpoint} ``` **示例:** * 预支付接口:`/v4/payment/prePay` * 查询订单:`/v4/payment/query` * 退款接口:`/v4/payment/refund` * 捕获接口:`/v4/payment/capture` ## 五、接入流程 ### 在线支付 根据上述规则选择站点和匹配的前端资源。 ::: steps 1. **选择站点** 根据商户主体注册地选择对应站点: * 欧洲注册商户 → FRA 站点 * 亚太注册商户 → FRA 站点 * 北美注册商户 → US 站点 * 其他地区注册商户 → FRA 站点 2. **获取凭证** 在对应站点的商户后台申请 API 凭证: * **Merchant ID**(商户号) * **API Key**(API 密钥) * **Secret Key**(签名密钥) 3. **配置域名** 在您的系统中配置对应站点的 API 域名 ```javascript:line-numbers title="config/merchant.js" // 配置示例 const config = { baseURL: 'https://acquirer-payment.pingpongx.com', // [!code focus] merchantId: 'YOUR_MERCHANT_ID', // [!code focus] apiKey: 'YOUR_API_KEY', // [!code focus] secretKey: 'YOUR_SECRET_KEY' // [!code focus] }; ``` 4. **沙箱测试** 首先在沙箱环境进行集成测试: * 使用沙箱域名:`https://sandbox-acquirer-payment.pingpongx.com` * 使用测试卡号验证支付流程 * 验证异步通知回调功能 * 测试订单查询、退款等操作 5. **生产上线** 测试通过后,切换到生产环境: * 更换为生产环境域名 * 使用生产环境凭证 * 开始处理真实交易 ::: ### 终端支付 请先联系技术支持获取接入信息。 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/guide/FAQ/integration/index.md description: >- 该文档提供了关于支付集成过程中常见问题的解决方案,包括iframe加载收银台页面失败、无法跳转至APM支付页面及在APM支付时遇到的问题。强调了同源策略限制的重要性,指出了正确配置请求参数与设备类型对成功跳转的影响,并针对韩国特定支付方式提出了解决方案。 --- # 集成问题 ## iframe中无法加载收银台 在iframe中无法加载收银台,是因为iframe中的页面和收银台页面不在同一个域中。这是在浏览器里面的安全限制,详情请查阅 同源策略 ::: danger 提示 请不要使用 iframe 来加载收银台页面,因为可能会因为同源策略导致无法加载收银台页面。 ::: ## 无法跳转到APM 支付页面? 1. 首先请确认您的请求参数正确,并且已经通过API获得正确的支付页面URL。 2. 请确认您的传送的`device_type`参数,某些钱包根据您传送的设备信息来选择跳转的支付页面或是拉起APP支付。 3. 如果是拉起APP支付,请确认您的手机已经安装对应钱包的APP。 4. 沙箱环境可能无法跳转到APP支付,因为钱包的APP一般是生产环境,在钱包的沙箱环境无法正常跳转。 5. 如果您的问题仍然无法解决,请联系PingPong技术支持。 ## 跳转APM支付页面有支付问题 如果您跳转到APM支付页面,页面展示空白,或者是无法完成支付: 1. 一些韩国的支付方式(bankTransfer)由于安全原因,需要加载第三方安全控件,请您检查以下情况: * 安全控件无法正常加载或运行 * 输入框无法获取焦点 * 键盘输入被游戏引擎拦截 * 安全证书验证失败 * 您使用模拟器的情况下 * 如果是PC端,请检查内置浏览器权限设置。 2. 请不要在支付页面的URL自行拼接参数,否则可能会导致参数丢失,无法跳转,支付失败等问题。 3. 请不要禁用浏览器的Javascript,否则无法正常使用支付页面。 4. 如果您无法排除问题,您可以尝试拉起外部浏览器,您可以将拉起外置浏览器作为降级方案。 5. 如果您的问题仍然无法解决,请联系PingPong技术支持。 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/guide/llms-integration/index.md description: >- 本文档介绍如何通过 llms.txt 协议让 AI 工具(如 Cursor、Windsurf、Claude)自动获取 PingPongCheckout API 文档,实现智能代码补全和 API 调用辅助。 --- # LLM 文档集成 PingPongCheckout 文档站支持 [llms.txt 协议](https://llmstxt.org/),允许 AI 编程工具直接获取 API 文档,提供更准确的代码建议和 API 调用辅助。 ## 什么是 llms.txt llms.txt 是一个专为 LLM(大语言模型)设计的文档标准,提供结构化的文档索引,让 AI 工具能够: * 快速发现文档结构 * 获取特定 API 的详细说明 * 理解参数定义和响应格式 ## 文件位置 | 文件 | 路径 | 说明 | |------|------|------| | llms.txt | `/llms.txt` | 文档目录索引(简洁版) | | llms-full.txt | `/llms-full.txt` | 完整文档内容 | | OpenAPI 规范 | `/api/openapi.json` | OpenAPI 3.1.0 规范 | | API 索引 | `/api/index.json` | 所有 API 端点索引 | ## AI 工具集成 ### Cursor 在项目根目录创建 `.cursorrules` 文件: ```text 当需要调用 PingPongCheckout API 时,请参考以下文档: - 文档索引:https://acquirer-api-docs-v4.pingpongx.com/llms.txt - OpenAPI 规范:https://acquirer-api-docs-v4.pingpongx.com/api/openapi.json ``` ### Windsurf 在 `.windsurfrules` 中添加: ```text PingPongCheckout API 文档: - https://acquirer-api-docs-v4.pingpongx.com/llms.txt - https://acquirer-api-docs-v4.pingpongx.com/api/openapi.json ``` ### Claude Code 在 `CLAUDE.md` 中配置: ```markdown ## API 文档参考 查阅 PingPongCheckout API 时: 1. 读取 /llms.txt 获取文档目录 2. 读取 /api/openapi.json 获取 API 规范 3. 根据目录中的 .md 链接获取详细文档 ``` ### 通用 HTTP 访问 任何支持 HTTP 请求的 AI 工具都可以直接获取: ```bash # 获取文档目录 curl https://acquirer-api-docs-v4.pingpongx.com/llms.txt # 获取 OpenAPI 规范 curl https://acquirer-api-docs-v4.pingpongx.com/api/openapi.json # 获取 API 索引 curl https://acquirer-api-docs-v4.pingpongx.com/api/index.json ``` ## API 规范文件 ### OpenAPI 规范 `/api/openapi.json` 包含完整的 OpenAPI 3.1.0 规范: * 所有 API 端点定义 * 请求参数和响应格式 * 认证方式说明 * 错误码定义 ### API 索引 `/api/index.json` 提供 API 端点快速索引: ```json { "version": "1.0.0", "count": 37, "apis": [ { "id": "zh-v4-payment-prePay", "name": "下单接口(Hosted模式)", "path": "/v4/payment/prePay", "method": "POST", "jsonUrl": "/api/zh/zh-v4-payment-prePay.json", "mdUrl": "/api/zh/zh-v4-payment-prePay.md" } ] } ``` --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/guide/nounContract/index.md description: >- 名词约定文档定义了PingPongCheckout相关术语及其含义,适用于开发者理解API接口调用过程中的关键概念。文档涵盖商户后台、网站后台、clientId(商户号)、accId(店铺号)、secret(秘钥)等重要名词的解释及如何获取这些信息的方法,并介绍了transactionId和merc --- # 名词约定 ### 商户后台 商户后台一般指PingPongCheckout的后台管理界面 PingPongCheckout登录 ```text:line-numbers title="urls/checkout-login.txt" https://checkout.pingpongx.com/ ``` ### 网站后台 网站后台一般指商户网站的后台管理界面 ### clientId PingPong 商户商户号,商户在PingPongCheckout的唯一标识 ### accId PingPong 商户店铺号,商户店铺在PingPongCheckout的唯一标识 ### secret/秘钥 PingPong 商户的秘钥 PingPongCheckout API调用的凭证,必须妥善保存,谨防泄漏。 ### 如何获取上述信息 #### accId\&secret获取:  #### clientId accId 去除后3位 ### transactionId 指PingPongCheckout 返回的交易唯一标识 ### merchantTransactionId 指商户网站的交易唯一标识 参数必填属性说明:必填(M),可选(O),条件必填(C)。 ### 信用卡支付 指国际信用卡支付(International credit card payment)以下简称`Credit Card`,如VISA/Master等卡品牌 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/guide/paymentNotify/index.md description: >- 支付通知接入说明介绍了如何配置和接收PingPongCheckOut的异步通知。开发者需提供一个支持HTTP POST的Web服务,设置有效的`notificationUrl`以接收JSON格式的通知数据,并根据约定返回HTTP状态码。文档还提供了回调通知服务器的IP信息及重试机制等关键细节。 --- # 支付通知接入说明 ## 异步通知概述 * 首先,商户侧配置异步回调通知`notificationUrl`地址。 * 每当,交易相关事件发生时(如交易成功),PingPongCheckOut 通知服务将会创建一个JSON对象,其中包含事件相关的数据等信息。 * 然后,PingPongCheckOut 通知服务通过 HTTP POST 请求将JSON对象发送到开发者配置的回调通知`notificationUrl`中。 商户侧在收到回调通知后,可根据异步通知报文做下一步的业务处理。 其流程描述如下: ```mermaid sequenceDiagram participant 买家 as 🛒 买家 participant 商户前端 as 💻 商户前端 participant 商户业务系统 as 🏪 商户业务系统 participant PingPong as 🔄 PingPongCheckOut 买家->>商户前端: 选择商品并结算 activate 商户前端 商户前端->>商户业务系统: 请求创建订单 activate 商户业务系统 商户业务系统->>PingPong: 创建支付订单(POST /orders) activate PingPong PingPong-->>商户业务系统: 返回支付订单信息(含checkoutUrl) deactivate PingPong 商户业务系统-->>商户前端: 返回支付链接 deactivate 商户业务系统 商户前端->>买家: 展示支付选项 商户前端->>买家: 跳转至支付页面(checkoutUrl) deactivate 商户前端 买家->>PingPong: 在支付页面完成支付 activate PingPong PingPong->>商户业务系统: 📡 异步通知支付结果 activate 商户业务系统 Note over PingPong,商户业务系统: 🔁 支持重试机制(详见重试流程图) 商户业务系统-->>PingPong: 🟢 确认接收通知 deactivate 商户业务系统 PingPong->>买家: 显示支付结果 deactivate PingPong opt 主动查询支付结果 商户业务系统->>PingPong: 查询订单状态 activate PingPong PingPong-->>商户业务系统: 返回最新订单状态 deactivate PingPong end ``` [//]: # "" ## 接收异步通知 ### 准备一个支持 HTTP POST 的web服务 PingPongCheckOut 通知服务将以 HTTP POST 方式推送 JSON 格式的数据,因此开发者所提供的 Web 服务需要能够接收并解析来自HTTP POST 请求的 JSON 数据并能够返回相应 HTTP 状态码。 ### 设置回调通知地址 开发者可以通过各接口入参中的 `notificationUrl` 参数配置回调通知Url地址。 * notificationUrl 需要填写商户自己系统的真实地址,不能填写接口文档或demo上的示例地址。 * notificationUrl 必须是以https://或http://开头的完整全路径地址,并且确保URL中的域名和IP是外网可以访问的,不能填写localhost、127.0.0.1、192.168.x.x等本地或内网IP。 * notificationUrl 不能携带参数。 ### 接收并响应 对于商户交易通知响应,遵循以下约定: | 接收结果 | HTTP Code 约定 | 应答报文格式约定 | |------|--------------------------------------------------------------------------------------------------------|-------------------------------------------------| | 接收成功 | 200 <= `httpcode` < 300,比如:200、201、204 | 无需返回应答报文(返回不会产生影响) | | 接收失败 | `httpcode` > 300 或 `httpcode` < 200 200 <= `httpcode` < 300,比如:200、201、204 | 报文体任意 需返回应答报文「FAIL」 | :::note 提示 重试机制:接收失败的情况下会触发重试机制,PingPongCheckout 会在随后的一段时间内,以递增的时间间隔重发,间隔为 `5s/5s/3m/10m/20m/30m/30m/30m/60m/3h/3h/3h`(若中间重试通知成功,则中断不再继续重试)。 ::: ```mermaid sequenceDiagram participant 商户 as 🏪 商户业务系统 participant 通知服务 as 📡 PingPongCheckOut通知服务 Note over 通知服务: 📢 首次通知 通知服务->>商户: 通过HTTP POST发送JSON通知 activate 商户 商户-->>通知服务: 响应通知(成功或失败) deactivate 商户 alt 接收成功 (200 <= HTTP Code < 300 且不返回"FAIL") Note over 通知服务: ✅ 通知流程结束 else 接收失败 Note over 通知服务: 🔁 触发重试机制 Note over 通知服务: ⏱️ 等待5秒后 Note over 通知服务: 🔄 第1次重试 通知服务->>商户: 重试通知1 activate 商户 商户-->>通知服务: 响应通知(成功或失败) deactivate 商户 alt 接收成功 Note over 通知服务: ⏹️ 中断重试,流程结束 else 接收失败 Note over 通知服务: ⏱️ 等待5秒后 Note over 通知服务: 🔄 第2次重试 通知服务->>商户: 重试通知2 activate 商户 商户-->>通知服务: 响应通知(成功或失败) deactivate 商户 alt 接收成功 Note over 通知服务: ⏹️ 中断重试,流程结束 else 接收失败 Note over 通知服务: ⏱️ 继续按照递增时间间隔重试 Note over 通知服务: 间隔为3分钟/10分钟/20分钟/30分钟/30分钟/30分钟/60分钟/3小时/3小时/3小时 Note over 商户,通知服务: 🔄 每次重试都重复相同的请求-响应模式 Note over 商户,通知服务: ✅ 任何一次成功接收都会中断后续重试 end end end ``` :::warning 注意 1. 商户不能仅仅依赖于异步通知,如果⻓时间未收到交易结果,商户应该主动向 PingPongCheckout 发起交易查询,查询对应的交易结果。 2. 请不要在`notificationUrl`后面携带query类型的参数,以免丢失,如果一定要携带,请使用pathInfo的URL模式。 3. 异步通知代码处理逻辑不能做登录态校验。 ::: ## PingPongCheckout回调通知服务器信息 如果商户侧需要防火墙配置后才允许 PingPongCheckout 消息通知服务推送数据,请根据下方信息进行防火墙设置,将IP加入到白名单: ### 生产环境 | 区域 | IP地址 | |:-----|:-------| | EU | 3.125.243.2 | | EU | 3.126.196.22 | | EU | 18.195.199.34 | | SG | 188.239.12.25 | | US | 52.40.91.195 | | US | 44.253.41.116 | | US | 54.187.20.194 | ### 沙箱环境 | IP地址 | |:-------| | 52.76.198.228 | ## 通知报文 交易异步通知 退款异步通知 预授权确认通知 预授权撤销通知 --- --- url: 'https://acquirer-api-docs-v4.pingpongx.com/notes/zh/guide/paystatus/index.md' description: >- 介绍交易幂等模式及状态管理。支持非失败终态和失败终态两种幂等模式,涵盖自动Capture和手动Capture的不同交易状态。文档详细描述了订单生命周期中的状态转移规则,包括异步通知机制和关单处理。此外,还强调了merchantTransactionId的全局唯一性要求以及重试窗口的使用。 --- # 交易幂等 ## 幂等模式 支持的幂等模式有两种,您可以从下面选择适合自己的幂等模式: 1. 非失败终态(默认) 2. 失败终态 ## 交易状态列表 以下是不同情况下可能返回的交易状态: ### 自动Capture | 状态 | 描述 | |:-----------------------------------------------------------------|:-----------------------------------------| | SUCCESS | 已成功支付,交易成功 | | CLOSED | 交易因超期/关单导致的结果 | | FAILED | 支付失败,用户可以重新支付 | | CANCEL | 风控审核拒绝,终态 | | PROCESSING | 中间状态,商户应等待 PingPongCheckout 异步结果再进行业务处理。 | | INIT | 初始化订单 | ### 手动Capture | 状态 | 描述 | |:----------------------------------------------------------------------|:-------------------------------------------------------| | SUCCESS | 最终CAPTURE成功 | | AUTH\_SUCCESS | AUTH操作成功,还需发起CAPTURE操作 | | CLOSED | 交易因超期/关单导致的结果 | | FAILED | 支付失败,用户可以重新支付 | | CANCEL | AUTH操作成功,调用VOID预授权撤销 | | PROCESSING | 中间状态,不能发起CAPTURE操作,商户应等待 PingPongCheckout 异步结果再进行业务处理。 | | INIT | 初始化订单 | ## 订单生命周期 状态转移说明 * 以下状态会发送交易异步通知: * `SUCCESS` * `FAILED` * `CANCEL` * 交易状态不在上述状态列表的场景,下单API或查询接口都会同步响应`PROCESSING`,商户应等待 PingPongCheckout 异步结果再进行业务处理。 * 当商户在下单接口中上送关单通知地址(closeNotificationUrl)时,订单关闭后会发送关单异步通知: * `CLOSED` * 此状态为订单终态。该通知与merchantTransactionId(商户交易ID)关联,以确保准确追踪和识别特定订单。 ## 订单关联关系 ## 交易幂等规则 * 支付订单要求是merchantTransactionId(商户网站订单号)全局唯一,如果重复下单将会幂等返回该支付订单信息。(收银台模式) * 支付请求根据merchantTransactionId+requestId作为唯一判断,如果重复支付请求将会幂等返回支付请求状态信息(S2S模式) 在以上幂等规则基础上,我们提供了一些重试窗口(详见交易挽回) --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/guide/sign-dispute/index.md description: >- 签名规约-拒付介绍如何通过MD5或SHA256算法验证请求的真实性和数据完整性。适用于商户在处理拒付时确保通信安全,关键参数包括accId和signType。遵循字典序组装签名串,并使用私钥进行签名。 --- # 签名规约 拒付API通过验证签名来保证请求的真实性和数据的完整性。 ## 签名类型 | 签名类型 | 描述 | |:-------|:-------------------------------------| | MD5 | 表示选择 MD5 算法,商户使用 Salt 对报文进行摘要签名和验签 | | SHA256 | 表示选择 SHA256算法,商户使用 Salt 对报文进行摘要签名和验签 | ## 请求签名 商户需要使用自身的私钥对消息体中关键数据的组合进行签名。没有携带签名或者签名验证不通过的请求,都不会被执行,并返回错误。 以下为拒付API与调用方约定的请求加签参数列表 | 参数名 | 描述 | |:----------------------|:-------------------------------------| | accId | PingPong商户店铺号 | | signType | 加签类型 | ## 应答签名 对于签名验证成功的请求,拒付API会对应答进行签名。为了保证安全性,应对应答进行验签。 ## 异步通知签名 签名范围和签名方法同请求签名 ## 签名串组装 字典序:按首字母进行排序; queryString:用'=' 进行参数名和参数值(trim 后的值)的拼接,用'&'进行多 个参数之间的拼接,即 key1=val1\&key2=val2\&key3=val3 * 对参数名按字典序排序后,按照queryString方式组装。 * 签名秘钥(salt)放入签名串的位置为: 签名串的开头 , 即{salt}key1=val2\&key2=val2\&key3=val3 ## 计算签名串 > 推荐使用SHA256签名方式,安全度高于MD5 ## 签名工具类 ```java:line-numbers title="dispute/Sign.java" import com.google.common.collect.Maps; import lombok.extern.slf4j.Slf4j; import org.apache.commons.codec.digest.DigestUtils; import org.apache.commons.lang3.StringUtils; import java.security.MessageDigest; import java.util.Map; import java.util.TreeMap; @Slf4j public class Sign { /** * 部分参数签名,参与签名的字段 */ // [!code focus] private static final String[] includeFields = {"accId", "signType"}; /** * 签名秘钥 */ private String salt = null; // [!code highlight:3] public Sign(String salt) { this.salt = salt; } /** * 执行签名 * * @param signType 签名类型 * @param signMap 待签名串 */ // [!code highlight:13] public String signature(String signType, TreeMap signMap) { String signContent = getPartSignParams(signMap); // [!code focus] log.debug("signContent:{}", signContent); if (StringUtils.equalsIgnoreCase("MD5",signType)) { return md5Sign(salt, signContent); // [!code focus] } else if (StringUtils.equalsIgnoreCase("SHA256",signType)) { return sha256(signContent, salt); // [!code focus] } return null; } /** * 获取待签名串(部分字段签名) */ // [!code highlight:11] private static String getPartSignParams(TreeMap signMap) { //添加需要签名的字段 TreeMap resultMap = Maps.newTreeMap(); for (String param : includeFields) { // [!code focus] String value = (String) signMap.get(param); if (StringUtils.isNotBlank(value)) { resultMap.put(param, value); // [!code focus] } } return getSignParams(resultMap); } /** * 获取待签名串 */ private static String getSignParams(TreeMap resultMap) { StringBuilder stringBuilder = new StringBuilder(); int paramNum = 0; for (Map.Entry signEntry : resultMap.entrySet()) { paramNum++; stringBuilder.append(signEntry.getKey()); stringBuilder.append("="); stringBuilder.append(signEntry.getValue()); if (paramNum < resultMap.size()) { stringBuilder.append("&"); } } log.debug("content:【{}】", stringBuilder); return stringBuilder.toString(); } // [!code highlight:12] private static String md5Sign(String salt, String content) { try { MessageDigest md = MessageDigest.getInstance("MD5"); // [!code focus] md.update(salt.getBytes()); // [!code focus] md.update(content.getBytes()); // [!code focus] byte[] digest = md.digest(); return byteToHexString(digest); // [!code focus] } catch (Exception e) { log.error("md5签名失败", e); // [!code error] } return null; } // [!code highlight:11] private static String sha256(String content, String salt) { try { if (StringUtils.isBlank(salt)) { throw new RuntimeException("salt is null"); // [!code error] } String contentStr = salt.concat(content); // [!code focus] return DigestUtils.sha256Hex(contentStr.getBytes("UTF-8")).toUpperCase(); // [!code focus] } catch (Exception e) { log.error("sha256", e); // [!code error] } return null; } public static String byteToHexString(byte[] b) { StringBuilder hexString = new StringBuilder(); for (int i = 0; i < b.length; i++) { String hex = Integer.toHexString(b[i] & 0xFF); if (hex.length() == 1) { hex = '0' + hex; } hexString.append(hex.toUpperCase()); } return hexString.toString(); } } ``` --- --- url: 'https://acquirer-api-docs-v4.pingpongx.com/notes/zh/guide/sign/index.md' description: >- 签名规约定义了PingPongCheckout API v4的请求签名生成与验证规则,确保数据安全。适用于所有使用该API进行支付处理的场景。支持MD5和SHA256两种签名算法,推荐使用更安全的SHA256。详细说明了待签名字符串组装、签名值计算步骤及提供了签名工具类示例代码。 --- # 签名规约 PingPongCheckout API v4通过验证签名来保证请求的真实性和数据的完整性。 ::: warning PingPongCheckout API v4中`accId`,`clientId`,`signType`,`version`,`bizContent`均参与签名,如果之前对接的是v2或者v3版本要升级到v4,需要按照新的签名规则进行对接。 ::: ## 签名类型 | 签名类型 | 描述 | |:-------|:-------------------------------------| | MD5 | 表示选择 MD5 算法,商户使用 Salt 对报文进行摘要签名和验签 | | SHA256 | 表示选择 SHA256算法,商户使用 Salt 对报文进行摘要签名和验签 | ## 待签名字符串组装 1. 获取所有 post 请求的内容,剔除 sign 字段; 2. 按照第一个字符的键值 ASCII 码递增排序(字母升序排序); 3. 将排序后的参数与其对应值,组合成 参数=参数值 的格式,并且把这些参数用 & 字符连接起来,然后把签名秘钥(salt)放入待签名字符串的开头 , 即signContent = {salt}key1=val2\&key2=val2\&key3=val3,此时获取到的为完整的待签名字符串; ## 计算签名值 > 推荐使用SHA256签名方式,安全度高于MD5 签名过程将根据请求体中的数据生成签名值,并将其添加到请求体中。签名值是使用 salt、请求参数和签名方法计算出来的字符串,取决于具体的签名方法(MD5 或 SHA256)。签名值将用于验证请求的来源和完整性。 ## 签名工具类 # 代码示例 ::: code-tabs @tab ☕ JAVA ```java:line-numbers import com.alibaba.fastjson.JSONObject; import org.apache.commons.codec.digest.DigestUtils; import org.apache.commons.lang3.StringUtils; import java.security.MessageDigest; import java.util.ArrayList; import java.util.Collections; import java.util.List; /** * 这个类用于对请求内容进行签名,以确保请求的安全性。 */ public class PingPongCheckoutClient { private final String salt; // 盐值,用于增加签名的复杂度 private final SignAlgorithm signAlgorithm; // 签名算法枚举 /** * 构造函数,用于初始化盐值和签名算法。 * * @param salt 盐值 * @param signAlgorithm 签名算法 */ // [!code highlight:4] public PingPongCheckoutClient(String salt, SignAlgorithm signAlgorithm) { this.salt = salt; this.signAlgorithm = signAlgorithm; } /** * 对请求内容进行签名,并将签名结果添加到请求参数中。 * * @param requestBody 请求内容 * @return 添加了签名结果的请求参数 */ // [!code highlight:5] public JSONObject signRequest(JSONObject requestBody) { String sign = getSign(salt, signAlgorithm, requestBody); // [!code focus] requestBody.put("sign", sign); // [!code focus] return requestBody; } /** * 获取请求内容的签名结果。 * * @param salt 盐值 * @param signAlgorithm 签名算法 * @param requestBody 请求内容 * @return 请求内容的签名结果 */ public static String getSign(String salt, SignAlgorithm signAlgorithm, JSONObject requestBody) { StringBuilder stringBuilder = new StringBuilder(); List keys = new ArrayList<>(requestBody.keySet()); Collections.sort(keys); // 对请求参数的键进行升序排序 for (String key : keys) { Object valueObject = requestBody.get(key); // 剔除空值 if (valueObject == null) { continue; } // 剔除非字符串类型的值 if (!(valueObject instanceof String)) { throw new IllegalArgumentException("request body illegal"); } String value = (String) valueObject; if (StringUtils.isNotBlank(value)) { stringBuilder.append(key).append("=").append(value).append("&"); // 将请求参数的键和值拼接成字符串 } } String needSignStr = stringBuilder.toString(); if (needSignStr.endsWith("&")) { needSignStr = needSignStr.substring(0, needSignStr.length() - 1); // 去掉最后一个 & 符号 } String sign = null; // [!code highlight:7] if (signAlgorithm == SignAlgorithm.MD5) { sign = md5Sign(salt, needSignStr); // [!code focus] } else if (signAlgorithm == SignAlgorithm.SHA256) { sign = sha256(salt, needSignStr); // [!code focus] } else { throw new IllegalArgumentException("Signature algorithm not supported"); // [!code error] } return sign; // [!code focus] } /** * 对请求内容进行MD5签名。 * * @param salt 盐值 * @param content 请求内容 * @return 请求内容的MD5签名结果 */ // [!code highlight:11] public static String md5Sign(String salt, String content) { try { MessageDigest md = MessageDigest.getInstance("MD5"); // [!code focus] md.update(salt.getBytes()); // [!code focus] md.update(content.getBytes()); // [!code focus] byte[] digest = md.digest(); return byteToHexString(digest); // [!code focus] } catch (Exception e) { throw new RuntimeException("md5签名失败", e); // [!code error] } } /** * 将字节数组转化为十六进制字符串。 * * @param bytes 字节数组 * @return 十六进制字符串 */ public static String byteToHexString(byte[] bytes) { StringBuilder hexString = new StringBuilder(); for (int i = 0; i < bytes.length; i++) { String hex = Integer.toHexString(bytes[i] & 0xFF); if (hex.length() == 1) { hex = '0' + hex; } hexString.append(hex.toUpperCase()); // 将转换后的十六进制字符串拼接起来 } return hexString.toString(); // 返回转换后的十六进制字符串 } /** * 对请求内容进行SHA256签名。 * * @param salt 盐值 * @param content 请求内容 * @return 请求内容的SHA256签名结果 */ // [!code highlight:7] public static String sha256(String salt, String content) { try { String contentStr = salt.concat(content); // [!code focus] return DigestUtils.sha256Hex(contentStr.getBytes("UTF-8")).toUpperCase(); // [!code focus] } catch (Exception e) { throw new RuntimeException("sha256签名失败", e); // [!code error] } } /** * 签名算法枚举类。 */ public enum SignAlgorithm { MD5, SHA256 } } ``` @tab 🐘 PHP ```php:line-numbers validate($requestBody); //拼接请求参数 $signContent = $this->signContent($salt, $requestBody); // [!code focus] $sign = $this->getSign($signContent, $requestBody); // [!code focus] $requestBody['sign'] = strtoupper($sign); // [!code focus] if (is_array($requestBody['bizContent'])) { $requestBody['bizContent'] = json_encode($requestBody['bizContent'], JSON_UNESCAPED_SLASHES); } return $requestBody; } /** * 拼接请求参数 * * @param string $salt * @param array $requestBody * @return array|string */ public function signContent(string $salt, array $requestBody) { unset($requestBody['sign']); if (is_array($requestBody['bizContent'])) { $requestBody['bizContent'] = json_encode($requestBody['bizContent'],JSON_UNESCAPED_SLASHES); } //根据键进行排序 ksort($requestBody); $signContent = urldecode(http_build_query($requestBody)); $signContent = $salt . $signContent; return $signContent; } /** * 获取请求内容的签名结果。 * * @param string $signContent * @param array $requestBody * @return array|string */ public function getSign(string $signContent, array $requestBody) { switch ($requestBody['signType']) { case "MD5": $sign = $this->md5Sign($signContent); break; case "SHA256": $sign = $this->sha256($signContent); break; } return $sign; } /** * md5 加密 * * @param string $signContent * @return string */ // [!code highlight:4] public function md5Sign(string $signContent) { return md5($signContent); // [!code focus] } /** * sha256 加密 * * @param string $signContent * @return string */ // [!code highlight:4] public function sha256(string $signContent) { return hash("sha256", $signContent); // [!code focus] } /** * 对于参与的签名参数进行校验 * * @param array $requestBody * @return true * @throws \Exception */ public function validate(array $requestBody) { $keys = ['accId', 'clientId', 'signType', 'version', 'bizContent']; foreach ($keys as $key) { if (!isset($requestBody[$key]) || empty($requestBody[$key])) { throw new \Exception('invalid -' . $key); } } if (!in_array($requestBody['signType'], self::SignAlgorithm)) { throw new \Exception('invalid - signType' ); } if (!is_array($requestBody['bizContent']) && !is_string($requestBody['bizContent'])) { throw new \Exception('invalid - bizContent' ); } return true; } } ``` ::: ## 验签工具类 ```php:line-numbers title="Service/PingPongCheckoutDecrypt.php" signContent($salt, $requestBody); // [!code focus] $sign = $this->getSign($signData['signContent'], $signData['data']); // [!code focus] if ($signData['sign'] == strtoupper($sign)) { // [!code focus] return true; } else { return false; } } /** * 拼接请求参数 * * @param string $salt * @param array $requestBody * @return array|string */ // [!code highlight:26] public function signContent(string $salt, string $requestBody) { //替换特殊字符 $requestBody = str_replace("\\n", '\\\\n', $requestBody); $requestBody = str_replace("\\r", '\\\\r', $requestBody); $requestBody = str_replace("\\f", '\\\\f', $requestBody); $requestBody = str_replace("\\t", '\\\\t', $requestBody); $requestBody = str_replace("\\v", '\\\\v', $requestBody); $requestBody = str_replace('\\\\"', '\\\\\\"', $requestBody); $data = json_decode($requestBody,true); // [!code focus] if (!$data) { if (function_exists('json_last_error') && json_last_error() != 0) { $error = json_last_error_msg(); } else { $error = 'data does not meet the requirements'; } throw new \Exception($error); // [!code error] } $sign = $data['sign']; unset($data['sign']); // [!code focus] //根据键进行排序 ksort($data); // [!code focus] $signContent = urldecode(http_build_query($data)); $signContent = $salt . $signContent; // [!code focus] return ['sign' => $sign, 'data' => $data, 'signContent' => $signContent]; } /** * 获取请求内容的签名结果。 * * @param string $signContent * @param array $requestBody * @return array|string */ public function getSign(string $signContent, array $requestBody) { switch ($requestBody['signType']) { case "MD5": $sign = $this->md5Sign($signContent); break; case "SHA256": $sign = $this->sha256($signContent); break; } return $sign; } /** * md5 加密 * * @param string $signContent * @return string */ public function md5Sign(string $signContent) { return md5($signContent); } /** * sha256 加密 * * @param string $signContent * @return string */ public function sha256(string $signContent) { return hash("sha256", $signContent); } } ``` --- --- url: 'https://acquirer-api-docs-v4.pingpongx.com/notes/zh/guide/start/index.md' description: >- 概览介绍PingPongCheckout,为跨境电商等出海行业提供的一站式跨境支付解决方案。覆盖全球71个国家和地区,支持50多个交易币种,与六大国际卡组织直接合作,并支持260多种本地钱包和BNPL支付方式。旨在降低支付成本、提高成功率及安全性,助力客户拓展海外市场。 --- # 概览 PingPongCheckout是PingPong为跨境电商平台、DTC品牌、独立电商、在线零售、酒店商旅、海外出行等出海行业客户提供的跨境支付一站式收单解决方案,帮助客户在跨境贸易中以更低成本,更高成功率,更低风险的支付方式赢得先机,旨在向客户提供安全便捷的海外本地化支付服务和国际信用卡支付服务。 PingPongCheckout拥有全面的支付覆盖能力: * 覆盖全球71个国家及地区 * 触达全球50亿消费者 * 支持50多个交易币种 * 与全球六大国际卡组织建立直接合作 * 支持超过260个北美、欧洲、东南 亚、日韩等多地区的本地钱包和 BNPL支付方式 ## 能力全景 --- --- url: 'https://acquirer-api-docs-v4.pingpongx.com/notes/zh/guide/testCase/index.md' description: >- 验收测试场景文档介绍了使用PingPongCheckout API进行支付功能测试的用例与注意事项。适用于开发者在沙箱环境中对下单、退款、预授权等交易类型进行测试,确保关键参数正确无误以提高交易成功率。特别强调了在USD货币环境下测试的重要性以及如何模拟3D安全验证等特定情况。 --- # 验收测试场景 ::: danger 注意 1. 沙箱环境不会校验参数是否已经传送; 2. 文档中标明的必填参数请务必详实填写,否则会影响交易成功率; 3. 在关键参数缺失的情况下上线,可能会导致交易批量失败!!! ::: ## 测试用例 ### 下单测试用例 > 沙箱环境请使用USD交易,鉴于别的币种可能没有配置,可能会交易失败。 | 编号 | 测试场景 | 描述 | 操作 | |:----|:--------------|:------------------------------------------|:-------------------------------------------------------------------| | A | 订单金额小数情况 | 基础测试 | 设置测试商品金额带有小数, | | B | 美国或者加拿大地区订单测试 | 基础测试 | 设置收货地址为美国或者加拿大 | | C | 3d订单验证 | 如果接入风控插件 | 请把accId,salt设置为`沙箱accId-B(3DS测试使用)`,订单金额设置`3USD`,然后下单,如果正常会出现3D挑战页 | | D | 全额退款测试 | 接入退款服务时候 | 请进行全额退款 | | E | 部分退款测试 | 接入退款服务时候 | 请进行部分退款,同一笔订单退款两次 | | F | 预授权交易 | 如果商户接入预授权模式 | 请把paymentType设置为AUTH,成功交易之后记录交易信息 | | G | 预授权确认 | 如果商户接入预授权模式 | 请把paymentType设置为CAPTURE,并用测试用例G中的订单进行预授权确认交易,成功交易之后记录交易信息 | ## 获取测试报告填写模板 获取PingPongCheckout 商户接入技术测试报告模板 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/InPersonPayments/gmcSerialPort/index.md description: >- GMC串口MIS接入方案适用于SAAS收银机厂商,通过串口与POS设备通信,实现支付、退款、查询、心跳等业务功能。该方案采用自定义串口通信协议,支持波特率115200的串口通信,使用SHA256签名保证数据安全,适合线下收银场景的快速集成。 --- # GMC串口MIS接入 ## 概述  GMC串口MIS接入方案为SAAS收银机厂商提供了一种高效的支付集成方式,通过串口与POS设备直接通信,无需网络连接即可完成支付交易。 ### 适用场景 * 线下零售收银系统 * SAAS收银机厂商 * POS设备集成 * 离线/半离线支付场景 ### 核心功能 ::: info 支持功能 * **下单支付** - 创建订单并完成支付 * **交易退款** - 对已完成的交易进行退款 * **交易查询** - 查询交易状态和详情 * **心跳检测** - 保持设备连接状态 * **重打印** - 重新打印交易小票 * **结算** - 批量结算功能 ::: ## 接入前提 在开始集成之前,请确保满足以下条件: 1. **POS设备要求** * POS设备已集成GMC串口通信协议 * 支持标准串口通信(RS-232/USB转串口) 2. **技术能力要求** * SAAS系统具备串口通信能力 * 支持Java/Python/C++等语言的串口库 * 具备SHA256签名实现能力,详见[签名规约](/notes/zh/guide/sign/) 3. **商户资质** * 已获取商户在PingPong系统的 `accId` 和 `clientId` * 已完成商户入驻流程 :::warning 注意事项 请妥善保管商户凭证信息,避免泄露造成安全风险。 ::: ## 串口通信协议 ### 通信参数配置 串口通信需与POS设备约定一致的参数配置: | 参数 | 默认值 | 说明 | |:----|:------|:----| | **波特率** | 115200 | 通信速率 | | **数据位** | 8 | 数据位数 | | **停止位** | 1 | 停止位数(1=1位,2=2位) | | **校验位** | 0 | 校验方式(0=无,1=奇,2=偶) | ### 报文帧结构 串口通信采用自定义帧结构,格式如下: ```plaintext [帧头(2B)] + [数据长度(2B)] + [数据报文] + [校验位(1B)] + [帧尾(2B)] ``` | 字段名称 | 长度(字节) | 取值规则 | |:--------|:----------|:--------| | **帧头** | 2 | 固定为 `0xAA 0x55` | | **数据长度** | 2 | 0~65535,表示数据报文的字节数,采用大端模式存储 | | **数据报文** | 0~65535 | 上层业务数据JSON字符串 | | **校验位** | 1 | 数据报文所有字节的异或(XOR)结果 | | **帧尾** | 2 | 固定为 `0x55 0xAA` | ### 报文示例 以下是退款请求的串口十六进制报文示例: ```plaintext AA 55 01 A4 7B 22 61 63 63 49 64 22 3A 22 31 30 30 30 30 31 22 ... 33 55 AA ``` 解析后的JSON数据: ```json { "accId": "100001", "clientId": "POS_12345", "event": "REFUND", "signType": "SHA256", "version": "1.0", "requestTime": "1760754805426", "sign": "BAEA4D56D885D6BD449BFFA2D9F117ECEDA662C85197A19050CA0C18CC64B871", "bizContent": "{...}" } ``` > \[!TIP] > 📌 `sign` 字段为请求签名,计算规则详见[签名规约](/notes/zh/guide/sign/) :::tip 帧构建提示 1. 先将JSON数据转换为UTF-8字节数组 2. 计算字节数组长度,转为2字节大端格式 3. 计算所有数据字节的异或值作为校验位 4. 按帧结构顺序拼接完整报文 ::: ## 交互流程 ```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' } }}%% sequenceDiagram participant SAAS participant POS participant PPSERVE SAAS->>POS: 1. 支付/退款请求(串口通信、SHA256签名) POS->>POS: 2. 报文处理 POS->>PPSERVE: 3. 支付/退款请求 PPSERVE->>PPSERVE: 4. 支付/退款请求处理 PPSERVE->>POS: 5. 支付/退款请求 POS->>POS: 6. 交易/退款处理 POS->>PPSERVE: 7. 支付结果 Note over SAAS: 支付/退款结果查询 SAAS->>POS: 8. 支付结果查询 POS->>SAAS: 9. 支付结果返回 ``` ### 支付流程步骤 :::: steps 1. SAAS发起支付请求 SAAS收银系统通过串口向POS设备发送支付请求,请求报文需使用SHA256签名保证数据安全([签名规约](/notes/zh/guide/sign/))。 调用接口:[GMC串口支付接口](/notes/zh/api/services/InPersonPayments/gmc/pay/) 2. POS报文处理 POS设备接收串口数据,解析报文并验证签名,提取业务参数。 3. POS转发支付请求 POS设备将支付请求转发至PingPong服务端进行处理。 4. PingPong处理支付请求 PingPong服务端验证商户信息、处理支付路由、执行风控检查。 5. POS执行交易 POS设备根据PingPong服务端指令执行刷卡、插卡或扫码等交易操作。 6. POS上报支付结果 交易完成后,POS设备将支付结果上报至PingPong服务端。 7. SAAS查询支付结果 SAAS收银系统通过串口向POS设备查询支付结果,获取交易状态和详情。 调用接口:[GMC串口查询接口](/notes/zh/api/services/InPersonPayments/gmc/query/) :::: ### 退款流程步骤 :::: steps 1. SAAS发起退款请求 SAAS收银系统通过串口向POS设备发送退款请求,需提供原支付订单号和退款金额。 调用接口:[GMC串口退款接口](/notes/zh/api/services/InPersonPayments/gmc/refund/) 2. POS报文处理 POS设备接收串口数据,解析报文并验证签名,校验退款参数。 3. POS转发退款请求 POS设备将退款请求转发至PingPong服务端进行处理。 4. PingPong处理退款请求 PingPong服务端验证原订单信息、检查可退款金额、执行退款处理。 5. POS执行退款 POS设备根据PingPong服务端指令执行退款操作。 6. POS上报退款结果 退款完成后,POS设备将退款结果上报至PingPong服务端。 7. SAAS查询退款结果 SAAS收银系统通过串口向POS设备查询退款结果,确认退款状态。 调用接口:[GMC串口查询接口](/notes/zh/api/services/InPersonPayments/gmc/query/) :::: ## 相关接口 | 接口名称 | EVENT | 说明 | 链接 | |:--------|:------|:-----|:-----| | GMC串口心跳接口 | `HEARTBEAT` | 保持SAAS与POS设备连接状态 | [查看文档](/notes/zh/api/services/InPersonPayments/gmc/heartbeat/) | | GMC串口支付接口 | `PAY` | 创建支付订单并完成交易 | [查看文档](/notes/zh/api/services/InPersonPayments/gmc/pay/) | | GMC串口交易查询接口 | `PAY_QUERY` | 查询支付交易状态和详情 | [查看文档](/notes/zh/api/services/InPersonPayments/gmc/payQuery/) | | GMC串口退款接口 | `REFUND` | 对已完成的交易发起退款 | [查看文档](/notes/zh/api/services/InPersonPayments/gmc/refund/) | | GMC串口退款查询接口 | `REFUND_QUERY` | 查询退款交易状态和详情 | [查看文档](/notes/zh/api/services/InPersonPayments/gmc/refundQuery/) | | GMC串口交易取消接口 | `TRANSACTION_CANCEL` | 取消进行中的交易 | [查看文档](/notes/zh/api/services/InPersonPayments/gmc/transactionCancel/) | | GMC串口重打印接口 | `REPRINT` | 重新打印交易小票凭证 | [查看文档](/notes/zh/api/services/InPersonPayments/gmc/reprint/) | | GMC串口结算接口 | `CALCULATE` | 触发POS设备批量结算 | [查看文档](/notes/zh/api/services/InPersonPayments/gmc/settlement/) | ### 接口使用说明 #### 心跳检测(HEARTBEAT) * 建议每 **30秒** 发送一次心跳包 * 连续3次无响应可判定设备离线 * `bizContent` 字段可为空 #### 交易查询(PAY\_QUERY) * 用于查询支付交易状态和详情 * 支持通过 `merchantTransactionId` 或 `transactionId` 查询,二选一 * 返回交易金额、状态、时间及卡支付信息等详情 #### 退款查询(REFUND\_QUERY) * 用于查询退款交易状态和详情 * 支持通过 `merchantRefundId` 或 `transactionRefundId` 查询,二选一 * 返回退款金额、状态、时间及卡支付信息等详情 #### 交易取消(TRANSACTION\_CANCEL) * 用于取消进行中的交易 * 需要提供 `merchantTransactionId` 商户交易流水号 * 仅对特定状态下的交易有效 #### 重打印(REPRINT) * 用于重新打印上一笔交易小票 * `bizContent` 字段可为空,默认打印最后一笔交易 * 如需指定交易,可在 `bizContent` 中传入交易ID #### 结算(CALCULATE) * 用于触发POS设备批量结算,通常在日终执行 * `bizContent` 字段可为空 * 结算完成后POS设备会打印结算凭证 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/InPersonPayments/offlineCardPayment/index.md description: >- 线下卡支付解决方案通过SAAS收银机与POS设备云端通信,实现支付、查询、退款等功能。采用REST API方式,关键参数包括deviceSn、deviceModel和cashierDeviceId,确保交易请求准确路由至指定POS终端。覆盖场景包括实体店铺的即时支付与退款处理,支持刷卡及NFC支付方 --- # 线下卡支付 ## 主要参与方 PingPongCheckout的线下卡支付解决方案集成方案实现了SAAS收银机与POS设备通过云端服务进行通信,完成支付、查询、退款等交易流程。该方案采用REST API方式,通过明确的设备标识机制确保交易请求准确路由到指定的POS终端。 * SAAS收银机:发起交易请求,接收交易结果 * PingPong收单服务:作为中间层,处理请求路由和响应转发 * POS设备:执行实际的支付操作,处理卡片交易 ## API 清单 1. 下单 API 2. 单笔交易查询 API 3. 申请退款 API 4. 退款查询 API ## 支付流程 ```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' } }}%% sequenceDiagram participant SAAS as 💳 SAAS收银机 participant PP as 🔄 PingPong收单服务 participant POS as 📱 POS设备 Note over SAAS, POS: 💰 卡支付流程 Note over SAAS, PP: 📋 请求参数:• deviceSn, deviceModel, cashierDeviceId• paymentMethod=卡支付方式 SAAS->>+PP: 1️⃣ 下单并支付请求(unifiedPay) PP->>PP: 2️⃣ 验证请求签名和参数 PP->>+POS: 3️⃣ 转发支付请求到指定POS设备 POS->>POS: 4️⃣ 执行刷卡/NFC支付操作 Note over PP, POS: ✅ 支付响应:• 包含卡交易信息(cardTransinfo)• transactionId, merchantTransactionId• status=SUCCESS/FAILED POS-->>-PP: 5️⃣ 返回支付处理结果 PP-->>-SAAS: 6️⃣ 返回支付结果 opt 🔍 [查询订单详情] Note over SAAS, PP: 🔎 查询参数:• transactionId 或 merchantTransactionId SAAS->>+PP: 7️⃣ 订单结果查询(query) PP->>PP: 8️⃣ 查询订单状态 Note over PP, POS: 📊 订单详情响应:• 完整的cardTransinfo信息• 收单行、卡号、持卡人等信息 PP-->>-SAAS: 9️⃣ 返回订单详情 end Note over SAAS, POS: 🎉 支付流程完成 ``` ### 发起支付请求 SAAS收银机向PingPong收单服务发送统一下单支付请求(unifiedPay) 请求中包含`deviceSn`和`deviceModel`参数,明确指定目标POS设备 同时包含`cashierDeviceId`标识收银机自身 ::: note 注意 `deviceSn`,`cashierDeviceId`和`deviceModel`参数是为了确保支付请求被正确路由到指定的POS设备, 请确保参数填写正确, 否则可能导致支付失败或请求被路由到错误的POS设备 ::: ### 请求路由 PingPong收单服务接收请求并验证签名 根据`deviceSn`和`deviceModel`将支付请求路由到指定POS设备 ### 支付处理 POS设备接收请求并执行支付操作(如刷卡、NFC支付等) 处理完成后,POS设备将结果返回给收单服务 ### 结果返回 收单服务将支付结果返回给SAAS收银机,同步响应结果可能是`PROCESSING`状态,支付结果需要通过查询API进行获取, SAAS收银机接收结果并进行后续处理(如打印小票、更新订单状态等) ## 退款流程 ```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' } }}%% sequenceDiagram participant SAAS as 💳 SAAS收银机 participant PP as 🔄 PingPong收单服务 participant POS as 📱 POS设备 Note over SAAS, POS: 💰 卡支付退款流程 Note over SAAS, PP: 📋 退款请求参数:• merchantTransactionId, merchantRefundId• deviceSn, deviceModel (POS退款必传) SAAS->>+PP: 1️⃣ 退款请求(refund) PP->>PP: 2️⃣ 验证请求签名和参数 PP->>+POS: 3️⃣ 转发退款请求到指定POS设备 POS->>POS: 4️⃣ 执行退款操作 Note over PP, POS: ✅ 退款响应:• transactionRefundId, merchantRefundId• status = ACCEPT_SUCCESS/PROCESSING/SUCCESS/FAILED POS-->>-PP: 5️⃣ 返回退款处理结果 PP-->>-SAAS: 6️⃣ 返回退款受理结果 opt 🔍 [查询退款状态 - 可选] Note over SAAS, PP: 🔎 查询参数:• refundId 或 merchantRefundId• merchantTransactionId SAAS->>+PP: 7️⃣ 退款结果查询(refund/query) PP->>PP: 8️⃣ 从数据库查询退款状态 Note over PP, POS: 📊 退款状态响应:• status = PROCESSING/SUCCESS/FAILED• 退款金额、币种、时间等信息 PP-->>-SAAS: 9️⃣ 返回退款状态信息 end Note over SAAS, POS: 🎉 退款流程完成 ``` ### 发起退款请求 SAAS收银机向收单服务发送退款请求(refund) 对于POS交易退款,必须包含`deviceSn`和`deviceModel`参数 请求中包含原交易信息和退款金额 ### 退款路由 收单服务验证请求并路由到指定POS设备 POS设备执行退款操作 ### 结果返回 POS设备将退款结果返回给收单服务,同步响应结果可能是`PROCESSING`状态,支付结果需要通过查询API进行获取, 收单服务将退款受理结果返回给收银机 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/InPersonPayments/offlineQRCodePayment/index.md description: >- 线下二维码支付解决方案通过SAAS收银机与POS设备云端通信,实现支付、查询和退款。采用REST API方式,支持支付宝、微信等移动支付工具。关键API包括下单、交易查询、申请退款和退款查询。适用于零售场景,二维码有效期可自定义,建议设置为5分钟以优化用户体验。 --- # 线下二维码支付 ## 主要参与方 PingPongCheckout的线下二维码支付解决方案实现了SAAS收银机与POS设备通过云端服务进行通信,完成支付、查询、退款等交易流程。该方案采用REST API方式,生成二维码供消费者使用移动支付工具完成支付。 * SAAS收银机:发起交易请求,展示二维码,接收交易结果 * PingPong收单服务:处理请求,生成二维码,通知交易结果 * 消费者移动设备:扫描二维码完成支付 ## API 清单 1. 下单 API 2. 单笔交易查询 API 3. 申请退款 API 4. 退款查询 API ## 支付流程 ```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' } }}%% sequenceDiagram participant SAAS as 💳 SAAS收银机 participant PP as 🔄 PingPong收单服务 participant Consumer as 📱 消费者移动设备 Note over SAAS,Consumer: 🧾 二维码支付流程 Note over SAAS, PP: 📋 请求参数:• cashierDeviceId• paymentMethod=二维码支付方式• timeExpire (二维码有效期) SAAS->>+PP: 1️⃣ 下单并支付请求(unifiedPay) PP->>PP: 2️⃣ 验证请求签名和参数 Note over PP,Consumer: ✅ 二维码响应:• qrCode, qrUrl, qrCodeExpired• status=PROCESSING PP-->>-SAAS: 3️⃣ 返回二维码信息 SAAS->>Consumer: 4️⃣ 向消费者展示二维码 Consumer->>Consumer: 5️⃣ 扫描二维码 Consumer->>Consumer: 6️⃣ 确认支付 Consumer->>PP: 7️⃣ 支付处理 opt 🔁 [轮询订单状态 - 直到终态] Note over SAAS, PP: 🔎 查询参数:• transactionId 或 merchantTransactionId SAAS->>+PP: 8️⃣ 订单结果查询(query) PP->>PP: 9️⃣ 查询订单状态 Note over PP,Consumer: 📊 订单状态响应:• status=PROCESSING/SUCCESS/FAILED PP-->>-SAAS: 🔟 返回订单状态信息 end Note over SAAS,Consumer: 🎉 二维码支付完成 ``` ### 发起支付请求 SAAS收银机向PingPong收单服务发送统一下单支付请求(unifiedPay) 请求中必须包含`cashierDeviceId`参数标识收银机自身 指定`paymentMethod`参数为相应的二维码支付方式 ::: note 注意 请求参数中的`timeExpire`表示二维码的有效期,可设置1分钟到3天。若不设置,默认为3天。 为提高用户体验,建议设置合理的二维码超时时间,通常零售场景建议设置为5分钟。 ::: ### 生成二维码 PingPong收单服务接收请求并验证签名 生成支付二维码,返回`qrCode`和`qrUrl`参数 同时返回`qrCodeExpired`参数表示二维码过期时间 ### 展示二维码 SAAS收银机接收响应,将二维码展示给消费者 消费者使用移动支付工具(如支付宝、微信等)扫描二维码完成支付 ### 支付结果查询 初始响应状态通常为`PROCESSING` SAAS收银机需通过查询API(query)轮询订单状态 或等待PingPong收单服务通过`notificationUrl`推送支付结果 ::: warning 重要提示 收单服务返回的初始状态为`PROCESSING`,只表示二维码生成成功,不代表支付完成。 SAAS收银机应实施轮询机制,建议间隔3-5秒查询一次,直到获取最终支付结果。 ::: ## 退款流程 ```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' } }}%% sequenceDiagram participant SAAS as 💳 SAAS收银机 participant PP as 🔄 PingPong收单服务 Note over SAAS,PP: 💰 二维码支付退款流程 Note over SAAS, PP: 📋 退款请求参数:• merchantTransactionId, merchantRefundId• cashierDeviceId SAAS->>+PP: 1️⃣ 退款请求(refund) PP->>PP: 2️⃣ 验证请求签名和参数 PP->>PP: 3️⃣ 处理退款请求 Note over SAAS,PP: ✅ 退款响应:• transactionRefundId, merchantRefundId• status=ACCEPT_SUCCESS/PROCESSING PP-->>-SAAS: 4️⃣ 返回退款受理结果 opt 🔁 [查询退款结果 - 直到终态] Note over SAAS, PP: 🔎 查询参数:• refundId 或 merchantRefundId• merchantTransactionId SAAS->>+PP: 5️⃣ 退款结果查询(refund/query) PP->>PP: 6️⃣ 查询退款状态 Note over SAAS,PP: 📊 退款状态响应:• status=PROCESSING/SUCCESS/FAILED• 退款金额、币种、时间等信息 PP-->>-SAAS: 7️⃣ 返回退款状态信息 end Note over SAAS,PP: 🎉 二维码退款完成 ``` ### 发起退款请求 SAAS收银机向收单服务发送退款请求(refund) 请求中包含原交易信息和退款金额 必须包含`cashierDeviceId`参数标识收银机自身 ### 退款处理 收单服务验证请求并处理退款操作 退款结果可能不会立即返回,初始可能为`ACCEPT_SUCCESS`或`PROCESSING`状态 ### 结果查询 SAAS收银机通过退款查询API(refund/query)获取最终退款结果 轮询查询直到退款状态变为`SUCCESS`或`FAILED` ::: tip 退款建议 对于二维码支付的退款,建议在系统中保留原交易的`merchantTransactionId`,以便在退款时快速关联原交易。 ::: --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/InPersonPayments/overview/index.md description: >- PingPongCheckout的线下支付解决方案支持构建功能丰富的销售点集成系统,提供全球多语言支持、多样化支付方式(如信用卡和扫码支付)、灵活的网络架构及独特的购物体验。通过统一管理平台轻松管理支付终端和交易记录。适用于需要本地化支付体验和定制化终端界面的商户。 --- # Accept in-person payments with Terminal ## In-person payments 通过PingPongCheckout的线下支付解决方案,您可以构建功能丰富的销售点集成系统,具备以下特点: • 全球多语言支持 - 在世界各地提供多种语言的支持服务 • 支付方式多样化 - 支持全球和本地各种支付方式,满足不同客户需求 • 灵活的网络架构 - 可根据您的业务需求选择合适的网络架构方案 • 独特的购物体验 - 为客户打造独特的购物体验,无缝整合线下和线上支付 • 统一管理平台 - 通过统一的商户后台,轻松管理您的支付终端和交易记录 ## 为客户打造独特体验 ### 本地化支付体验 为购物者提供本地货币支付选项,并为海外游客提供免税购物优惠,提升购物便利性。 个性化购物体验 ### 定制化终端界面 为支付终端开发完全可定制的用户界面,支持: * 品牌定制化 - 融入您的品牌元素 * 语言定制化 - 支持多种语言 * 功能扩展 - 支持多种支付方式 ## 如何工作 ## 支持的支付方式 PingPongCheckout的线下支付解决方案支持以下支付方式: * 信用卡支付 收银机通过物理POS设备直接处理信用卡支付,支持多种卡类型。 * 扫码支付 当您的收银机有背面屏幕可以显示二维码时,可以扫码完成支付。 ### 信用卡支付 1. **交互模式**: * 一次请求即是下单并支付。 * 客户在POS设备上直接刷卡 * 支付结果返回给收银系统 2. **设备依赖**: * 强依赖物理POS设备 * 必须传递设备标识参数:`deviceSn`、`deviceModel`、`cashierDeviceId` * 支付请求会转发到指定的POS设备上执行 3. **数据特性**: * 返回详细的卡交易信息(`cardTransinfo`) * 包含收单行信息、卡号(通常脱敏)、持卡人信息等 * 支持查询获取更完整的交易详情 4. **退款特点**: * 退款必须通过原POS设备执行 * 退款请求必须包含设备信息 * 退款过程相对同步,但仍需查询确认最终状态 ### 二维码支付 1. **交互模式**: * 异步处理流程,分为获取二维码和支付确认两个阶段 * 系统生成二维码,客户使用移动设备扫码支付 * 支付结果需等待用户完成支付操作 2. **设备依赖**: * 不依赖POS硬件设备 * 仅需收银终端展示二维码 * 支付在用户移动设备上完成 3. **数据特性**: * 返回二维码信息:`qrCode`、`qrUrl`、`qrCodeExpired` * 不包含卡交易信息 * 数据结构相对简单 ## 状态流转 ```mermaid %%{init: { 'theme': 'base', 'themeVariables': { 'primaryColor': '#E8F4FD', 'primaryTextColor': '#0D47A1', 'primaryBorderColor': '#1976D2', 'lineColor': '#1565C0', 'secondaryColor': '#BBDEFB', 'tertiaryColor': '#90CAF9', 'background': '#F8FBFF', 'mainBkg': '#E8F4FD', 'secondBkg': '#BBDEFB', 'tertiaryBkg': '#90CAF9' } }}%% stateDiagram-v2 [*] --> INIT : 下单支付 INIT --> PROCESSING : 发起支付请求 INIT --> CLOSED : 超时 PROCESSING --> SUCCESS : 成功回执 PROCESSING --> CANCEL : 订单取消回执 PROCESSING --> FAILED : 失败回执 PROCESSING --> CLOSED : 超时关闭/超时回执 SUCCESS --> [*] CANCEL --> [*] FAILED --> [*] CLOSED --> [*] note right of INIT 初始态 INIT end note note right of PROCESSING 处理中 PROCESSING end note note right of SUCCESS 成功 SUCCESS end note note right of CANCEL 取消 CANCEL end note note right of FAILED 失败 FAILED end note note right of CLOSED 关闭 CLOSED end note ``` --- --- url: 'https://acquirer-api-docs-v4.pingpongx.com/notes/zh/integrate/hosted/index.md' description: >- 该文档介绍了支付集成方式的选择与配置,包括重新支付、记住卡号功能及内嵌SDK特性。适用于优化用户支付体验,支持48小时内未支付成功的订单再次发起支付,并提供保存卡号以简化下次支付流程。内嵌SDK基于Web Component技术和ES2021标准,轻量快速,兼容现代主流浏览器,可自定义皮肤并设置支付 --- # 概览 ## 重新支付 收银台若未支付成功,可以手动打开URL再次发起支付,一个收银台URL有效时长为7天。 ## 记住卡号功能 收银台页面,如果用户勾选了保存卡号,下次支付时候将会自动展示上次的卡信息,如果有多个卡, 将展示已保存的卡列表。选择卡号之后将会自动回填卡信息,优化持卡人的结帐体验。 ## 内嵌 SDK 特性 1. 基于 Web Component 技术和 ES2021 标准,由浏览器原生支持的,优势明显 2. 更加轻量,快速响应,Gzip后整个收银台包大小约为 59 kb 3. 对接方式简单,灵活接入,符合现代化收银台 web app 标准 4. 现代主流浏览器中高版本均兼容 5. 支持自定义 SDK 收银台皮肤 6. 支持发起支付请求前设置钩子函数 ### 浏览器最低版本要求 ## 效果展示 --- --- url: 'https://acquirer-api-docs-v4.pingpongx.com/notes/zh/integrate/link/index.md' description: >- 跳转收银台是一种支付集成方式,通过从下单响应中获取paymentUrl并重定向到收银台完成支付。支持多语言设置,默认为英文;若指定其他语言,则以传入值为准。适用于需要快速集成支付功能的场景,确保用户在熟悉的语言环境中顺畅完成支付过程。 --- # 跳转收银台 ## 重定向到收银台 从下单的响应中获取`paymentUrl`并重定向。 ## 跳转收银台语种支持 ::: note 提示 在language未传入的情况下,收银台语言默认为en,如果传了language,就以传入的语言为准。可在语言列表查看具体枚举值 ::: ## 跳转收银台模式系统交互流程 ```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' } }}%% sequenceDiagram participant Client as 💻 客户端 participant Merchant as 🏪 商户服务端 participant PP as 🔄 PingPong服务端 participant Checkout as 🛒 PingPong收银台 participant Bank as 🏦 发卡行 Note over Client, Bank: 🔗 跳转收银台交互流程 Note over Client, Merchant: 📦 订单创建阶段:• 购物车结算• 选择跳转支付 Client->>+Merchant: 1️⃣ 客户端提交订单 Note right of Merchant: 收集订单信息:• 商品列表• 金额币种• 语言偏好 Merchant->>+PP: 2️⃣ 下单API请求(reserve) Note right of PP: 订单参数:• 商品信息• 支付配置• 回调URLs• language参数 PP->>PP: 3️⃣ 创建支付会话 Note right of PP: • 订单验证• 生成会话ID• 准备收银台 PP-->>-Merchant: 返回paymentUrl和会话信息 Note right of Merchant: 响应包含:• paymentUrl(重定向链接)• sessionToken• 过期时间 Merchant-->>-Client: 重定向到paymentUrl Note over Client, Bank: 🛒 收银台处理阶段 Client->>+Checkout: 4️⃣ 跳转到PingPong收银台 Note right of Checkout: 根据language参数显示对应语言界面 Checkout->>+PP: 5️⃣ 初始化收银台会话 PP->>PP: 验证会话有效性 PP-->>-Checkout: 返回支付方式和配置 Checkout-->>-Client: 渲染收银台页面 Note over Client: 显示支付方式:• 国际信用卡• 本地支付方式• 数字钱包等 Client->>+Checkout: 6️⃣ 用户选择支付方式并填写信息 Note right of Checkout: 用户交互:• 选择支付方式• 填写支付信息• 确认支付 Checkout->>+PP: 7️⃣ 提交支付请求 Note right of PP: 支付处理:• 数据验证• 风控检查• 路由选择 PP->>PP: 处理支付逻辑 Note right of PP: • PCI合规处理• 风险评估• 3DS决策 alt 🟢 支付成功 - 无需3D PP-->>Checkout: 🎉 支付成功 Checkout-->>Client: 显示支付成功页面 opt 🔄 返回商户 Note over Client: 可选择返回商户网站或停留在结果页 Client->>Merchant: 用户点击返回按钮 end else 🔐 需要3D验证 PP->>+Bank: 8️⃣ 3D Secure验证 Note right of Bank: 挑战流程:• OTP验证• 指纹/面部识别• 其他验证方式 Bank->>Client: 重定向到3D验证页 Client->>Bank: 完成3D验证 Bank->>Bank: 处理验证结果 Bank-->>-PP: 返回验证结果 PP->>PP: 处理最终支付结果 PP-->>Checkout: 最终支付状态 Checkout-->>Client: 显示最终结果页面 else ❌ 支付失败 PP-->>Checkout: ❌ 支付失败 Checkout-->>Client: 显示支付失败页面 opt 🔄 重试支付 Client->>Checkout: 用户选择重试 Note over Checkout: 返回支付方式选择允许重新支付 end end PP-->>-PP: 支付处理完成 Checkout-->>-Client: 最终页面显示 Note over Merchant, PP: 📡 异步通知阶段 PP->>+Merchant: 9️⃣ 异步通知支付结果 Note right of Merchant: Webhook通知:• 最终支付状态• 交易详情• 签名验证 Merchant->>Merchant: 处理订单状态 Note right of Merchant: • 更新订单状态• 触发业务流程• 用户通知 Merchant-->>-PP: HTTP 200确认接收 Note over Client, Bank: 🎯 跳转收银台流程完成 ``` --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/integrate/magento235/index.md description: >- Magento2.3.5-PPPay 插件安装说明涵盖了插件的安装前提、注意事项及详细步骤。适用于Magento版本≥2.3.5和PHP版本≥7.1的环境,支持curl和bcmath扩展。文档强调了订单号单调递增的重要性,并提供了沙箱与生产环境配置参数及命令行操作指南。 --- # Magento2.3.5-PPPay 插件安装说明 ## 安装前提 > * magento version>=2.3.5 > * php version >=7.1 > * php extionsion:curl bcmath > * chmod 777 /magentoRoot/var/log *** 以下为非必要设置,若出现504错误可以检查下列选项 * \[ ] php ini执行超时时间 * \[ ] nginx 或者 apache 设置执行超时时间 *** ::: danger 注意 1. 同一个accId下订单号不能重复,必须是单调递增的,否则会引发订单状态问题。 2. 来源于不同数据库的订单不能共用同一个accId。 3. accId下已经有过交易,安装插件之前应该将id起始值设置为大于当前订单id最大的值。 4. 重置数据库,商店,或者accId迁往别的商店,应该检查accId下订单号最大值。 ::: ### 插件下载 Pppay.zip ## 安装过程 ### Magento安装路径规则 解压插件包后 我们先查看插件压缩包的registration.php文件 ```php title="registration.php" line-numbersConfiguration->Sales->Payments Method->Ping Pong Pay`  3. 按照下图所示配置参数! [image.png](/magento235/1629294335798-7a795d99-5669-4423-ba7c-6fd1d3226dee.png) *** ## 环境参数 ### 沙箱环境店铺参数 ```text title="沙箱环境店铺参数" line-numbers # [!code highlight] PingPong沙箱环境店铺参数 clientId: 2018092714313010016 accId: 2018092714313010016291 salt: F78BC96A55548B2319EE68E0 ``` ### 沙箱环境测试卡号 ```text title="沙箱环境测试卡号" line-numbers # [!code highlight] 标准测试卡号 卡号:4200000000000000 有效期:12/22 cvv: 123 cvv需为3位纯数字 # [!code highlight] 3DS交易测试卡号 3DS交易卡:4711100000000000 ``` ### 环境地址 ```text title="PingPong支付环境地址" line-numbers # [!code highlight] 沙箱环境地址 沙箱环境 https://sandbox-acquirer-payment.pingpongx.com # [!code highlight] 生产环境地址 生产环境 https://acquirer-payment.pingpongx.com ``` *** ### 对接过程 #### 沙箱环境对接 1. 按照文件安装插件。 2. 插件安装完成之后,需要进行支付自测,并完成以下事项: * \[ ] 截图输入卡号的页面 * \[ ] 截图支付完成的最终跳转页面 * \[ ] 将截图发送到对接群,并通知技术支持 安装过程,有任何问题可以在对接群里需求技术支持。 *** 注意事项: > 沙箱环境下,不会对持卡人发起扣款,支付之后发货将造成损失,不发货将持卡人可能会发起投诉。因此在对接期间,需要谨慎操作,对接测试通过之后,因立即关闭支付通道,等待生产环境上线之后打开。 *** ## 生产环境对接 1. 插件在技术支持下完成第一轮的沙箱环境对接后将进入,网站资料和账户审查阶段,通过之后,会发放生产环境参数。 2. 获取到生产参数之后,完成以下事项 * \[ ] 将沙箱环境参数替换为生产参数。 * \[ ] 自测支付,并完成截图 * \[ ] 准备一个$1的商品链接。 3. 发送截图和商品链接,并通知技术支持,将由客户/技术支持对该商品链接发起真实交易测试。以验证对接结果和网站支付可用性。 4. 完成真实交易测试之后,需要商户发起退款,以便于验证退款流程。 5. 完成以上流程,网站对接结束,支付通道正式上线,支付可用。 ## 生产环境配置 ### 审核过程 从对接群中或者商务/客户处获得通知,审核通过。 登录[商户后台](https://pay.pingpongx.com/aq/websiteList) ```text title="商户后台地址"https://pay.pingpongx.com/aq/websiteList ``` #### 前往网站列表 如图所示,前往群组管理->查看详情->网站列表 #### 群组管理 > * ⚫ 从菜单栏选择【网站管理】-【群组管理】进入群组管理页面 > * ⚫ 该功能实现当前商户可点击“创建群组”新建群组;系统默认会给一个默认的群组 > * ⚫ 网站下挂于群组。 > * ⚫ 点击“查看详情”进入群组详情页面,可修改群组名称、查看复制 ID 号、查看群组下的网站。  #### 选择网站 根据当前对接网站的域名,在列表中选择对应的网站  #### 获取对应域名网站的accId  #### 获取秘钥 > 从菜单栏选择【系统管理】-【秘钥管理】默认进入秘钥管理页,可在此页面查 看网站秘钥。 > 进入秘钥管理后,可查看所有网站对应的秘钥,点击“秘钥详情”查看具体秘 > 钥字段。 > 状态为“正常”的秘钥可使用,当状态为“异常”时,将无法使用可联系相关业务 人员处理。  *** ### M2常用命令 #### 显示后台管理员URI ```shell title="显示后台管理员URI" line-numbers php bin/magento info:adminuri ``` #### 卸载模块 比如插件名为Pppay\_Pppay ```shell title="卸载模块" line-numbers php bin/magento module:uninstall --clear-static-content Pppay_Pppay ``` #### 启用模块插件 比如插件名为Pppay\_Pppay ```shell title="启用模块插件" line-numbers php bin/magento module:enable --clear-static-content Pppay_Pppay ``` #### 禁用模块插件 比如插件名为Pppay\_Pppay ```shell title="禁用模块插件" line-numbers php bin/magento module:disable --clear-static-content Pppay_Pppay ``` #### 插件列表(启用和禁用的) ```shell title="插件列表" line-numbers php bin/magento module:status ``` #### 切换到生产模式 ```shell title="切换到生产模式" line-numbers php bin/magento deploy:mode:set production ``` #### 切换到开发模式 ```bash title="切换到开发模式" line-numbers php bin/magento deploy:mode:set developer ``` #### 代码编译 检查代码是否有语法错误,比如调用的类是否存在等等。 ```shell title="代码编译" line-numbers bin/magento setup:di:compile[!code highlight] ``` #### 生成静态文件 生成最新的静态文件到pub/static里去。 默认模式和生成模式必须要这些静态文件,不然就报错。 ```shell title="生成静态文件" line-numbers bin/magento setup:static-content:deploy -f[!code highlight] ``` 会自动生成默认语言(一般为英语)的静态文件。 也就是说上面这条命令只生成en\_US的静态文件。 如果你想要同时生成英文和中文,需要在后面指定语言包名,就是: ```shell title="生成多语言静态文件" line-numbers bin/magento setup:static-content:deploy en_US zh_Hans_CN -f[!code highlight] ``` #### 更新Magento数据库数据 插件里有自定义的表/添加了产品属性/更改了某个字段等等,凡是跟数据库表相关的数据。 都用这个命令来更新到数据库里去。 ```shell title="更新Magento数据库数据" line-numbers php bin/magento setup:upgrade[!code highlight] ``` --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/integrate/non-hosted-apm/index.md description: >- Non-hosted 本地支付提供了一种无需跳转至第三方页面的支付集成方案,适用于希望在自有平台上完成交易流程的商户。主要通过调用下单并支付API创建订单,并根据返回的action对象中的参数决定展示二维码或跳转链接来引导用户完成支付。支持异步通知机制确保交易状态同步,覆盖地区广泛,包括但不限于亚洲 --- # Non-hosted 本地支付 ## 交互流程 ::: steps 1. 客户端下单 客户在商户平台发起订单创建 2. 商户服务端请求下单并支付 商户后台调用[下单并支付](/notes/zh/checkout/api/uniformly/)接口 3. PingPongCheckout响应结果 若请求成功,PingPongCheckout会返回以下两种可能的结果: * 二维码:按提示,扫码支付 * url:跳转到APM支付通道方 4. 在APM通道指定的页面完成支付 用户按照指引在支付页面完成支付操作 5. PingPongCheckout服务端推送支付结果 支付完成后,系统发送异步通知,详见[异步通知](/notes/zh/notify/notify/) 6. 商户接收通知并返回确认 商户收到通知之后,应返回`code 200`作为确认 ::: ## API清单 ## 服务端接入 请求下单并支付 创建订单并获取APM支付关键信息`action`对象。 本地支付- `action.type`取值: | 参数 | 描述 | |:-------------------|:----------| | `QR_URL` | 二维码图片url,可以直接展示 | | `PAYMENT_REDIRECT_URL` | 跳转链接 | ## 客户端接入 服务端下单成功后,根据下单并支付响应参数做不同操作 | 参数 | 描述 | |:-------------------|:----------| | `paymentQrCode` | 展示二维码完成支付 | | `paymentRedirectUrl` | 直接跳转 | --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/integrate/non-hosted-card/index.md description: >- Non-hosted 国际信用卡支付方案适用于具备PCI-DSS认证的商户,能够自行开发并处理持卡人信息。该方案通过SafePayGuardJs和SecureShieldJs插件收集风控参数,并在用户点击支付后提交至PingPongCheckout服务端处理。支持全球范围内的信用卡支付,提供3D安全 --- # Non-hosted 国际信用卡支付 ## 接入前提 1. 商户具备PCI资质,并通过PingPongCheckout验证。(PCI-DSS请发送邮件附件到`acquire-risk@pingpongx.com`并抄送`gig-tech-acq@pingpongx.com`) 2. 商户具有自行开发收银台的能力。 :::danger 注意 该方案要求商户服务器自行保存、处理持卡人的信用卡信息,因此强制要求商户具备PCI-DSS认证。 ::: ## 交互流程 ::: steps 1. 进入商户的结账页面后,初始化 SafePayGuardJs 和 SecureShieldJs 插件 初始化风控插件,为后续操作做准备 2. 监听卡号输入框,持卡人填写卡号 当卡号发生改变或输入框失去焦点时,触发初始化 SecureShieldJs 中事件 triggerThreeDsInit,风控插件与 PingPongCheckout 服务端交互,返回部分 jsGeneratedData 和 browserInfo参数 3. 用户点击支付 调用 SafePayGuardJs 和 SecureShieldJs 中的 getGeneratedData 方法获取风控参数 4. 客户端提交订单信息 [下单并支付](/notes/zh/checkout/api/uniformly/),将 SafePayGuardJs 和 SecureShieldJs 插件中收集的 jsGeneratedData、browserInfo 和其他参数一并提交 5. PingPongCheckout 服务端请求发卡行接口 将支付信息发送给发卡行处理 6. 发卡行返回支付结果给 PingPongCheckout 处理支付请求后返回结果 7. PingPongCheckout 服务端同步请求结果 接收并处理发卡行返回的结果 8. 商户客户端根据返回结果决定后续流程 根据 bizContent.threeDContinue 决定是否进入3D流程: * 无需 3D 验证:商户可以执行自定义的逻辑,展示支付结果 * 需要跳转 3D 验证:根据 bizContent.threeDUnionParams.threeDRedirectUrl 跳转3D挑战页,完成验证后 PingPongCheckout 会重定向到 payResultUrl ::: ## API清单 ## 客户端接入 ### 接入风控插件 端到端接入需要风控JS来收集必要的信息对交易做决策,当持卡人成输入卡号完之后,风控插件将会调用PingPongCheckoutServer API发送卡号数据进行验证, 详见 3DS集成指南 ## 服务端接入 ### 创建订单并支付 请求下单并支付 ### 处理响应 请求交易接口之后,PingPongCheckout 根据请求参数响应结果,商户应根据响应处理交易。 处理结果可能是中间态,需要接入异步通知处理交易状态。请前往异步通知 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/integrate/non-hosted/index.md description: >- 非托管支付方式介绍国际信用卡和本地支付的集成方法。适用于具备PCI资质且能自行开发收银台的商户,支持全球范围内的信用卡支付及特定地区的本地支付。关键特性包括风控插件集成、3D验证流程以及通过下单并支付API完成交易处理。 --- # Non-hosted > 国际信用卡以下简称 Credit Card > > 本地支付以下简称APM ## 国际信用卡支付 ### 接入前提 1. 商户具备PCI资质,并通过PingPongCheckout验证。(PCI-DSS请发送邮件附件到`acquire-risk@pingpongx.com`并抄送`gig-tech-acq@pingpongx.com`) 2. 商户具有自行开发收银台的能力。 :::danger 注意 该方案要求商户服务器自行保存、处理持卡人的信用卡信息,因此强制要求商户具备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', 'c0': '#E8F4FD', 'c1': '#D1E7DD', 'c2': '#B3D9FF', 'c3': '#81C784', 'noteBkgColor': '#E1F5FE', 'noteTextColor': '#01579B', 'noteBorderColor': '#0288D1', 'loopTextColor': '#0D47A1', 'activationBkgColor': '#B3E5FC', 'activationBorderColor': '#0277BD' } }}%% sequenceDiagram participant Client as 💻 客户端 participant Merchant as 🏪 商户服务端 participant Risk as 🔒 风控插件 participant PP as 🔄 PingPong服务端 participant Bank as 🏦 发卡行 Note over Client, Bank: 💳 卡支付交互流程 Note over Client, Risk: 🛡️ 风控初始化阶段:• PCI-DSS认证要求• 持卡人卡信息处理 Client->>+Risk: 1️⃣ 进入结账页面,初始化风控插件 Risk-->>-Client: 风控插件初始化完成 Client->>Client: 2️⃣ 持卡人填写卡号信息 Note right of Client: 监听卡号输入框卡号变更或失去焦点 Client->>+Risk: 3️⃣ 触发complexInit事件 Risk->>+PP: 风控插件与服务端交互 Note right of PP: 风控数据收集卡号验证处理 PP-->>-Risk: 返回jsGeneratedData参数 Risk-->>-Client: 风控数据收集完成 Client->>+Merchant: 4️⃣ 提交订单和jsGeneratedData Note right of Merchant: 订单信息+ 风控数据 Merchant->>+PP: 5️⃣ 下单并支付请求(uniformly) Note right of PP: 包含jsGeneratedData和订单参数 PP->>PP: 6️⃣ 处理支付请求和风控验证 Note right of PP: • 风控评估• 3DS决策• 支付路由 alt 🟢 [无需3D验证] PP-->>Merchant: 🎉 支付成功响应 Merchant-->>-Client: 展示支付结果 Note over Client: 商户自定义逻辑支付完成页面 PP->>Merchant: 9️⃣ 异步通知支付结果 Note right of Merchant: 订单状态更新业务逻辑处理 else 🔐 [需要3D验证] PP-->>Merchant: 🔒 需要3D验证响应 Merchant-->>-Client: 触发3D验证流程 Note over Client, Bank: 🔐 3D Secure验证流程 Client->>+Risk: 8️⃣ 触发风控插件3D验证事件 Risk->>Client: 重定向到3D挑战页面 Client->>+Bank: 持卡人填写3D验证信息 Bank->>Bank: 验证3D信息 Note right of Bank: • OTP验证• 生物识别• 其他挑战 Bank->>+PP: 3D验证结果 PP->>PP: 处理3D验证结果 PP-->>-Bank: 确认接收 PP->>Client: 重定向到支付结果页 PP->>Merchant: 9️⃣ 异步通知最终支付结果 Note right of Merchant: 根据3D结果更新订单状态 end Note over Client, Bank: 🎯 卡支付流程完成 ``` ****以下对主要步骤做简要说明**** :::: steps 1. 步骤 1 进入商户的结账页面后,初始化风控插件 2. 步骤 2 监听卡号输入框,持卡人填写卡号,卡号发生改变或者输入卡号的框体失去焦点,触发初始化事件-complexInit 3. 步骤 3 complexInit事件中,风控插件与PingPongCheckout服务端交互,返回jsGeneratedData参数 4. 步骤 4 客户端提交订单和jsGeneratedData参数到商户服务端 5. 步骤 5 商户服务端请求[下单并支付](/notes/zh/checkout/api/uniformly/),将jsGeneratedData和其他参数一并提交 6. 步骤 6 PingPongCheckout服务端响应请求结果,根据返回结果决定是否进入3D流程 7. 步骤 7 无需3D验证,商户可以执行自定义的逻辑,展示支付结果 8. 步骤 8 需要3D验证 1. 触发风控插件的3D验证事件,页面将被重定向到3D挑战页,持卡人需要填写3D验证信息 2. 发卡行验证3D信息 3. 发卡行响应验证结果给PingPongCheckout服务端 4. 页面被重定向到商户填写的支付结果页 9. 步骤 9 PingPongCheckout服务端推送支付结果,如何获取异步通知报文详见[异步通知](/notes/zh/notify/notify/) :::: ### API清单 ### 客户端接入 #### 接入风控插件 端到端接入需要风控JS来收集必要的信息对交易做决策,当持卡人成输入卡号完之后,风控插件将会调用PingPongCheckoutServer API发送卡号数据进行验证, 详见 3DS集成指南 ### 服务端接入 #### 创建订单并支付 请求下单并支付 #### 处理响应 请求交易接口之后,PingPongCheckout 根据请求参数响应结果,商户应根据响应处理交易。 处理结果可能是中间态,需要接入异步通知处理交易状态。请前往异步通知 ## 本地支付 ### 交互流程 ```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' } }}%% sequenceDiagram participant Client as 💻 客户端 participant Merchant as 🏪 商户服务端 participant PP as 🔄 PingPong服务端 participant APM as 💳 本地支付提供商 Note over Client, APM: 🌍 本地支付交互流程 Note over Client, Merchant: 📱 订单创建阶段:• 用户选择本地支付方式• 商户收集订单信息 Client->>+Merchant: 1️⃣ 客户端下单 Note right of Merchant: 用户选择:• 支付方式(APM)• 订单金额• 收货信息 Merchant->>+PP: 2️⃣ 下单并支付请求(uniformly) Note right of PP: 请求包含:• paymentMethod=APM类型• 订单详情• 回调URL PP->>PP: 3️⃣ 处理支付请求 Note right of PP: • 验证商户信息• 选择支付路由• 生成支付会话 alt 🔗 [重定向类型APM] PP-->>Merchant: 📋 返回重定向URL和支付参数 Note right of PP: redirectUrl:用户需跳转的支付页面 Merchant-->>-Client: 重定向到支付页面 Note over Client, APM: 🔄 外部支付处理流程 Client->>+APM: 4️⃣ 重定向到本地支付页面 Note right of APM: 例如:• 支付宝• 微信支付• PayPal等 APM->>APM: 用户完成支付操作 Note right of APM: • 登录验证• 支付确认• 安全验证 APM->>+PP: 5️⃣ 支付结果回调 PP->>PP: 处理支付结果 PP-->>-APM: 确认接收结果 APM->>Client: 重定向回商户页面 else 📊 [API类型APM] PP->>+APM: 4️⃣ 直接调用APM接口 Note right of APM: 服务端对服务端API调用 APM->>APM: 处理支付请求 APM-->>-PP: 返回支付结果 PP-->>Merchant: 📋 返回支付结果 Merchant-->>-Client: 展示支付状态 end Note over Merchant, PP: 📡 异步通知阶段 PP->>+Merchant: 6️⃣ 异步通知最终支付结果 Note right of Merchant: Webhook通知:• 支付状态• 交易ID• 金额确认 Merchant->>Merchant: 处理支付结果 Note right of Merchant: • 订单状态更新• 发货处理• 用户通知 Merchant-->>-PP: 确认接收通知 opt 🔍 [状态查询 - 可选] Note over Merchant, PP: 🔎 主动查询支付状态 Merchant->>+PP: 查询支付状态API PP-->>-Merchant: 返回最新支付状态 end Note over Client, APM: 🎉 本地支付流程完成 ``` ****以下对主要步骤做简要说明**** :::: steps 1. 步骤 1 客户端下单 2. 步骤 2 商户服务端请求[下单并支付](/notes/zh/checkout/api/uniformly/) 3. 步骤 3 若请求成功,PingPongCheckout响应结果有2种可能: * 二维码:按提示,扫码支付 * url:跳转到APM支付通道方 4. 步骤 4 在APM通道指定的页面完成支付 5. 步骤 5 PingPongCheckout服务端推送支付结果,如何获取异步通知报文详见[异步通知](/notes/zh/notify/notify/) 6. 步骤 6 商户收到通知之后,应返回`code 200` :::: ### API清单 ### 服务端接入 #### 创建订单并支付 请求下单并支付 ### 客户端接入 服务端下单成功后,根据下单并支付响应参数做不同操作 | 参数 | 描述 | |:-------------------|:----------| | paymentQrCode | 展示二维码完成支付 | | paymentRedirectUrl | 直接跳转 | --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/integrate/opencart/index.md description: >- 介绍如何在OpenCart 3.8版本中安装和配置PPPay插件,包括环境要求、安装步骤及生产环境对接流程。适用于需要集成支付功能的商家,支持PHP 7.3及以上版本,需特别注意订单号唯一性和单调递增规则以避免状态问题。 --- # OpenCart-PPPay 插件安装说明 ## 安装前提 > * opencart version 3.8 > * php version >=7.3 > * php Extensions:curl > * chmod 777 /opencart\_root/storage/logs *** *** 以下为非必要设置,若出现504错误可以检查下列选项 * \[ ] php ini执行超时时间 * \[ ] nginx 或者 apache 设置执行超时时间 *** ::: danger 1. 同一个accId下订单号不能重复,必须是单调递增的,否则会引发订单状态问题; 2. 来源于不同数据库的订单不能共用同一个accId; 3. accId下已经有过交易,安装插件之前应该将id起始值设置为大于当前订单id最大的值; 4. 重置数据库,商店,或者accId迁往别的商店,应该检查accId下订单号最大值。 ::: ### 插件下载 opencart-ppay.ocmod.zip *** ## 安装过程 ### 登录网站后台 选择`扩展管理->插件安装` 点击 `上传` 插件。  ### 安装插件  ### 配置插件  ### 启用插件  ## 环境参数 ### 沙箱环境店铺参数 ```text title="沙箱环境店铺参数" line-numbers # [!code highlight] PingPong沙箱环境店铺参数 clientId: 2018092714313010016 accId: 2018092714313010016291 salt: F78BC96A55548B2319EE68E0 ``` ### 沙箱环境测试卡号 ```text title="沙箱环境测试卡号" line-numbers # [!code highlight] 标准测试卡号 卡号:4200000000000000 有效期:12/22 cvv: 123 cvv需为3位纯数字 # [!code highlight] 3DS交易测试卡号 3DS交易卡:4711100000000000 ``` ### 环境地址 ```text title="PingPong支付环境地址" line-numbers # [!code highlight] 沙箱环境地址 沙箱环境 https://sandbox-acquirer-payment.pingpongx.com # [!code highlight] 生产环境地址 生产环境 https://acquirer-payment.pingpongx.com ``` ## 对接过程 ### 沙箱环境对接 1. 按照文件安装插件。 2. 插件安装完成之后,需要进行支付自测,并完成以下事项: * \[ ] 截图输入卡号的页面 * \[ ] 截图支付完成的最终跳转页面 * \[ ] 将截图发送到对接群,并通知技术支持 安装过程,有任何问题可以在对接群里需求技术支持。 *** 注意事项: > 沙箱环境下,不会对持卡人发起扣款,支付之后发货将造成损失,不发货将持卡人可能会发起投诉。因此在对接期间,需要谨慎操作,对接测试通过之后,因立即关闭支付通道,等待生产环境上线之后打开。 *** ### 生产环境对接 1. 插件在技术支持下完成第一轮的沙箱环境对接后将进入,网站资料和账户审查阶段,通过之后,会发放生产环境参数。 2. 获取到生产参数之后,完成以下事项 * \[ ] 将沙箱环境参数替换为生产参数。 * \[ ] 自测支付,并完成截图 * \[ ] 准备一个$1的商品链接。 3. 发送截图和商品链接,并通知技术支持,将由客户/技术支持对该商品链接发起真实交易测试。以验证对接结果和网站支付可用性。 4. 完成真实交易测试之后,需要商户发起退款,以便于验证退款流程。 5. 完成以上流程,网站对接结束,支付通道正式上线,支付可用。 ## 生产环境配置 ### 审核过程 从对接群中或者商务/客户处获得通知,审核通过。 登录[商户后台](https://pay.pingpongx.com/aq/websiteList) ```text:line-numbers title="urls/merchant-backend.txt" https://pay.pingpongx.com/aq/websiteList ``` ### 前往网站列表 如图所示,前往群组管理->查看详情->网站列表 ### 群组管理 > * ⚫ 从菜单栏选择【网站管理】-【群组管理】进入群组管理页面 > * ⚫ 该功能实现当前商户可点击“创建群组”新建群组;系统默认会给一个默认的群组 > * ⚫ 网站下挂于群组。 > * ⚫ 点击“查看详情”进入群组详情页面,可修改群组名称、查看复制 ID 号、查看群组下的网站。  ### 选择网站 根据当前对接网站的域名,在列表中选择对应的网站  ### 获取对应域名网站的accId  ### 获取秘钥 > 从菜单栏选择【系统管理】-【秘钥管理】默认进入秘钥管理页,可在此页面查 看网站秘钥。 进入秘钥管理后,可查看所有网站对应的秘钥,点击“秘钥详情”查看具体秘 > 钥字段。 > 状态为“正常”的秘钥可使用,当状态为“异常”时,将无法使用可联系相关业务 人员处理。  --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/integrate/operation/index.md description: >- 该文档介绍如何在PingPongCheckOut后台配置支付链信息,包括登录、维护品牌信息、添加支付链详情等步骤。适用于需要自定义支付邮件模板和控制支付链有效期的商户。特别注意业务订单号的唯一性和长度限制(64位)。 --- # 操作手册 ### 1.登录商户后台 登录您的账号密码进到PingPongCheckOut后台,请点击登录。 ### 2.维护支付链品牌信息 支付链品牌信息功能,是对用户收到支付邮件中,邮件Logo、网站等信息展示的配置,也包含支付链可支付有效期的配置。 (1) 功能菜单位置 (2) 功能展示 定义邮件模版 ### 3.添加支付链信息 支付链功能,用来维护支付信息,包括收件人邮箱、手机号、所消费的商品信息、品牌信息,通过这里可以维护发送给收件人的具体支付信息。 (1)功能菜单位置 (2)添加支付链界面展示 :::note 提示 支付链商品信息中的业务订单号,一般会作为商户侧交易的网站订单号,请注意唯一性和总字符⻓度(64位)的限制。 ::: ### 4.用户收到支付链邮件,进行支付 邮件内容参考: 订单确认页面: 支付页面: 收银台页面: 支付完成页面: ### 5.商户后台订单页展示 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/integrate/overview/index.md description: >- 介绍如何选择和配置在线支付产品的集成方式。涵盖从预构建集成到自定义结账体验的多种方案,适用于不同技术水平和需求的商户。推荐的集成方式包括跳转收银台、内嵌SDK及S2S,分别适合低技术投入、轻度定制和完全自定义场景。此外,还提供无代码集成选项如支付链,以及与各类平台和插件的兼容性支持。 --- # 概览 ## 集成概述 在开始使用在线支付产品之前,您可以查看在线支付API文档,先初步了解我们的对接流程。入驻完成之后就可以开始对接了。 您可以通过多种方式集成我们的API接口。这些范围从使用预构建的集成,到构建您的收银台界面以完全控制您的结账体验。我们建议您根据您的需求和能力做出选择。 ## 推荐的集成 ### 收银台-跳转收银台 如果您想花费最少的技术精力在您的网站上运行结账页面,请尝试将客户重定向到PingPongCheckOut托管页面,以便您可以专注于对您重要的事情。我们负责整个付款过程。 ### 收银台-内嵌 SDK 如果您想在结账时向客户显示统一的付款方式列表,同时仍然希望自定义某些页面外观,请尝试集成js sdk,而无需广泛的前端开发工作。 ### S2S 如果您想完全控制结账页面的外观,并让您的客户通过您的用户界面付款,请尝试通过在后端直接使用我们的API构建来处理交易。请注意,此选项需要更多的时间和开发资源来实施和维护。 ## 无代码集成 ### 支付链 嵌入或共享一个到 PingPongCheckout 支付页面的链接,以接受没有网站的付款。 详见支付链 ## 与平台或插件集成 ### 平台 更多平台支持详见SaaS 建站平台 ### 插件 更多插件支持详见Plugins --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/integrate/payByLink/index.md description: >- 支付链是PingPong提供给商户的一种快捷收单方式,适用于无需网站对接的场景。通过在PingPongCheckout后台添加支付信息,生成链接发送至用户邮箱,用户点击后进入支付页面完成交易。支持全球范围内的支付,主要特点包括操作简便、快速集成。使用前需联系运营开通权限。 --- # 支付链 ## 支付链 支付链是PingPong提供给商户进行快捷收单操作的产品,无需商户网站对接,在PingPongCheckout商户后台添加支付链信息后,会发送支付链接到用户邮箱,用户访问支付链接即可通过PingPongCheckout支付收银台进行支付,支付完成后,商户可以登录到商户后台查看订单。 :::note 提示 支付链仅提供给部分商户使用,如需开通,请先联系运营开通相关权限 ::: 具体如何开通支付链,可以点击查看操作手册。 --- --- url: 'https://acquirer-api-docs-v4.pingpongx.com/notes/zh/integrate/plugin/index.md' description: >- 插件模块介绍了一系列为开源电子商务平台设计的集成解决方案,旨在优化结账流程。这些插件支持PingPongCheckout支付功能,易于安装且配置简单,适用于希望提升客户支付体验的商家。 --- # Plugins 我们为主流的开源E-Commerce解决方案提供一系列插件,为您的购物者提供最佳的结账体验。我们的插件易于集成, 并配有开箱即用的PingPongCheckout支付平台功能。 ## 支持的插件 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/integrate/prestashop/index.md description: >- 该文档介绍Prestashop-PPPay插件的安装步骤,适用于版本1.7.6.6及以上的Prestashop商店。涵盖安装前提条件、具体安装过程以及配置商户参数的方法。同时提供沙箱环境和生产环境对接流程,包括测试卡号、截图验证等关键步骤,确保支付功能正确无误地集成到商店中。 --- # Prestashop-PPPay插件安装 ## 安装前提 > * Prestashop version = 1.7.6.6 > * php version >= 5.6 && <= 7.3 > * MySQL version 5.6, 5.7 > * chmod 777 /webRoot/Prestashop/var/logs 以下为非必要设置,若出现504错误可以检查下列选项 * \[ ] php ini执行超时时间 * \[ ] nginx 或者 apache 设置执行超时时间 payResultUrl *** ::: danger 注意 1. 同一个accId下订单号不能重复,必须是单调递增的,否则会引发订单状态问题; 2. 来源于不同数据库的订单不能共用同一个accId; 3. accId下已经有过交易,安装插件之前应该将id起始值设置为大于当前订单id最大的值; 4. 重置数据库,商店,或者accId迁往别的商店,应该检查accId下订单号最大值。 ::: ### 插件下载 ps\_pingpongpay.zip *** ## 安装过程 1. 登录网站后台 `选择 模块-> Module Manager ->上载插件 `  3. 将插件包拖入上传对话框 等待解包和安装执行完成  4. 等待安装完成  5. 安装完成之后 出现配置按钮 点击配置开始配置商户参数 6. 商户参数配置 ```text title="商户环境配置参数" line-numbers # [!code highlight] PingPong支付环境地址 沙箱环境 https://sandbox-acquirer-payment.pingpongx.com 生产环境 https://acquirer-payment.pingpongx.com # [!code highlight] 沙箱环境店铺参数 clientId: 2018092714313010016 accId: 2018092714313010016291 salt: F78BC96A55548B2319EE68E0 # [!code highlight] 沙箱环境测试卡号 卡号:4200000000000000 有效期:12/22 cvv: 123 其它随便填, cvv需为3位纯数字 ```  7. 点击保存 保存商户参数 安装完成 可以测试支付流程 ## 环境参数 ### 沙箱环境店铺参数 ```text title="沙箱环境店铺参数" line-numbers # [!code highlight] PingPong沙箱环境店铺参数 clientId: 2018092714313010016 accId: 2018092714313010016291 salt: F78BC96A55548B2319EE68E0 ``` ### 沙箱环境测试卡号 ```text title="沙箱环境测试卡号" line-numbers # [!code highlight] 标准测试卡号 卡号:4200000000000000 有效期:12/22 cvv: 123 cvv需为3位纯数字 # [!code highlight] 3DS交易测试卡号 3DS交易卡:4711100000000000 ``` ### 环境地址 ```text title="PingPong支付环境地址" line-numbers # [!code highlight] 沙箱环境地址 沙箱环境 https://sandbox-acquirer-payment.pingpongx.com # [!code highlight] 生产环境地址 生产环境 https://acquirer-payment.pingpongx.com ``` ## 对接过程 ### 沙箱环境对接 1. 按照文件安装插件。 2. 插件安装完成之后,需要进行支付自测,并完成以下事项: * \[ ] 截图输入卡号的页面 * \[ ] 截图支付完成的最终跳转页面 * \[ ] 将截图发送到对接群,并通知技术支持 安装过程,有任何问题可以在对接群里需求技术支持。 *** 注意事项: > 沙箱环境下,不会对持卡人发起扣款,支付之后发货将造成损失,不发货持卡人可能会发起投诉。因此在对接期间,需要谨慎操作,对接测试通过之后,因立即关闭支付通道,等待生产环境上线之后打开。 *** ### 生产环境对接 * 插件在技术支持下完成第一轮的沙箱环境对接后将进入,网站资料和账户审查阶段,通过之后,会发放生产环境参数。 * 获取到生产参数之后,完成以下事项 * \[ ] 将沙箱环境参数替换为生产参数。 * \[ ] 自测支付,并完成截图 * \[ ] 准备一个$1的商品链接。 发送截图和商品链接,并通知技术支持,将由客户/技术支持对该商品链接发起真实交易测试。以验证对接结果和网站支付可用性。 * 完成真实交易测试之后,需要商户发起退款,以便于验证退款流程。 * 完成以上流程,网站对接结束,支付通道正式上线,支付可用。 ### 生产环境配置 ### 审核过程 从对接群中或者商务/客户处获得通知,审核通过。登录[商户后台](https://pay.pingpongx.com/aq/websiteList) ```text:line-numbers title="urls/merchant-backend.txt" https://pay.pingpongx.com/aq/websiteList ``` ### 前往网站列表 如图所示,前往群组管理->查看详情->网站列表 ### 群组管理 > * ⚫ 从菜单栏选择【网站管理】-【群组管理】进入群组管理页面 > * ⚫ 该功能实现当前商户可点击“创建群组”新建群组;系统默认会给一个默认的群组 > * ⚫ 网站下挂于群组。 > * ⚫ 点击“查看详情”进入群组详情页面,可修改群组名称、查看复制 ID 号、查看群组下的网站。  ### 选择网站 根据当前对接网站的域名,在列表中选择对应的网站  ### 获取对应域名网站的accId  ### 获取秘钥 > 从菜单栏选择【系统管理】-【秘钥管理】默认进入秘钥管理页,可在此页面查 看网站秘钥。进入秘钥管理后,可查看所有网站对应的秘钥,点击“秘钥详情”查看具体秘 > 钥字段。 > 状态为“正常”的秘钥可使用,当状态为“异常”时,将无法使用可联系相关业务 人员处理。  --- --- url: 'https://acquirer-api-docs-v4.pingpongx.com/notes/zh/integrate/sass/index.md' description: >- 介绍如何在主流SaaS建站平台上集成PingPongCheckout支付,适用于希望无需额外开发即可快速接入支付解决方案的商家。只需简单配置,支持Shopify、Magento等平台,覆盖全球主要市场,提供安全便捷的支付体验。 --- # SaaS 建站平台 PingPongCheckout和主流的SaaS建站服务提供商建立了合作。您在平台上的店铺,无需任何开发投入,只需在我们的引导下, 做一些简单的设置,即可接入PingPongCheckout支付。 ## 支持的建站平台 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/integrate/sdk-elements/index.md description: >- PingPong Element SDK 支持下单并支付、绑定钱包等多元支付场景。采用全新架构设计,提供统一的API接口、灵活的事件模型和可扩展的支付组件。集成流程包括引入SDK脚本、初始化配置、创建支付元素、事件监听与处理,并提供营销活动集成功能。 --- # PingPong Element SDK 集成指南 ## SDK集成流程 ```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' } }}%% sequenceDiagram participant User as 👤 用户 participant Browser as 🌐 浏览器 participant Frontend as 💻 商户前端 participant Backend as 🏪 商户后端 participant SDK as 📦 Element SDK participant PP as 🔄 PingPong服务端 Note over User, PP: 🚀 Element SDK 完整集成流程 User->>Browser: 选择商品 Browser->>Frontend: 打开支付页面 Note over Frontend, Backend: 📋 初始化阶段 Frontend->>+Backend: 请求初始化 sdkAccessToken Backend->>+PP: 请求初始化 sdkAccessToken PP-->>-Backend: 返回初始化 sdkAccessToken Backend-->>-Frontend: 返回初始化 sdkAccessToken Frontend->>+SDK: 使用 sdkAccessToken 初始化 SDK Note right of SDK: PingPongSDK.init() SDK->>+PP: 查询店铺配置 PP-->>-SDK: 返回店铺配置 SDK-->>-Frontend: SDK 初始化完成 SDK->>Frontend: 触发 ready 事件 Frontend->>SDK: 创建支付元素 Note right of SDK: createElement() SDK-->>Frontend: 支付元素已就绪 Frontend->>Browser: 在支付页面中渲染支付按钮 Note over User, PP: 💳 支付流程开始 Frontend->>User: 显示支付按钮 User->>Frontend: 点击支付按钮 Frontend->>+SDK: 触发支付流程 SDK->>+Frontend: 调用 createOrder() activate Frontend Note over Frontend: 校验 billing、shipping、优惠券 Frontend->>+Backend: 发送订单详情 Backend->>+PP: 下单(原V4下单接口) PP-->>-Backend: 返回交易 token Backend-->>-Frontend: 返回交易 token Frontend-->>-SDK: 从 createOrder 返回 token deactivate Frontend SDK->>+PP: 请求支付(支付信息 + token) PP->>PP: 处理支付 Note right of PP: • 风控检查• 支付路由• 第三方调用 PP-->>-SDK: 支付响应 alt ❌ 支付失败 SDK->>Frontend: 调用 error(code, msg) activate Frontend Note over Frontend: 处理支付失败逻辑 deactivate Frontend else ✅ 支付成功或处理中 SDK->>Browser: 跳转到支付结果页面 Note right of Browser: merchantResultUrl else 🔒 需要 3DS 验证 SDK->>Browser: 跳转到 3DS 验证页面 end Note over User, PP: 🎯 支付流程结束 ``` ## 架构设计 ### 核心模块 | 模块 | 职责 | | --- | --- | | **PingPongSDK** | SDK 唯一入口,暴露 init / createElement 方法 | | **PingPongElement** | 所有支付按钮的基类,提供 .on() / .off() 事件机制 | ### 支付模式 SDK 支持两种主要模式: * **Payment**: 下单并支付模式,适用于标准支付流程 * **Vault**: PayPal 独立签约模式,用于绑定钱包 ## 接入流程 ### 1. 获取 sdkAccessToken 商户后端系统通过调用获取 sdkAccessToken 接口得到访问凭证。 **支付场景:** * 调用 `/v4/session/init` 接口获取 sdkAccessToken **签约场景:** * POST 调用已有签约接口获取 sdkAccessToken 和 JS URL ### 2. 引入 Element SDK 根据您的业务环境,选择相应的 SDK 版本进行引入: :::: code-tabs @tab 🧪 沙箱环境 ```html ``` @tab 🇪🇺 FRA 生产环境 ```html ``` @tab 🇸🇬 SG 生产环境 ```html ``` :::: ### 3. 初始化 SDK #### 入参说明 ::::: field-group :::: field name="mode" type="string" required 业务模式 `Payment`(支付) 或 `Vault`(PayPal 独立签约) :::: :::: field name="env" type="string" required 运行环境 `sandbox`(沙箱) 或 `production`(生产) :::: :::: field name="amount" type="string" required 交易金额 用于收银台展示 :::: :::: field name="currency" type="string" required 交易币种 :::: :::: field name="country" type="string" required 国家/地区代码 如 `US`、`CN`、`UK` 等 :::: :::: field name="accId" type="string" required 商户账户 ID :::: :::: field name="locale" type="string" required 界面语言 `en`、`zh-CN` 等 :::: :::: field name="region" type="string" optional default="fra" 地区 `sg` 或 `fra` :::: :::: field name="sdkAccessToken" type="string" required SDK 访问凭证 :::: :::: field name="merchantResultUrl" type="string" required 支付完成后的跳转地址 :::: :::: field name="createOrder" type="Function" optional 下单函数 mode 为 `Payment` 时必传。该函数接收一个包含 `payMethod` 的对象参数,表示用户选择的支付方式 :::: :::: field name="goods" type="Array" required 商品信息数组 详见下方 [goods 数组结构](#goods-数组结构) :::: :::: field name="biztype" type="string" optional 业务类型 可选值: `CodeGrant` :::: :::: field name="recurringInfoDTO" type="Object" optional Recurring 配置,ApplePay 签约必传 :::: ::::: #### 初始化示例 ```javascript:line-numbers title="src/sdk-init.js" await PingPongSDK.init({ mode: 'Payment', // 业务模式: Payment 或 Vault env: 'sandbox', // 运行环境 amount: '19.99', // 交易金额 currency: 'USD', // 交易币种 country: 'US', // 国家/地区代码 accId: 'ACC_123', // 商户账户ID locale: 'en', // 语言设置 region: 'fra', // 地区: sg 或 fra sdkAccessToken: 'your_sdk_token', // SDK访问令牌 merchantResultUrl: 'https://merchant-result.com', // 支付完成跳转地址 // mode 为 Payment 时必传 createOrder: async ({payMethod}) => { console.log('用户选择的支付方式:', payMethod); // 调用商户后端下单接口 const response = await fetch('/xx/xx', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ payMethod, // 传递支付方式到后端 xx: 'xx' }) }); const result = await response.json(); return result.token; // 返回订单 token }, // 商品信息数组(必填) goods: [ { name: '商品名称', description: '商品描述', imgUrl: 'https://example.com/product.jpg', sku: 'SKU123', unitPrice: '19.99', number: '2', virtualProduct: 'N' } ], // ApplePay 签约时必传 recurringInfoDTO: { recurringPaymentStartDate: '2024-06-01 00:00:00', recurringPaymentIntervalUnit: 'month', recurringPaymentIntervalCount: '6', recurringPaymentEndDate: '2024-12-01 00:00:00' } }); ``` ### goods 数组结构 商品信息数组包含每个商品的详细信息。 ::::: field-group :::: field name="name" type="string" required 商品名称 :::: :::: field name="description" type="string" optional 商品描述 :::: :::: field name="imgUrl" type="string" optional 商品图片 URL :::: :::: field name="sku" type="string" optional 商品 SKU :::: :::: field name="unitPrice" type="string" required 商品单价 :::: :::: field name="number" type="string" required 商品数量 :::: :::: field name="virtualProduct" type="string" optional 是否为虚拟产品 `Y` 或 `N` :::: ::::: **示例:** ```javascript:line-numbers title="src/goods-example.js" goods: [ { name: '无线蓝牙耳机', description: '高品质音质,30小时续航', imgUrl: 'https://cdn.example.com/product1.jpg', sku: 'HEADPHONE-BT-001', unitPrice: '99.99', number: '1', virtualProduct: 'N' }, { name: '音乐会员月卡', description: '畅听千万首正版音乐', imgUrl: 'https://cdn.example.com/product2.jpg', sku: 'VIP-MUSIC-1M', unitPrice: '15.00', number: '1', virtualProduct: 'Y' } ] ``` ### 4. 创建支付元素 #### 4.1 Apple Pay 按钮 ```javascript:line-numbers title="src/apple-pay.js" const applePay = await PingPongSDK.createElement('applePayButton', { buttonType: 'buy', // 按钮类型: buy | plain buttonColor: 'black', // 按钮颜色: black | white | white-outline style: { width: '100%', height: '40px', borderRadius: '4px' }, payDiscount: { // 营销活动配置(可选) activityNo: 'EEE', costAmount: '19.99', // 原始金额 discountAmount: '2.00' // 折扣金额 } }); ``` #### 4.2 Google Pay 按钮 ```javascript:line-numbers title="src/google-pay.js" const googlePay = await PingPongSDK.createElement('googlePayButton', { buttonType: 'buy', // 按钮类型: buy | subscribe buttonColor: 'black', // 按钮颜色: black | white style: { width: '100%', height: '40px', borderRadius: '4px' }, payDiscount: { activityNo: 'EEE', costAmount: '19.99', discountAmount: '2.00' } }); ``` #### 4.3 PayPal 按钮 ```javascript:line-numbers title="src/paypal.js" const paypal = await PingPongSDK.createElement('paypalButton', { buttonType: 'buttons', // buttons | marks | card-fields | funding-eligibility style: { borderRadius: 4, color: 'gold', // gold | blue | silver | white | black height: 40, label: 'paypal', // paypal | checkout | buynow | pay | installment | subscribe | donate layout: 'vertical', // vertical | horizontal shape: 'rect' // rect | pill | sharp } }); // PayPal 不需要监听 completed 事件 // 当支付完成时,SDK 会发起重定向到 merchantResultUrl ``` ### 5. 事件监听 所有支付元素都支持统一的事件模型: ```javascript:line-numbers title="src/event-listeners.js" // 监听 ready 事件 applePay.on('ready', () => { console.log('Apple Pay 已渲染'); }); // 监听 success 事件 applePay.on('success', (event) => { console.log('Apple Pay 支付完成', event.detail); // event.detail 包含 transactionId 等信息 }); // 监听 error 事件 applePay.on('error', (event) => { console.error('Apple Pay 错误', event.detail); // event.detail 包含 code 和 message }); // 监听 cancel 事件 applePay.on('cancel', () => { console.log('Apple Pay 用户取消'); }); ``` ### 6. 挂载与卸载 ```javascript:line-numbers title="src/lifecycle.js" // 挂载到指定容器 applePay.mount('#apple-pay-container'); // 卸载元素 applePay.unmount(); ``` ## API 参考 ### PingPongSDK.init() 初始化 SDK 配置。 **参数:** ::::: field-group :::: field name="mode" type="string" required `Payment` 或 `Vault` :::: :::: field name="env" type="string" required `sandbox` 或 `production` :::: :::: field name="amount" type="string" required 交易金额 :::: :::: field name="currency" type="string" required 交易币种 :::: :::: field name="country" type="string" required 国家/地区代码 如 `US`、`CN`、`UK` 等 :::: :::: field name="accId" type="string" required 商户账户 ID :::: :::: field name="locale" type="string" required 界面语言 :::: :::: field name="region" type="string" optional default="fra" `sg` 或 `fra` :::: :::: field name="sdkAccessToken" type="string" required SDK 访问凭证 :::: :::: field name="merchantResultUrl" type="string" required 支付完成跳转地址 :::: :::: field name="createOrder" type="Function" optional mode 为 `Payment` 时必传。该函数接收一个包含 `payMethod` 的对象参数,表示用户选择的支付方式 :::: :::: field name="goods" type="Array" required 商品信息数组 :::: :::: field name="biztype" type="string" optional 业务类型 可选值: `CodeGrant` :::: :::: field name="recurringInfoDTO" type="Object" optional ApplePay 签约必传 :::: ::::: ### PingPongSDK.createElement() 创建支付元素实例。 **参数:** ::::: field-group :::: field name="type" type="string" required `applePayButton`、`googlePayButton`、`paypalButton` :::: :::: field name="options" type="object" required 元素配置参数 :::: ::::: **返回:** Promise\ ### element.on() 注册事件监听器。 **支持的事件:** ::::: field-group :::: field name="ready" type="Event" 元素初始化完成 :::: :::: field name="success" type="Event" 支付成功 :::: :::: field name="error" type="Event" 支付失败 :::: :::: field name="cancel" type="Event" 用户取消 :::: ::::: ### element.off() 移除事件监听器。 ### element.mount() 将支付元素挂载到 DOM。 **参数:** ::::: field-group :::: field name="selector" type="string" required CSS 选择器 :::: ::::: ### element.unmount() 从 DOM 中卸载元素,释放资源。 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/integrate/sdk-v4-2/index.md description: >- 本方案专为已采用 OnePage Checkout(一页结账)模式的商户设计,提供可嵌入式的支付组件,无缝集成到您现有的结账页面中。无需改变原有结账流程,即可快速接入 PingPong 支付能力,支持多种主流支付方式,覆盖欧洲、新加坡等地区。 --- ## 什么是 OnePage Checkout? OnePage Checkout 是一种现代化的电子商务结账模式,将传统分散在多个页面的结账流程(如:购物车 → 填写配送信息 → 选择支付方式 → 确认订单)整合到单个页面上。用户可以在一个页面内完成所有结账步骤,无需页面跳转,大大简化了购物流程。 ::: tip 本方案的设计理念 本 SDK 方案专门为适配 **OnePage Checkout 结账页面**而设计。如果您的电商网站已经采用了一页结账模式,本方案可以将 PingPong 支付组件无缝嵌入到您现有的结账页面中,与地址填写、配送选择等模块并列展示,保持用户体验的一致性,无需重构您的结账流程。 ::: ### 主要优势 **提升用户体验** * 减少页面加载和跳转,提高结账效率 * 用户可以实时查看和修改订单信息 * 界面简洁直观,降低购物车放弃率 **提高转化率** * 简化流程意味着更少的操作步骤和潜在的流失点 * 用户完成购买的路径更短、更直接 * 特别适合移动端用户,响应式设计更友好 ### 核心功能模块 典型的一页结账通常包含以下模块: * **地址信息**:配送地址填写和选择 * **配送方式**:可选的配送选项和费用 * **支付方式**:各种支付选项(信用卡、PayPal、支付宝等) * **订单摘要**:商品列表、价格、总计等 * **优惠券/折扣码**:输入优惠信息 ### 实施建议 1. **渐进式设计**:采用折叠式设计,按需展开各个模块 2. **表单验证**:实时验证用户输入,减少错误 3. **访客结账**:允许用户无需注册即可购买 4. **保存信息**:为登录用户自动保存地址和支付信息 5. **安全认证**:确保 PCI DSS 合规,显示安全标识 ### 适用场景 * 移动端购物平台 * 追求高转化率的电商网站 * 订阅制服务 * 数字产品销售 ## SDK集成流程 ```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' } }}%% sequenceDiagram participant Merchant as 🏪 商户后端 participant Frontend as 💻 商户前端 participant SDK as 📦 JS-SDK participant PP as 🔄 PingPong服务端 Note over Merchant, PP: 🚀 SDK集成与支付流程 Note over Merchant, Frontend: 📋 准备阶段:• 获取访问凭证• 引入SDK脚本 Merchant->>+PP: 1️⃣ 获取sdkAccessToken Note right of PP: 验证商户身份生成访问凭证 PP-->>-Merchant: 返回sdkAccessToken Merchant->>Frontend: 2️⃣ 传递sdkAccessToken到前端 Frontend->>Frontend: 3️⃣ 引入JS-SDK脚本 Note right of Frontend: CDN加载:沙箱/生产环境 Frontend->>+SDK: 4️⃣ 初始化收银台 PingPong.Checkout.create() Note right of SDK: 参数包含:• amount, currency• tradeCountry• sdkAccessToken• paymentMethods SDK->>SDK: 5️⃣ 渲染收银台界面 SDK-->>-Frontend: 收银台准备就绪 opt 🔄 [动态更新 - 可选] Note over Frontend, SDK: 🔧 更新收银台要素:• 金额变化• 国家变化 Frontend->>+SDK: updateCheckoutHook({amount, tradeCountry}) SDK->>SDK: 更新收银台显示 SDK-->>-Frontend: 更新完成 end Note over Frontend, PP: 💳 支付流程开始 Frontend->>+SDK: 6️⃣ 用户点击支付按钮 opt 🔍 [支付前检验 - 可选] SDK->>+Frontend: 7️⃣ 触发beforeCheckoutHook Note right of Frontend: 业务逻辑:• 库存检查• 埋点上报• 订单创建 Frontend->>+Merchant: 调用商户接口 Merchant-->>-Frontend: 返回订单token Frontend-->>-SDK: 返回处理结果 end SDK->>+PP: 8️⃣ 发起支付请求 Note right of PP: 调用下单接口处理支付逻辑 PP->>PP: 9️⃣ 处理支付 Note right of PP: • 风控检查• 支付路由• 第三方调用 alt ✅ [支付成功] PP-->>SDK: 🎉 支付成功 SDK-->>-Frontend: 支付完成回调 Note over Frontend: 页面跳转或显示成功信息 else ❌ [支付失败] PP-->>SDK: ❌ 支付失败 SDK->>+Frontend: 🚨 触发checkoutFailedHook Note right of Frontend: 自定义错误处理:• 错误提醒• 日志记录• 重试逻辑 Frontend-->>-SDK: 错误处理完成 SDK-->>Frontend: 显示错误信息 end Note over Merchant, PP: 🎯 SDK集成流程完成 ``` # 接入流程 ## 1. 获取 sdkAccessToken 接口 商户后端系统通过获取 sdkAccessToken 接口 得到JS-SDK访问凭证(token),该凭证用于前端JS-SDK的初始化调用。 ## 2. 引入Javascript-SDK 复制以下代码,通过CDN地址引入 PingPongCheckout Javascript-SDK ::: code-tabs @tab 🧪 沙箱环境 ```html ``` @tab 🇪🇺 FRA 生产环境 ```html ``` @tab 🇸🇬 SG 生产环境 ```html ``` @tab 🇺🇸 US 生产环境 ```html ``` ::: ### 3. 初始化收银台 将 `pp-checkout` 标签插入 `html` `body` 中 ```html:title="components/checkout.html" :line-numbers ``` 调用 `PingPong.Checkout.create` 完成初始化 #### 入参 ::::: field-group :::: field name="amount" type="String" required 交易金额 该交易仅用于收银台展示,后续金额变更需调用 `updateCheckoutHook` 函数进行更新 :::: :::: field name="currency" type="String" required 交易币种 :::: :::: field name="tradeCountry" type="String" required 用于指定 PingPong 收银台国家 后续国家变更需调用 `updateCheckoutHook` 函数进行更新 :::: :::: field name="sdkAccessToken" type="String" required JS-SDK 访问凭证 :::: :::: field name="originalPay" type="Boolean" optional default="true" 控制是否使用默认的 PingPong 支付按钮 若将其设置为 `false`,则表示不使用内置支付按钮。此时,需要在页面内自定义支付按钮点击事件中调用 `PingPong.Checkout.pay.run()` 方法来触发支付流程。 :::: :::: field name="paymentMethods" type="String\[]" optional 指定支付方式列表,内嵌收银台会根据指定的支付方式进行展示 传入的支付方式将与该 `accId` 下配置的支付方式进行交集运算。支付方式的展示顺序将根据传入数组的顺序进行排列。 :::: :::: field name="useTabMode" type="Boolean" optional default="true" 控制是否展示支付方式选项框 当设置为 `false` 时,如果商户仅有卡支付配置,将不展示选项框,直接显示支付表单。适用于简化用户体验的场景。 :::: :::: field name="goods" type="Array" optional 商品列表,包含以下子字段 :::: :::: field-group goods 子字段 ::: field name="goods.description" type="String" optional 商品描述 ::: ::: field name="goods.imgUrl" type="String" optional 商品图片 URL ::: ::: field name="goods.name" type="String" required 商品名称 ::: ::: field name="goods.number" type="String" required 商品数量 ::: ::: field name="goods.sku" type="String" optional 商品 SKU 编码 ::: ::: field name="goods.unitPrice" type="String" required 商品单价 ::: ::: field name="goods.virtualProduct" type="String" optional default="N" 是否为虚拟商品 `Y` - 虚拟商品,`N` - 实物商品 ::: :::: :::: field name="bizType" type="String" optional ApplePay 绑卡业务参数 ApplePay 交易必传,固定值: `CodeGrant` :::: :::: field name="recurringInfoDTO" type="Object" optional 配置 Recurring 付款(ApplePay 交易必传),包含以下子字段 :::: :::: field-group recurringInfoDTO 子字段 ::: field name="recurringInfoDTO.recurringPaymentStartDate" type="Date" optional 首次付款日期 eg: `"2024-06-01 00:00:00"` ::: ::: field name="recurringInfoDTO.recurringPaymentIntervalUnit" type="String" optional 表示年、月、日、时等日历单位的类型 enum: `year` / `month` / `day` / `hour` / `minute`,eg: `"month"` ::: ::: field name="recurringInfoDTO.recurringPaymentIntervalCount" type="String" optional 构成总支付间隔的间隔单位数 eg: `"6"` ::: ::: field name="recurringInfoDTO.recurringPaymentEndDate" type="Date" optional 最后付款日期 eg: `"2024-12-01 00:00:00"` ::: :::: ::::: ```js:line-numbers // 创建 PingPong 收银台 PingPong.Checkout.create({ amount: '1.08', // 交易金额 currency: 'USD', // 交易币种 tradeCountry: 'US', // 交易国家 originalPay: true, useTabMode: false, // 当仅有卡支付时,隐藏选项框 sdkAccessToken, // SDK访问令牌 paymentMethods: ['VISA', 'Klarna'], goods: [{ description: 'short legs', imgUrl: 'http://pic.bizhi360.com/bpic/30/5230.jpg', name: '한국어/English', number: '1', sku: '20230524001', unitPrice: '1', virtualProduct: 'N' }], // ApplePay 支付参数 bizType: 'CodeGrant', // ApplePay 交易必传 recurringInfoDTO: { recurringPaymentStartDate: "2024-06-01 00:00:00", recurringPaymentIntervalUnit: "month", recurringPaymentIntervalCount: "6", recurringPaymentEndDate: "2024-12-01 00:00:00" }, }) ``` #### 自定义支付按钮(可选) ```js:line-numbers title="src/config/payment.js" // 自定义支付按钮配置 // 初始化参数中 originalPay 为 false 时, 需自定义支付按钮点击事件 document.querySelector('#pay').onclick = function () { PingPong.Checkout.pay.run() // 手动触发支付 } ``` #### 事件监听(可选) SDK 支持监听初始化过程中的 ready 和 error 事件,方便外部进行状态管理和错误处理。 ```js:line-numbers title="src/config/payment.js" // 监听 SDK 初始化事件 // 监听初始化成功事件 document.querySelector('pp-checkout').addEventListener('ready', (e) => { console.log('SDK初始化成功'); // 初始化成功回调 // 可以在此处执行初始化完成后的逻辑 }); // 监听初始化失败事件 document.querySelector('pp-checkout').addEventListener('error', (e) => { console.log('SDK初始化失败', e.detail); // 错误信息 // 可以在此处执行错误处理逻辑,如显示错误提示、重试等 }); ``` **事件说明:** * `ready`: 当 SDK 初始化成功时触发,表示收银台已准备就绪 * `error`: 当 SDK 初始化失败时触发,事件详情包含在 `e.detail` 中 ### 4. 修改金额、国家和商品 在使用全局变量前,请确保Javascript-SDK 加载完成。 #### updateCheckoutHook(可选) `updateCheckoutHook` 用来更新收银台要素。 ##### ts 类型 ```ts:line-numbers title="src/types/hooks.ts" // updateCheckoutHook 类型定义 PingPong.Checkout.updateCheckoutHook: ({ amount?: string, tradeCountry?: string, goods?: Goods[] }) => void ``` ##### 使用说明 > ⚠️ **重要**:该方法采用**部分更新**机制,只需传入发生变化的字段即可,无需传入其他字段。 | 场景 | 传入参数 | 示例代码 | |------|----------|----------| | 国家发生变化 | `tradeCountry` | `PingPong.Checkout.updateCheckoutHook({ tradeCountry: newCountry });` | | 金额发生变化 | `amount` | `PingPong.Checkout.updateCheckoutHook({ amount: newAmount });` | | 商品发生变化 | `goods` | `PingPong.Checkout.updateCheckoutHook({ goods: newGoods });` | ##### 正确示例 ```js:line-numbers title="src/config/update.js" // 场景1: 用户切换国家 - 只传 tradeCountry const newCountry = 'US'; PingPong.Checkout.updateCheckoutHook({ tradeCountry: newCountry }); // 场景2: 用户使用优惠券后金额变化 - 只传 amount const newAmount = '99.99'; PingPong.Checkout.updateCheckoutHook({ amount: newAmount }); // 场景3: 商品信息变更 - 只传 goods const newGoods = [{ description: 'updated description', imgUrl: 'http://pic.bizhi360.com/bpic/30/5230.jpg', name: 'Updated Product Name', number: '2', sku: '20230524001', unitPrice: '2', virtualProduct: 'N' }]; PingPong.Checkout.updateCheckoutHook({ goods: newGoods }); ``` ##### ❌ 错误示例 > 以下方式**不推荐**,传入不必要的字段或 null 值: ```js:line-numbers title="src/config/update-error.js" // ❌ 错误: 不需要传入未变化的字段,也不需要传入 null PingPong.Checkout.updateCheckoutHook({ amount: newAmount ? newAmount : null, tradeCountry: newCountry ? newCountry : null, goods: newGoods ? newGoods : null }); // ❌ 错误: 只更新金额时,不需要同时传入 country 和 goods PingPong.Checkout.updateCheckoutHook({ amount: '99.99', tradeCountry: 'US', // 未变化的字段,不需要传 goods: [] // 未变化的字段,不需要传 }); ``` ### 5. 下单前检验 #### beforeCheckoutHook(可选) type: ```ts:line-numbers title="src/types/hooks.ts" // beforeCheckoutHook 类型定义 (({payMethod}) => void) | (({payMethod}) => Promise) ``` `beforeCheckoutHook` 用来设置发起支付请求前的钩子函数。 当你在用户点击支付按钮,发起支付请求前,需要执行你自己的业务逻辑,如:上报埋点、检查库存等,可以设置该钩子函数。 该函数接收一个包含 `payMethod` 的对象参数,表示用户选择的支付方式。 该函数可以返回一个`Promise`,后续的支付流程会等待该 Promise 状态变为 Fulfilled 后才会继续执行。如果你想在 Promise 状态为 Rejected 或者异步结果不满足你的业务条件时,可以抛出异常,SDK在捕获到异常后中断支付流程。 ```js:line-numbers title="src/config/payment.js" PingPong.Checkout.beforeCheckoutHook = async ({payMethod}) => { console.log('用户选择的支付方式:', payMethod); return fetch('/api/requestInventory').then(res => { const {inventoryQuantity} = res; if (inventoryQuantity < MIN_QUANTITY) { throw new Error('库存不足,需中断交易') } }).catch((error) => { throw new Error('接口异常,需中断交易') }) }; ``` ##### ts 类型 ```ts:line-numbers title="src/types/hooks.ts" // beforeCheckoutHook 返回类型定义 PingPong.Checkout.beforeCheckoutHook: (({payMethod}) => string) | (({payMethod}) => Promise) ``` ### 6. 下单 点击支付按钮后,调用下单接口支付去完成支付 ### 7. 错误处理 #### checkoutFailedHook(可选) type: ```ts:line-numbers title="src/types/hooks.ts" // checkoutFailedHook 类型定义 (() => void) | (() => Promise) ``` checkoutFailedHook 接收以下参数: ```ts:line-numbers title="src/types/hooks.ts" // checkoutFailedHook 参数类型定义 (code: string, message: string) => void | Promise; // code: string - 错误码 // message: string - 错误消息 ``` `checkoutFailedHook` 用来自定义错误逻辑 当用户支付失败时,PingPong 默认会弹窗提示用户失败原因。如果你想自定义弹窗 UI 或文本,可以设置该钩子函数。 该函数可以返回一个 Promise。如果返回 Promise,后续的流程会等待该 Promise 状态变为 Fulfilled 后才继续执行 ```js:line-numbers title="src/config/payment.js" PingPong.Checkout.checkoutFailedHook = (code: string, message: string) => { notification.open({ message: 'Error title', description: `${code}: ${message}` }) }; ``` ## 使用示例: ::: code-tree title="PingPong Checkout 集成示例" height="500px" ```html title="examples/onepage/pages/checkout.html" PingPong Checkout Demo Billing Information Amount: Country: United States United Kingdom Germany France Shipping Information Coupon Code: Pay Now ``` ```css title="examples/onepage/assets/css/checkout.css" /** * PingPong Checkout 样式文件 * 负责结账页面的所有样式定义 */ /* ========== 变量定义 ========== */ :root { --primary-color: #007bff; --primary-hover: #0056b3; --success-color: #28a745; --error-color: #dc3545; --warning-color: #ffc107; --border-color: #e1e5e9; --background-light: #f8f9fa; --text-primary: #333; --text-secondary: #666; --shadow-sm: 0 2px 4px rgba(0,0,0,0.1); --shadow-md: 0 2px 8px rgba(0,0,0,0.1); --shadow-lg: 0 4px 12px rgba(0,123,255,0.3); --border-radius: 8px; --border-radius-sm: 4px; --border-radius-lg: 12px; --transition: all 0.3s ease; } /* ========== 基础样式重置 ========== */ * { box-sizing: border-box; } body { margin: 0; padding: 20px; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, sans-serif; background-color: var(--background-light); color: var(--text-primary); line-height: 1.6; } /* ========== 主容器 ========== */ .checkout-container { max-width: 800px; margin: 0 auto; padding: 24px; background: white; border-radius: var(--border-radius); box-shadow: var(--shadow-md); } /* ========== 结账区域 ========== */ .checkout-section { margin-bottom: 32px; } .billing-form, .shipping-form { margin-bottom: 24px; } .billing-form h3, .shipping-form h3 { margin: 0 0 16px 0; color: var(--text-primary); font-size: 18px; font-weight: 600; } /* ========== 表单组件 ========== */ .form-group { margin-bottom: 16px; } .form-group label { display: block; margin-bottom: 6px; font-weight: 600; color: var(--text-primary); font-size: 14px; } .form-group input, .form-group select { width: 100%; max-width: 320px; padding: 10px 12px; border: 1px solid var(--border-color); border-radius: var(--border-radius-sm); font-size: 14px; transition: border-color 0.2s ease, box-shadow 0.2s ease; background: white; } .form-group input:focus, .form-group select:focus { outline: none; border-color: var(--primary-color); box-shadow: 0 0 0 3px rgba(0,123,255,0.1); } .form-group input::placeholder { color: #999; } /* ========== PingPong 收银台 ========== */ .pingpong-checkout { margin: 24px 0; padding: 20px; background: white; border: 1px solid var(--border-color); border-radius: var(--border-radius); box-shadow: var(--shadow-sm); } /* ========== 支付区域 ========== */ .payment-section { text-align: center; padding: 24px; background: linear-gradient(135deg, #f8f9ff 0%, #ffffff 100%); border-radius: var(--border-radius); border: 1px solid var(--border-color); } /* ========== 优惠券区域 ========== */ .coupon-section { margin-bottom: 20px; } .coupon-section label { display: block; margin-bottom: 8px; font-weight: 600; color: var(--text-primary); font-size: 14px; } .coupon-section input { width: 100%; max-width: 280px; padding: 12px 16px; border: 2px solid var(--border-color); border-radius: var(--border-radius); font-size: 14px; transition: var(--transition); background: white; } .coupon-section input:focus { outline: none; border-color: var(--primary-color); box-shadow: 0 0 0 3px rgba(0,123,255,0.1); } /* ========== 支付按钮 ========== */ .pay-button { background: linear-gradient(135deg, var(--primary-color) 0%, #0056b3 100%); color: white; border: none; padding: 16px 48px; border-radius: var(--border-radius); cursor: pointer; font-size: 16px; font-weight: 700; transition: var(--transition); min-width: 200px; position: relative; overflow: hidden; text-transform: uppercase; letter-spacing: 0.5px; } .pay-button:hover { transform: translateY(-2px); box-shadow: var(--shadow-lg); background: linear-gradient(135deg, #0056b3 0%, var(--primary-hover) 100%); } .pay-button:active { transform: translateY(0); box-shadow: var(--shadow-md); } .pay-button:disabled { background: #6c757d; cursor: not-allowed; transform: none; box-shadow: none; opacity: 0.7; } .pay-button.loading { color: transparent; pointer-events: none; } .pay-button.loading::after { content: ''; position: absolute; width: 20px; height: 20px; top: 50%; left: 50%; margin-left: -10px; margin-top: -10px; border: 2px solid white; border-radius: 50%; border-top-color: transparent; animation: spin 1s ease-in-out infinite; } /* ========== 消息提示 ========== */ .message { padding: 12px 16px; border-radius: var(--border-radius-sm); margin: 16px 0; font-size: 14px; font-weight: 500; border-left: 4px solid; } .message.error { background: #f8d7da; border-left-color: var(--error-color); color: #721c24; } .message.success { background: #d4edda; border-left-color: var(--success-color); color: #155724; } .message.warning { background: #fff3cd; border-left-color: var(--warning-color); color: #856404; } .message.info { background: #d1ecf1; border-left-color: var(--primary-color); color: #0c5460; } /* ========== 加载状态 ========== */ .loading-overlay { position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: rgba(255,255,255,0.8); display: flex; align-items: center; justify-content: center; z-index: 9999; } .loading-overlay .spinner { width: 40px; height: 40px; border: 4px solid var(--border-color); border-top-color: var(--primary-color); border-radius: 50%; animation: spin 1s linear infinite; } /* ========== 动画定义 ========== */ @keyframes spin { to { transform: rotate(360deg); } } @keyframes fadeIn { from { opacity: 0; transform: translateY(-10px); } to { opacity: 1; transform: translateY(0); } } @keyframes slideIn { from { transform: translateX(-100%); } to { transform: translateX(0); } } /* ========== 响应式设计 ========== */ @media (max-width: 768px) { body { padding: 10px; } .checkout-container { padding: 16px; border-radius: var(--border-radius-sm); } .form-group input, .form-group select { max-width: 100%; } .coupon-section input { max-width: 100%; } .pay-button { width: 100%; min-width: unset; padding: 14px 24px; } .pingpong-checkout { padding: 16px; } } @media (max-width: 480px) { .checkout-container { padding: 12px; } .payment-section { padding: 20px 16px; } } /* ========== 打印样式 ========== */ @media print { .pay-button, .loading-overlay { display: none !important; } .checkout-container { box-shadow: none; border: 1px solid #ddd; } } /* ========== 可访问性增强 ========== */ @media (prefers-reduced-motion: reduce) { * { animation-duration: 0.01ms !important; animation-iteration-count: 1 !important; transition-duration: 0.01ms !important; } } /* 高对比度模式支持 */ @media (prefers-contrast: high) { :root { --border-color: #000; --text-primary: #000; --background-light: #fff; } } /* ========== 工具类 ========== */ .sr-only { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0,0,0,0); white-space: nowrap; border: 0; } .text-center { text-align: center !important; } .text-left { text-align: left !important; } .text-right { text-align: right !important; } .mb-0 { margin-bottom: 0 !important; } .mb-1 { margin-bottom: 8px !important; } .mb-2 { margin-bottom: 16px !important; } .mb-3 { margin-bottom: 24px !important; } .mb-4 { margin-bottom: 32px !important; } ``` ```javascript title="examples/onepage/js/config/app-config.js" /** * 应用配置文件 * 包含所有应用级别的配置常量 */ /** * PingPong SDK 配置 */ export const PINGPONG_CONFIG = { // SDK 基础配置 amount: '1.08', currency: 'USD', tradeCountry: 'US', originalPay: false, useTabMode: true, sdkAccessToken: 'your-sdk-access-token-here', paymentMethods: ['VISA', 'MasterCard', 'Klarna'], goods: [{ description: 'short legs', imgUrl: 'http://pic.bizhi360.com/bpic/30/5230.jpg', name: '한국어/English', number: '1', sku: '20230524001', unitPrice: '1', virtualProduct: 'N' }], // ApplePay 配置(可选) applePay: { bizType: 'CodeGrant', recurringInfoDTO: { recurringPaymentStartDate: '', recurringPaymentIntervalUnit: 'month', recurringPaymentIntervalCount: '', recurringPaymentEndDate: '' } } }; /** * API 端点配置 */ export const API_ENDPOINTS = { // PingPong API getAccessToken: '/api/auth/sdk-token', createOrder: '/api/orders/create', validateInventory: '/api/inventory/validate', // 业务 API validateCoupon: '/api/coupons/validate', logError: '/api/logs/error', // 支付相关 paymentStatus: '/api/payments/status', refundPayment: '/api/payments/refund' }; /** * 国家货币映射配置 */ export const COUNTRY_CURRENCY_MAP = { 'US': 'USD', 'GB': 'GBP', 'DE': 'EUR', 'FR': 'EUR', 'IT': 'EUR', 'ES': 'EUR', 'CA': 'CAD', 'AU': 'AUD', 'JP': 'JPY', 'CN': 'CNY' }; /** * 错误代码映射配置 */ export const ERROR_MESSAGES = { 'PAYMENT_DECLINED': '支付被拒绝,请检查卡片信息或尝试其他支付方式', 'INSUFFICIENT_FUNDS': '余额不足,请使用其他支付方式', 'INVALID_CARD': '卡片信息无效,请检查后重试', 'CARD_EXPIRED': '卡片已过期,请使用其他卡片', 'NETWORK_ERROR': '网络连接异常,请检查网络后重试', 'TIMEOUT': '支付超时,请重试', 'FRAUD_DETECTED': '安全验证失败,请联系客服', 'CURRENCY_NOT_SUPPORTED': '不支持该货币,请选择其他货币', 'AMOUNT_INVALID': '支付金额无效', 'AMOUNT_TOO_LOW': '支付金额过低', 'AMOUNT_TOO_HIGH': '支付金额过高', 'MERCHANT_ERROR': '商户系统错误,请联系客服', 'SDK_TOKEN_EXPIRED': '访问凭证已过期,请刷新页面重试', 'SDK_TOKEN_INVALID': '访问凭证无效,请联系客服' }; /** * 应用常量配置 */ export const APP_CONSTANTS = { // 防抖延迟时间(毫秒) DEBOUNCE_DELAY: { AMOUNT_INPUT: 500, COUNTRY_CHANGE: 0, COUPON_INPUT: 1000 }, // 验证规则 VALIDATION: { MIN_AMOUNT: 0.01, MAX_AMOUNT: 999999.99, COUPON_LENGTH_MIN: 3, COUPON_LENGTH_MAX: 50 }, // 超时配置(毫秒) TIMEOUTS: { PAYMENT: 300000, // 5分钟 API_CALL: 30000, // 30秒 MESSAGE_DISPLAY: { ERROR: 5000, SUCCESS: 3000, WARNING: 4000 } }, // 重试配置 RETRY: { MAX_ATTEMPTS: 3, DELAY_BASE: 1000 } }; /** * 开发环境配置 */ export const DEV_CONFIG = { isDevelopment: process.env.NODE_ENV === 'development', enableDebugLogs: true, mockAPI: false, mockCouponCode: 'SAVE10' // 模拟有效的优惠券代码 }; /** * 默认导出所有配置 */ export default { pingpong: PINGPONG_CONFIG, api: API_ENDPOINTS, countryCurrency: COUNTRY_CURRENCY_MAP, errorMessages: ERROR_MESSAGES, constants: APP_CONSTANTS, dev: DEV_CONFIG }; ``` ```javascript title="examples/onepage/js/services/pingpong-service.js" /** * PingPong SDK 服务 * 负责与 PingPong SDK 的所有交互 */ import { PINGPONG_CONFIG, ERROR_MESSAGES } from '../config/app-config.js'; /** * PingPong 服务类 */ export class PingPongService { constructor() { this.isInitialized = false; this.eventListeners = new Map(); } /** * 初始化 PingPong Checkout * @param {Object} config - 配置对象 * @returns {Promise} */ async initialize(config = {}) { try { // 检查 SDK 是否已加载 if (typeof PingPong === 'undefined') { throw new Error('PingPong SDK 未加载'); } // 合并配置 const finalConfig = { ...PINGPONG_CONFIG, ...config }; // 初始化收银台 await PingPong.Checkout.create(finalConfig); this.isInitialized = true; this.setupEventListeners(); console.log('✅ PingPong Checkout 初始化成功'); } catch (error) { console.error('❌ PingPong Checkout 初始化失败:', error); throw error; } } /** * 更新收银台参数 * @param {Object} updates - 更新的参数 * @returns {void} */ updateCheckout(updates) { try { if (!this.isInitialized) { throw new Error('PingPong Checkout 未初始化'); } if (!PingPong?.Checkout?.updateCheckoutHook) { throw new Error('PingPong SDK updateCheckoutHook 方法不可用'); } // 验证参数 const validUpdates = this.validateUpdateParams(updates); // 调用 SDK 更新方法 PingPong.Checkout.updateCheckoutHook(validUpdates); console.log('✅ 收银台更新成功:', validUpdates); } catch (error) { console.error('❌ 更新收银台失败:', error); throw error; } } /** * 开始支付流程 * @returns {Promise} */ async startPayment() { try { if (!this.isInitialized) { throw new Error('PingPong Checkout 未初始化'); } if (!PingPong?.Checkout?.pay?.run) { throw new Error('PingPong 支付方法不可用'); } await PingPong.Checkout.pay.run(); console.log('💰 支付流程已启动'); } catch (error) { console.error('❌ 启动支付失败:', error); throw error; } } /** * 设置支付前 Hook * @param {Function} hook - Hook 函数 */ setBeforeCheckoutHook(hook) { if (typeof hook !== 'function') { throw new Error('beforeCheckoutHook 必须是函数'); } PingPong.Checkout.beforeCheckoutHook = hook; console.log('✅ beforeCheckoutHook 设置成功'); } /** * 设置支付失败 Hook * @param {Function} hook - Hook 函数 */ setCheckoutFailedHook(hook) { if (typeof hook !== 'function') { throw new Error('checkoutFailedHook 必须是函数'); } PingPong.Checkout.checkoutFailedHook = hook; console.log('✅ checkoutFailedHook 设置成功'); } /** * 设置事件监听器 */ setupEventListeners() { const checkoutElement = document.querySelector('pp-checkout'); if (checkoutElement) { // 初始化成功事件 checkoutElement.addEventListener('ready', (e) => { console.log('🚀 SDK初始化成功,收银台准备就绪'); this.emit('ready', e.detail); }); // 初始化失败事件 checkoutElement.addEventListener('error', (e) => { console.error('💥 SDK初始化失败:', e.detail); this.emit('error', e.detail); }); console.log('✅ 事件监听器设置完成'); } } /** * 添加自定义事件监听器 * @param {string} event - 事件名称 * @param {Function} callback - 回调函数 */ on(event, callback) { if (!this.eventListeners.has(event)) { this.eventListeners.set(event, []); } this.eventListeners.get(event).push(callback); } /** * 移除事件监听器 * @param {string} event - 事件名称 * @param {Function} callback - 回调函数 */ off(event, callback) { if (this.eventListeners.has(event)) { const listeners = this.eventListeners.get(event); const index = listeners.indexOf(callback); if (index > -1) { listeners.splice(index, 1); } } } /** * 触发事件 * @param {string} event - 事件名称 * @param {*} data - 事件数据 */ emit(event, data) { if (this.eventListeners.has(event)) { this.eventListeners.get(event).forEach(callback => { try { callback(data); } catch (error) { console.error(`事件处理器执行失败 [${event}]:`, error); } }); } } /** * 验证更新参数 * @param {Object} updates - 更新参数 * @returns {Object} 验证后的参数 */ validateUpdateParams(updates) { const validUpdates = {}; // 验证金额 if (updates.amount !== undefined) { const amount = parseFloat(updates.amount); if (isNaN(amount) || amount <= 0) { throw new Error('金额必须是大于0的数字'); } validUpdates.amount = amount.toFixed(2); } // 验证国家 if (updates.tradeCountry !== undefined) { if (!updates.tradeCountry || typeof updates.tradeCountry !== 'string') { throw new Error('国家代码必须是有效的字符串'); } validUpdates.tradeCountry = updates.tradeCountry; } // 验证货币 if (updates.currency !== undefined) { if (!updates.currency || typeof updates.currency !== 'string') { throw new Error('货币代码必须是有效的字符串'); } validUpdates.currency = updates.currency; } return validUpdates; } /** * 获取 SDK 版本信息 * @returns {string} SDK 版本 */ getVersion() { return typeof PingPong !== 'undefined' ? PingPong.version : 'unknown'; } /** * 检查 SDK 是否可用 * @returns {boolean} SDK 是否可用 */ isSDKAvailable() { return typeof PingPong !== 'undefined' && typeof PingPong.Checkout !== 'undefined'; } /** * 销毁服务 */ destroy() { this.eventListeners.clear(); this.isInitialized = false; console.log('🔧 PingPong 服务已销毁'); } } // 创建单例实例 export const pingpongService = new PingPongService(); export default pingpongService; ``` ```javascript title="examples/onepage/js/utils/ui-utils.js" /** * UI 工具函数 * 负责界面操作和状态管理 */ import { ERROR_MESSAGES, APP_CONSTANTS } from '../config/app-config.js'; /** * 消息管理器 */ export class MessageManager { constructor() { this.activeMessages = new Set(); } /** * 显示消息 * @param {string} message - 消息内容 * @param {string} type - 消息类型 (error, success, warning, info) * @param {number} duration - 显示时长(毫秒) */ show(message, type = 'info', duration = null) { // 移除现有消息 this.clear(); // 创建消息元素 const messageEl = document.createElement('div'); messageEl.className = `message ${type}`; messageEl.textContent = message; // 设置 ARIA 属性 messageEl.setAttribute('role', 'alert'); messageEl.setAttribute('aria-live', 'polite'); // 插入到页面 const container = document.querySelector('.checkout-container'); if (container) { container.insertBefore(messageEl, container.firstChild); } else { document.body.insertBefore(messageEl, document.body.firstChild); } this.activeMessages.add(messageEl); // 自动移除 const timeout = duration || this.getDefaultDuration(type); setTimeout(() => { this.remove(messageEl); }, timeout); return messageEl; } /** * 移除消息 * @param {HTMLElement} messageEl - 消息元素 */ remove(messageEl) { if (messageEl && messageEl.parentNode) { messageEl.parentNode.removeChild(messageEl); this.activeMessages.delete(messageEl); } } /** * 清除所有消息 */ clear() { this.activeMessages.forEach(messageEl => { this.remove(messageEl); }); } /** * 获取默认显示时长 * @param {string} type - 消息类型 * @returns {number} 时长(毫秒) */ getDefaultDuration(type) { return APP_CONSTANTS.TIMEOUTS.MESSAGE_DISPLAY[type.toUpperCase()] || 3000; } /** * 显示错误消息 * @param {string} message - 错误消息 * @param {number} duration - 显示时长 */ error(message, duration) { return this.show(message, 'error', duration); } /** * 显示成功消息 * @param {string} message - 成功消息 * @param {number} duration - 显示时长 */ success(message, duration) { return this.show(message, 'success', duration); } /** * 显示警告消息 * @param {string} message - 警告消息 * @param {number} duration - 显示时长 */ warning(message, duration) { return this.show(message, 'warning', duration); } /** * 显示信息消息 * @param {string} message - 信息消息 * @param {number} duration - 显示时长 */ info(message, duration) { return this.show(message, 'info', duration); } } /** * 加载状态管理器 */ export class LoadingManager { constructor() { this.loadingOverlay = null; this.loadingButtons = new Map(); } /** * 显示全屏加载 * @param {string} message - 加载消息 */ showGlobal(message = 'Loading...') { if (this.loadingOverlay) return; this.loadingOverlay = document.createElement('div'); this.loadingOverlay.className = 'loading-overlay'; this.loadingOverlay.innerHTML = ` ${message} `; document.body.appendChild(this.loadingOverlay); } /** * 隐藏全屏加载 */ hideGlobal() { if (this.loadingOverlay && this.loadingOverlay.parentNode) { this.loadingOverlay.parentNode.removeChild(this.loadingOverlay); this.loadingOverlay = null; } } /** * 显示按钮加载状态 * @param {HTMLElement} button - 按钮元素 * @param {string} loadingText - 加载时显示的文本 */ showButtonLoading(button, loadingText = 'Processing...') { if (!button || this.loadingButtons.has(button)) return; // 保存原始状态 const originalText = button.textContent; const originalDisabled = button.disabled; // 设置加载状态 button.disabled = true; button.textContent = loadingText; button.classList.add('loading'); // 保存状态 this.loadingButtons.set(button, { originalText, originalDisabled, loadingText }); } /** * 隐藏按钮加载状态 * @param {HTMLElement} button - 按钮元素 */ hideButtonLoading(button) { if (!button || !this.loadingButtons.has(button)) return; const savedState = this.loadingButtons.get(button); // 恢复原始状态 button.disabled = savedState.originalDisabled; button.textContent = savedState.originalText; button.classList.remove('loading'); // 清除保存的状态 this.loadingButtons.delete(button); } /** * 隐藏所有按钮加载状态 */ hideAllButtonLoading() { this.loadingButtons.forEach((_, button) => { this.hideButtonLoading(button); }); } } /** * 表单验证工具 */ export class FormValidator { constructor() { this.rules = new Map(); } /** * 添加验证规则 * @param {string} fieldId - 字段ID * @param {Array} rules - 验证规则数组 */ addRule(fieldId, rules) { this.rules.set(fieldId, rules); } /** * 验证单个字段 * @param {string} fieldId - 字段ID * @returns {Object} 验证结果 */ validateField(fieldId) { const field = document.getElementById(fieldId); if (!field) { return { valid: false, error: '字段不存在' }; } const rules = this.rules.get(fieldId) || []; const value = field.value.trim(); for (const rule of rules) { const result = rule(value, field); if (!result.valid) { return result; } } return { valid: true }; } /** * 验证整个表单 * @param {Array} fieldIds - 要验证的字段ID数组 * @returns {Object} 验证结果 */ validateForm(fieldIds = []) { const errors = []; const validFields = []; for (const fieldId of fieldIds) { const result = this.validateField(fieldId); if (result.valid) { validFields.push(fieldId); } else { errors.push(`${fieldId}: ${result.error}`); } } return { isValid: errors.length === 0, errors, validFields }; } /** * 清除字段错误状态 * @param {string} fieldId - 字段ID */ clearFieldError(fieldId) { const field = document.getElementById(fieldId); if (field) { field.classList.remove('error'); const errorEl = field.parentNode.querySelector('.field-error'); if (errorEl) { errorEl.remove(); } } } /** * 显示字段错误 * @param {string} fieldId - 字段ID * @param {string} error - 错误信息 */ showFieldError(fieldId, error) { const field = document.getElementById(fieldId); if (!field) return; // 添加错误样式 field.classList.add('error'); // 移除现有错误信息 this.clearFieldError(fieldId); // 添加错误信息 const errorEl = document.createElement('div'); errorEl.className = 'field-error'; errorEl.textContent = error; errorEl.setAttribute('role', 'alert'); field.parentNode.appendChild(errorEl); } } /** * 通用验证规则 */ export const ValidationRules = { required: (message = '此字段为必填项') => (value) => ({ valid: value.length > 0, error: message }), min: (min, message) => (value) => { const num = parseFloat(value); return { valid: !isNaN(num) && num >= min, error: message || `值不能小于 ${min}` }; }, max: (max, message) => (value) => { const num = parseFloat(value); return { valid: !isNaN(num) && num <= max, error: message || `值不能大于 ${max}` }; }, email: (message = '请输入有效的邮箱地址') => (value) => ({ valid: /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(value), error: message }), minLength: (min, message) => (value) => ({ valid: value.length >= min, error: message || `长度不能少于 ${min} 个字符` }), maxLength: (max, message) => (value) => ({ valid: value.length <= max, error: message || `长度不能超过 ${max} 个字符` }), pattern: (regex, message) => (value) => ({ valid: regex.test(value), error: message || '格式不正确' }) }; /** * 防抖函数 * @param {Function} func - 要防抖的函数 * @param {number} delay - 延迟时间(毫秒) * @returns {Function} 防抖后的函数 */ export function debounce(func, delay) { let timeoutId; return function (...args) { clearTimeout(timeoutId); timeoutId = setTimeout(() => func.apply(this, args), delay); }; } /** * 格式化货币 * @param {number} amount - 金额 * @param {string} currency - 货币代码 * @param {string} locale - 地区代码 * @returns {string} 格式化后的货币 */ export function formatCurrency(amount, currency = 'USD', locale = 'en-US') { return new Intl.NumberFormat(locale, { style: 'currency', currency: currency }).format(amount); } // 创建单例实例 export const messageManager = new MessageManager(); export const loadingManager = new LoadingManager(); export const formValidator = new FormValidator(); export default { messageManager, loadingManager, formValidator, ValidationRules, debounce, formatCurrency }; ``` ```javascript:line-numbers:collapsed-lines=10 title="examples/onepage/js/main.js" /** * 主入口文件 * 负责应用初始化和模块协调 */ import { pingpongService } from './services/pingpong-service.js'; import { messageManager, loadingManager, formValidator, debounce, ValidationRules } from './utils/ui-utils.js'; import { PINGPONG_CONFIG, API_ENDPOINTS, COUNTRY_CURRENCY_MAP, ERROR_MESSAGES, APP_CONSTANTS, DEV_CONFIG } from './config/app-config.js'; /** * 主应用类 */ class CheckoutApp { constructor() { this.isInitialized = false; this.currentOrder = null; this.paymentInProgress = false; } /** * 初始化应用 */ async initialize() { try { console.log('🚀 开始初始化 Checkout 应用...'); // 设置表单验证规则 this.setupFormValidation(); // 初始化 PingPong SDK await this.initializePingPong(); // 设置事件监听器 this.setupEventListeners(); // 设置支付 Hooks this.setupPaymentHooks(); this.isInitialized = true; messageManager.success('收银台初始化完成'); console.log('✅ Checkout 应用初始化完成'); } catch (error) { console.error('❌ 应用初始化失败:', error); messageManager.error(`初始化失败: ${error.message}`); } } /** * 设置表单验证规则 */ setupFormValidation() { // 金额验证 formValidator.addRule('amount', [ ValidationRules.required('请输入支付金额'), ValidationRules.min(APP_CONSTANTS.VALIDATION.MIN_AMOUNT, '金额不能小于 0.01'), ValidationRules.max(APP_CONSTANTS.VALIDATION.MAX_AMOUNT, '金额不能大于 999,999.99') ]); // 国家验证 formValidator.addRule('country', [ ValidationRules.required('请选择国家') ]); // 优惠券验证(可选) formValidator.addRule('coupon', [ ValidationRules.minLength(APP_CONSTANTS.VALIDATION.COUPON_LENGTH_MIN, '优惠券代码至少3个字符'), ValidationRules.maxLength(APP_CONSTANTS.VALIDATION.COUPON_LENGTH_MAX, '优惠券代码不能超过50个字符') ]); } /** * 初始化 PingPong SDK */ async initializePingPong() { try { // 获取 SDK 访问令牌 const accessToken = await this.getSDKAccessToken(); // 初始化配置 const config = { ...PINGPONG_CONFIG, sdkAccessToken: accessToken }; await pingpongService.initialize(config); } catch (error) { console.error('PingPong 初始化失败:', error); throw new Error('收银台初始化失败,请刷新页面重试'); } } /** * 设置事件监听器 */ setupEventListeners() { // 金额输入事件 const amountInput = document.getElementById('amount'); if (amountInput) { amountInput.addEventListener('input', debounce(this.handleAmountChange.bind(this), APP_CONSTANTS.DEBOUNCE_DELAY.AMOUNT_INPUT) ); } // 国家选择事件 const countrySelect = document.getElementById('country'); if (countrySelect) { countrySelect.addEventListener('change', this.handleCountryChange.bind(this) ); } // 优惠券输入事件 const couponInput = document.getElementById('coupon'); if (couponInput) { couponInput.addEventListener('input', debounce(this.handleCouponChange.bind(this), APP_CONSTANTS.DEBOUNCE_DELAY.COUPON_INPUT) ); } // 支付按钮点击事件 const payButton = document.getElementById('customPay'); if (payButton) { payButton.addEventListener('click', this.handlePaymentClick.bind(this) ); } // PingPong 事件监听 pingpongService.on('ready', this.handlePingPongReady.bind(this)); pingpongService.on('error', this.handlePingPongError.bind(this)); console.log('✅ 事件监听器设置完成'); } /** * 设置支付 Hooks */ setupPaymentHooks() { // 支付前 Hook pingpongService.setBeforeCheckoutHook(async ({payMethod}) => { console.log('🔍 开始支付前验证...'); console.log('💳 用户选择的支付方式:', payMethod); // 表单验证 const validation = formValidator.validateForm(['amount', 'country']); if (!validation.isValid) { throw new Error(validation.errors.join('; ')); } // 显示加载状态 this.paymentInProgress = true; loadingManager.showButtonLoading( document.getElementById('customPay'), 'Processing Payment...' ); try { // 库存检查 await this.checkInventory(); // 创建订单 const orderToken = await this.createOrder(); console.log('✅ 支付前验证完成'); return orderToken; } catch (error) { this.paymentInProgress = false; loadingManager.hideAllButtonLoading(); throw error; } }); // 支付失败 Hook pingpongService.setCheckoutFailedHook((code, message) => { console.error(`💳 支付失败 [${code}]: ${message}`); this.paymentInProgress = false; loadingManager.hideAllButtonLoading(); // 显示用户友好的错误信息 const userMessage = ERROR_MESSAGES[code] || message || '支付失败,请重试'; messageManager.error(userMessage); // 记录错误日志 this.logPaymentError(code, message); }); console.log('✅ 支付 Hooks 设置完成'); } /** * 处理金额变更 * @param {Event} event - 输入事件 */ handleAmountChange(event) { const amount = event.target.value; try { pingpongService.updateCheckout({ amount }); // 清除字段错误 formValidator.clearFieldError('amount'); } catch (error) { console.error('金额更新失败:', error); formValidator.showFieldError('amount', '金额格式不正确'); } } /** * 处理国家变更 * @param {Event} event - 选择事件 */ handleCountryChange(event) { const country = event.target.value; const currency = COUNTRY_CURRENCY_MAP[country]; try { pingpongService.updateCheckout({ tradeCountry: country, currency: currency }); // 更新货币显示 this.updateCurrencyDisplay(currency); // 清除字段错误 formValidator.clearFieldError('country'); } catch (error) { console.error('国家更新失败:', error); formValidator.showFieldError('country', '国家选择不正确'); } } /** * 处理优惠券变更 * @param {Event} event - 输入事件 */ async handleCouponChange(event) { const couponCode = event.target.value.trim(); if (!couponCode) { formValidator.clearFieldError('coupon'); return; } try { await this.validateCoupon(couponCode); formValidator.clearFieldError('coupon'); } catch (error) { console.error('优惠券验证失败:', error); formValidator.showFieldError('coupon', '优惠券无效'); } } /** * 处理支付按钮点击 * @param {Event} event - 点击事件 */ async handlePaymentClick(event) { event.preventDefault(); if (this.paymentInProgress) { return; } try { // 表单验证 const validation = formValidator.validateForm(['amount', 'country']); if (!validation.isValid) { messageManager.error(validation.errors.join('; ')); return; } // 启动支付 await pingpongService.startPayment(); } catch (error) { console.error('支付启动失败:', error); messageManager.error('支付启动失败,请重试'); } } /** * 处理 PingPong 初始化完成 */ handlePingPongReady() { console.log('🎉 PingPong SDK 准备就绪'); // 启用支付按钮 const payButton = document.getElementById('customPay'); if (payButton) { payButton.disabled = false; } } /** * 处理 PingPong 初始化错误 * @param {*} error - 错误信息 */ handlePingPongError(error) { console.error('💥 PingPong SDK 初始化错误:', error); // 禁用支付按钮 const payButton = document.getElementById('customPay'); if (payButton) { payButton.disabled = true; } messageManager.error(`收银台初始化失败: ${error.message || '未知错误'}`); } /** * 获取 SDK 访问令牌 * @returns {Promise} 访问令牌 */ async getSDKAccessToken() { try { const response = await fetch(API_ENDPOINTS.getAccessToken, { method: 'POST', headers: { 'Content-Type': 'application/json' } }); if (!response.ok) { throw new Error(`获取访问令牌失败: ${response.status}`); } const result = await response.json(); return result.token; } catch (error) { console.error('获取 SDK 访问令牌失败:', error); // 开发环境使用模拟令牌 if (DEV_CONFIG.isDevelopment) { return 'mock-sdk-access-token'; } throw error; } } /** * 验证优惠券 * @param {string} couponCode - 优惠券代码 */ async validateCoupon(couponCode) { try { const response = await fetch(API_ENDPOINTS.validateCoupon, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ couponCode }) }); if (!response.ok) { throw new Error('优惠券验证失败'); } const result = await response.json(); if (result.valid) { messageManager.success(`优惠券有效,已享受${result.discount * 100}%折扣`); // 更新金额 const currentAmount = parseFloat(document.getElementById('amount').value); const newAmount = (currentAmount * (1 - result.discount)).toFixed(2); pingpongService.updateCheckout({ amount: newAmount }); document.getElementById('amount').value = newAmount; } else { throw new Error(result.message || '优惠券无效'); } } catch (error) { // 开发环境模拟 if (DEV_CONFIG.isDevelopment && couponCode === DEV_CONFIG.mockCouponCode) { messageManager.success('优惠券有效,已享受10%折扣'); const currentAmount = parseFloat(document.getElementById('amount').value); const newAmount = (currentAmount * 0.9).toFixed(2); pingpongService.updateCheckout({ amount: newAmount }); document.getElementById('amount').value = newAmount; return; } throw error; } } /** * 检查库存 */ async checkInventory() { try { const response = await fetch(API_ENDPOINTS.validateInventory, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ items: this.getCartItems() }) }); if (!response.ok) { throw new Error('库存检查失败'); } const result = await response.json(); if (!result.success) { throw new Error(result.message || '库存不足'); } console.log('📦 库存检查通过'); } catch (error) { console.error('库存检查异常:', error); // 开发环境跳过库存检查 if (DEV_CONFIG.isDevelopment) { console.log('📦 开发环境跳过库存检查'); return; } throw error; } } /** * 创建订单 * @returns {Promise} 订单令牌 */ async createOrder() { try { const orderData = { amount: document.getElementById('amount').value, currency: COUNTRY_CURRENCY_MAP[document.getElementById('country').value], tradeCountry: document.getElementById('country').value, couponCode: document.getElementById('coupon').value, items: this.getCartItems(), customerInfo: this.getCustomerInfo() }; const response = await fetch(API_ENDPOINTS.createOrder, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(orderData) }); if (!response.ok) { throw new Error('订单创建失败'); } const result = await response.json(); if (result.success && result.token) { this.currentOrder = result; console.log('📝 订单创建成功'); return result.token; } else { throw new Error(result.message || '订单创建失败'); } } catch (error) { console.error('订单创建异常:', error); // 开发环境返回模拟令牌 if (DEV_CONFIG.isDevelopment) { return 'mock-order-token-' + Date.now(); } throw error; } } /** * 获取购物车商品信息 * @returns {Array} 商品列表 */ getCartItems() { // 这里应该从实际的购物车组件获取商品信息 return [ { id: 'item_001', name: '示例商品', quantity: 1, price: '1.08' } ]; } /** * 获取客户信息 * @returns {Object} 客户信息 */ getCustomerInfo() { // 这里应该从实际的表单获取客户信息 return { email: 'customer@example.com', name: 'Customer Name' }; } /** * 更新货币显示 * @param {string} currency - 货币代码 */ updateCurrencyDisplay(currency) { const currencyElements = document.querySelectorAll('[data-currency]'); currencyElements.forEach(element => { element.textContent = currency; element.setAttribute('data-currency', currency); }); } /** * 记录支付错误日志 * @param {string} code - 错误代码 * @param {string} message - 错误信息 */ async logPaymentError(code, message) { const errorLog = { timestamp: new Date().toISOString(), errorCode: code, errorMessage: message, userAgent: navigator.userAgent, orderId: this.currentOrder?.id, amount: document.getElementById('amount')?.value, currency: COUNTRY_CURRENCY_MAP[document.getElementById('country')?.value], url: window.location.href }; try { await fetch(API_ENDPOINTS.logError, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(errorLog) }); } catch (error) { console.error('日志记录失败:', error); } } /** * 销毁应用 */ destroy() { this.paymentInProgress = false; pingpongService.destroy(); messageManager.clear(); loadingManager.hideAllButtonLoading(); this.isInitialized = false; console.log('🔧 Checkout 应用已销毁'); } } // 创建应用实例 const app = new CheckoutApp(); // 页面加载完成后初始化 document.addEventListener('DOMContentLoaded', async () => { try { await app.initialize(); } catch (error) { console.error('应用启动失败:', error); messageManager.error('应用启动失败,请刷新页面重试'); } }); // 页面卸载时清理 window.addEventListener('beforeunload', () => { app.destroy(); }); // 导出应用实例(用于调试) if (DEV_CONFIG.isDevelopment) { window.checkoutApp = app; window.pingpongService = pingpongService; window.messageManager = messageManager; } ``` ::: ## 常见问题 ### Q1: 为什么我的结账流程无法启动,系统提示 beforeCheckoutHook 相关错误? **A:** 当系统提示 `"The beforeCheckoutHook is not defined or is not a function"` 时,表明您的 one-page sdk 配置中缺少有效的 beforeCheckoutHook 函数。请确保在配置中正确定义此函数,它是启动结账流程的必要条件。 ### Q2: 我已定义 beforeCheckoutHook 函数,但仍收到 token 相关错误,如何解决? **A:** 错误 `"Invalid or missing token returned by beforeCheckoutHook"` 表明您的 beforeCheckoutHook 函数未返回有效的 token。请确保该函数返回一个非空字符串类型的 token,这是支付处理的必要凭证。 ### Q3: 创建支付时,系统提示 amount 参数错误,应如何处理? **A:** 当系统显示 `"Invalid or missing amount: must be a non-empty string"` 时,表明您提供的 amount 参数不符合要求。请确保 amount 参数是非空字符串类型,例如 `"10.99"`。 ### Q4: 如何确保我使用的货币代码有效? **A:** 系统支持特定的货币代码列表。如果收到 `"Invalid or missing currency"` 错误,请检查您提供的货币代码是否在支持列表中。常用的代码包括 `"USD"`、`"EUR"`、`"CNY"` 等。完整列表请参考 API 文档。 ### Q5: sdkAccessToken 验证失败的原因是什么? **A:** 错误 `"Invalid or missing sdkAccessToken"` 表明您提供的 sdkAccessToken 无效或缺失。请确保提供一个有效的、非空字符串类型的 sdkAccessToken,这是身份验证的关键凭证。 ### Q6: 配置 paymentMethods 时需要注意什么? **A:** 如果您选择配置 paymentMethods 参数,必须确保它是数组类型。若收到 `"Invalid paymentMethods: must be an array or undefined"` 错误,请检查您提供的值是否为数组,或考虑完全移除此参数以使用默认支付方式。 ### Q7: 如何确保 one-page sdk 配置的正确性? **A:** 建议在实施前全面测试您的配置。特别注意: * beforeCheckoutHook 函数必须正确定义并返回有效 token * 所有必需参数(amount、currency、sdkAccessToken)必须符合类型要求 * 可选参数如 paymentMethods 必须符合预期格式 ### Q8: 支付流程中断时如何快速排查问题? **A:** 请检查控制台错误信息,它通常会精确指出问题所在。根据错误信息对照本 FAQ 进行相应调整。如果问题持续,请确保您使用的是最新版本的 SDK,并查阅完整的技术文档。 --- --- url: 'https://acquirer-api-docs-v4.pingpongx.com/notes/zh/integrate/sdk-v4/index.md' description: >- 内嵌SDK(预下单)提供了一种通过JavaScript-SDK快速集成支付功能的方法,适用于需要在网页中直接嵌入支付界面的场景。支持沙箱及多个生产环境部署,允许自定义支付按钮和语言设置,并提供了beforeCheckoutHook和checkoutFailedHook等钩子函数以满足特定业务需求。 --- # 内嵌SDK(预下单) ## 内嵌SDK接入流程 ### 1. 引入Javascript-SDK 复制以下代码,通过CDN地址引入 PingPongCheckout Javascript-SDK ::: code-tabs @tab 🧪 沙箱环境 ```js ``` @tab 🇪🇺 FRA 生产环境 ```js ``` @tab 🇸🇬 SG 生产环境 ```js ``` @tab 🇺🇸 US 生产环境 ```js ``` ::: ### 使用方法 ::: note 提示 从沙箱环境切换到生产环境时,请务必检查并且完成下列的操作,否则会导致收银台无法正常渲染。 * 将引入Javascript-SDK的CDN地址切换到生产环境指定的URL ::: 1. 当你在联调**沙箱环境**时,需要在引入**沙箱环境** 的PingPongCheckout Javascript-SDK地址(发布到生产环境的时候别忘了切换成**生产环境**的地址) 2. 将 `pp-checkout` 标签插入 html body 中 ```html:line-numbers title="index.html" ``` 3. 将预下单获取到的 `accessToken` 传入,`获取accessToken` API文档详见下单接口(Hosted模式) ```html:line-numbers title="index.html" ``` 4. 你可以将收银台所要展示的语种(默认为英文,更多语言详见Locale)通过标签属性的方式传递给 `pp-checkout`,如下: ```html:line-numbers title="index.html" ``` 通过上面三步,你已经成功渲染了Javascript-SDK收银台。 ### 全局变量和hook 在使用全局变量前,请确保Javascript-SDK 加载完成。 #### 自定义支付按钮(可选) 用户可以自定义按钮,通过点击事件去绑定 pingpong 的支付功能。 ```js:line-numbers title="src/config/payment.js" // [!code highlight:2] 自定义支付按钮配置 PingPong.Checkout.customizeConfig = { originalPay: false // [!code focus] } // 初始化参数中 originalPay 为 false 时, 需自定义支付按钮点击事件 document.querySelector('#pay').onclick = function () { // [!code focus] PingPong.Checkout.pay.run() // [!code focus] } ``` #### PingPong.Checkout.beforeCheckoutHook type: ```js (() => void) | (() => Promise) ``` `beforeCheckoutHook` 用来设置发起支付请求前的钩子函数。 当你在用户点击支付按钮,发起支付请求前,需要执行你自己的业务逻辑,如:上报埋点、检查库存等,可以设置该钩子函数。 该函数可以返回一个`Promise`,后续的支付流程会等待该 Promise 状态变为 Fulfilled 后才会继续执行。如果你想在 Promise 状态为 Rejected 或者异步结果不满足你的业务条件时,可以抛出异常,SDK在捕获到异常后中断支付流程。 ```js:line-numbers title="src/hooks/beforeCheckout.js" // [!code highlight] 支付前钩子:检查库存 PingPong.Checkout.beforeCheckoutHook = () => { // [!code focus] return fetch('/api/requestInventory').then(res => { // [!code focus] const { inventoryQuantity } = res; if(inventoryQuantity < MIN_QUANTITY) { throw new Error('库存不足,需中断交易') // [!code error] } }).catch((error) => { throw new Error('接口异常,需中断交易') // [!code error] }) }; ``` #### PingPong.Checkout.checkoutFailedHook type: ```js (() => void) | (() => Promise) ``` checkoutFailedHook 接收以下参数: ```js (code: string, message: string) => void | Promise; // code: string - 错误码 // message: string - 错误消息 ``` `checkoutFailedHook` 用来自定义错误逻辑 当用户支付失败时,PingPong 默认会弹窗提示用户失败原因。如果你想自定义弹窗 UI 或文本,可以设置该钩子函数。 该函数可以返回一个 Promise。如果返回 Promise,后续的流程会等待该 Promise 状态变为 Fulfilled 后才继续执行 ```js:line-numbers title="src/hooks/checkoutFailed.js" // [!code highlight] 支付失败钩子:自定义错误提示 PingPong.Checkout.checkoutFailedHook = (code: string, message: string) => { // [!code focus] notification.open({ // [!code focus] message: 'Error title', description: `${code}: ${message}` // [!code warning] }) }; ``` ### 使用示例 #### 原生 JavaScript 完整示例 以下示例展示了如何在原生 JavaScript 项目中集成 SDK,包含完整的项目结构、API 调用和错误处理。 ::: code-tree title="原生 JavaScript 集成示例" height="600px" entry="index.html" ```html:line-numbers title="index.html" :active PingPong Checkout SDK - 原生 JS 示例 PingPong 支付收银台 正在初始化收银台... 重新加载 ``` ```css:line-numbers title="styles.css" * { margin: 0; padding: 0; box-sizing: border-box; } body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif; background: #f5f5f5; padding: 20px; } .container { max-width: 1200px; margin: 0 auto; background: white; padding: 30px; border-radius: 8px; box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); } h1 { color: #333; margin-bottom: 30px; text-align: center; } .loading { text-align: center; padding: 40px; } .spinner { width: 40px; height: 40px; margin: 0 auto 20px; border: 4px solid #f3f3f3; border-top: 4px solid #1890ff; border-radius: 50%; animation: spin 1s linear infinite; } @keyframes spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } } .error { padding: 20px; background: #fff2f0; border: 1px solid #ffccc7; border-radius: 4px; color: #ff4d4f; text-align: center; } .error button { margin-top: 15px; padding: 8px 20px; background: #1890ff; color: white; border: none; border-radius: 4px; cursor: pointer; } .error button:hover { background: #40a9ff; } #checkout-wrap { display: none; } ``` ```js:line-numbers title="config.js" // SDK 配置 const CONFIG = { // API 端点配置 apiEndpoint: '/api/reserve', // [!code focus] // SDK CDN 地址(根据环境切换) sdkUrl: { sandbox: 'https://payssr-cdn.pingpongx.com/production-fra/acquirer-checkout-web/sandbox/pp-checkout.js', production: 'https://payssr-cdn.pingpongx.com/production-fra/acquirer-checkout-web/pp-checkout.js' }, // 默认语言 defaultLocale: 'zh', // [!code focus] // 请求超时时间(毫秒) timeout: 30000, // 最小库存数量(用于演示 beforeCheckoutHook) minInventory: 1 }; ``` ```js:line-numbers title="api.js" // API 调用封装 const API = { /** * 获取 AccessToken * @returns {Promise} AccessToken */ async getAccessToken() { // [!code focus] try { const response = await fetch(CONFIG.apiEndpoint, { // [!code focus] method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ // 订单信息 amount: 100.00, currency: 'USD', // ... 其他必要参数 }) }); if (!response.ok) { throw new Error(`HTTP ${response.status}: ${response.statusText}`); // [!code warning] } const data = await response.json(); if (!data.accessToken) { throw new Error('响应中缺少 accessToken'); // [!code error] } return data.accessToken; // [!code focus] } catch (error) { console.error('获取 AccessToken 失败:', error); throw error; } }, /** * 检查库存(示例) * @returns {Promise<{inventoryQuantity: number}>} */ async checkInventory() { // 模拟 API 调用 return new Promise((resolve) => { setTimeout(() => { resolve({ inventoryQuantity: 10 }); }, 500); }); } }; ``` ```js:line-numbers title="main.js" // 页面加载完成后初始化 document.addEventListener('DOMContentLoaded', async () => { await initCheckout(); // [!code focus] }); /** * 初始化收银台 */ async function initCheckout() { const loadingEl = document.getElementById('loading'); const errorEl = document.getElementById('error'); const errorMessageEl = document.getElementById('error-message'); const checkoutWrap = document.getElementById('checkout-wrap'); const ppCheckout = document.querySelector('pp-checkout'); try { // 1. 等待 SDK 加载完成 await waitForSDK(); // [!code focus] // 2. 配置 SDK hooks setupHooks(); // [!code focus] // 3. 获取 AccessToken const accessToken = await API.getAccessToken(); // [!code focus] // 4. 设置 AccessToken 到 SDK ppCheckout.setAttribute('accessToken', accessToken); // [!code focus] ppCheckout.setAttribute('locale', CONFIG.defaultLocale); // 5. 显示收银台 loadingEl.style.display = 'none'; checkoutWrap.style.display = 'block'; console.log('收银台初始化成功'); } catch (error) { console.error('初始化失败:', error); loadingEl.style.display = 'none'; errorMessageEl.textContent = `初始化失败: ${error.message}`; errorEl.style.display = 'block'; } } /** * 等待 SDK 加载完成 */ function waitForSDK() { return new Promise((resolve, reject) => { const timeout = setTimeout(() => { reject(new Error('SDK 加载超时')); }, CONFIG.timeout); const checkSDK = () => { if (window.PingPong && window.PingPong.Checkout) { // [!code focus] clearTimeout(timeout); resolve(); } else { setTimeout(checkSDK, 100); } }; checkSDK(); }); } /** * 配置 SDK Hooks */ function setupHooks() { // 支付前钩子:检查库存 PingPong.Checkout.beforeCheckoutHook = async () => { // [!code focus] try { const { inventoryQuantity } = await API.checkInventory(); if (inventoryQuantity < CONFIG.minInventory) { throw new Error('库存不足,无法完成支付'); // [!code error] } console.log('库存检查通过,库存数量:', inventoryQuantity); } catch (error) { console.error('库存检查失败:', error); throw error; } }; // 支付失败钩子:自定义错误提示 PingPong.Checkout.checkoutFailedHook = (code, message) => { // [!code focus] console.error('支付失败:', { code, message }); // 自定义错误提示 alert(`支付失败\n错误码: ${code}\n错误信息: ${message}`); }; } ``` ::: #### Vue 3 完整示例 以下示例展示了如何在 Vue 3 项目中集成 SDK,使用 Composition API 实现响应式状态管理。 ::: code-tree title="Vue 3 集成示例" height="600px" entry="App.vue" ```vue:line-numbers title="App.vue" :active PingPong 支付收银台 正在初始化收银台... {{ error }} 重试 ``` ```js:line-numbers title="api/checkout.js" import { CONFIG } from '../config'; /** * 获取 AccessToken * @returns {Promise} */ export async function getAccessToken() { // [!code focus] try { const response = await fetch(CONFIG.apiEndpoint, { // [!code focus] method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ // 订单信息 amount: 100.00, currency: 'USD', // ... 其他必要参数 }) }); if (!response.ok) { throw new Error(`HTTP ${response.status}: ${response.statusText}`); // [!code warning] } const data = await response.json(); if (!data.accessToken) { throw new Error('响应中缺少 accessToken'); // [!code error] } return data.accessToken; // [!code focus] } catch (error) { console.error('获取 AccessToken 失败:', error); throw error; } } /** * 检查库存 * @returns {Promise<{inventoryQuantity: number}>} */ export async function checkInventory() { // 模拟 API 调用 return new Promise((resolve) => { setTimeout(() => { resolve({ inventoryQuantity: 10 }); }, 500); }); } ``` ```js:line-numbers title="config/index.js" export const CONFIG = { // API 端点配置 apiEndpoint: '/api/reserve', // [!code focus] // SDK CDN 地址 sdkUrl: { sandbox: 'https://payssr-cdn.pingpongx.com/production-fra/acquirer-checkout-web/sandbox/pp-checkout.js', production: 'https://payssr-cdn.pingpongx.com/production-fra/acquirer-checkout-web/pp-checkout.js' }, // 默认语言 defaultLocale: 'zh', // [!code focus] // 请求超时时间(毫秒) timeout: 30000, // 最小库存数量 minInventory: 1 }; ``` ```js:line-numbers title="composables/useCheckout.js" import { CONFIG } from '../config'; import { checkInventory } from '../api/checkout'; /** * 等待 SDK 加载完成 */ function waitForSDK() { return new Promise((resolve, reject) => { const timeout = setTimeout(() => { reject(new Error('SDK 加载超时')); }, CONFIG.timeout); const checkSDK = () => { if (window.PingPong && window.PingPong.Checkout) { // [!code focus] clearTimeout(timeout); resolve(); } else { setTimeout(checkSDK, 100); } }; checkSDK(); }); } /** * 配置 SDK Hooks */ function setupHooks() { // 支付前钩子:检查库存 window.PingPong.Checkout.beforeCheckoutHook = async () => { // [!code focus] try { const { inventoryQuantity } = await checkInventory(); if (inventoryQuantity < CONFIG.minInventory) { throw new Error('库存不足,无法完成支付'); // [!code error] } console.log('库存检查通过,库存数量:', inventoryQuantity); } catch (error) { console.error('库存检查失败:', error); throw error; } }; // 支付失败钩子:自定义错误提示 window.PingPong.Checkout.checkoutFailedHook = (code, message) => { // [!code focus] console.error('支付失败:', { code, message }); // 可以使用 UI 库的通知组件 // 这里使用简单的 alert 演示 alert(`支付失败\n错误码: ${code}\n错误信息: ${message}`); }; } /** * 初始化 SDK */ export async function initSDK() { // [!code focus] await waitForSDK(); // [!code focus] setupHooks(); // [!code focus] } ``` ```html:line-numbers title="index.html" PingPong Checkout SDK - Vue 3 示例 ``` ```js:line-numbers title="main.js" import { createApp } from 'vue'; import App from './App.vue'; const app = createApp(App); app.mount('#app'); ``` ::: ## Javascript-SDK调试工具 你可以在沙箱环境中体验 Javascript-SDK 的功能,请前往Javascript-SDK 调试工具。 ## 语种支持 ::: note 提示 在language未传入的情况下,收银台语言默认为en,如果传了language,就以传入的语言为准。可在语言列表查看具体枚举值 ::: --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/integrate/woocommerce/index.md description: >- 文档介绍如何在WordPress中安装和配置PPPay插件,适用于WooCommerce 3.x版本。需PHP 7.3及以上版本及curl扩展,并确保日志目录可写。安装过程中需设置环境参数、日志路径并进行沙箱与生产环境测试。重要事项包括订单号单调递增、不同数据库使用独立accId等。 --- # wordpress-PPPay 插件安装说明 ## 安装前提 > * wordpress version 3.x 5.6 5.7 > * php version >=7.3 > * php-Extensions:curl > * chmod 777 /webRoot/wordpress/wp-content/log *** 以下为非必要设置,若出现504错误可以检查下列选项 * \[ ] php ini执行超时时间 * \[ ] nginx 或者 apache 设置执行超时时间 *** ::: danger 1. 同一个accId下订单号不能重复,必须是单调递增的,否则会引发订单状态问题; 2. 来源于不同数据库的订单不能共用同一个accId; 3. accId下已经有过交易,安装插件之前应该将id起始值设置为大于当前订单id最大的值; 4. 重置数据库,商店,或者accId迁往别的商店,应该检查accId下订单号最大值。 ::: ### 插件下载 woocommerce-pppay.zip ## 安装过程 登录网站后台 `选择 模块-> Module Manager ->上载插件 ` 安装完成之后,选择`woocommerce->配置->支付`,按下图所示打开插件启用开关。 点击下图中的管理,打开插件参数配置页面  按照下图所示,配置运行环境参数(sandbox,production),最后点击保存  配置插件日志目录(注意目录必须可写) 通过FTP登录服务器修改代码,在wp-config.php里的找到ABSPPATH,在ABSPPATH的后面一行定义你的插件日志目录,日志目录权限必须可写。  ```php:line-numbers title="wp-config.php" /** WordPress目录的绝对路径。 */ if ( !defined('ABSPATH') ){ define('ABSPATH', dirname(__FILE__) . '/'); } define('WP_TEMP_DIR', ABSPATH . 'wp-content/tmp'); // [!code highlight] ``` ## 环境参数 ### 沙箱环境店铺参数 ```ini:line-numbers title="config/sandbox.ini" clientId: 2018092714313010016 # [!code focus] accId: 2018092714313010016291 # [!code focus] salt: F78BC96A55548B2319EE68E0 # [!code focus] ``` ### 沙箱环境测试卡号 ```text:line-numbers title="config/test-cards.txt" 卡号:4200000000000000 有效期:12/22 cvv: 123 cvv需为3位纯数字 3DS交易卡:4711100000000000 ``` ### 环境地址 ```text:line-numbers title="config/environment-urls.txt" 沙箱环境 https://sandbox-acquirer-payment.pingpongx.com 生产环境 https://acquirer-payment.pingpongx.com ``` ## 对接过程 ### 沙箱环境对接 1. 按照文件安装插件。 2. 插件安装完成之后,需要进行支付自测,并完成以下事项: * \[ ] 截图输入卡号的页面 * \[ ] 截图支付完成的最终跳转页面 * \[ ] 将截图发送到对接群,并通知技术支持 安装过程,有任何问题可以在对接群里需求技术支持。 *** 注意事项: > 沙箱环境下,不会对持卡人发起扣款,支付之后发货将造成损失,不发货将持卡人可能会发起投诉。因此在对接期间,需要谨慎操作,对接测试通过之后,因立即关闭支付通道,等待生产环境上线之后打开。 *** ### 生产环境对接 1. 插件在技术支持下完成第一轮的沙箱环境对接后将进入,网站资料和账户审查阶段,通过之后,会发放生产环境参数。 2. 获取到生产参数之后,完成以下事项 * \[ ] 将沙箱环境参数替换为生产参数。 * \[ ] 自测支付,并完成截图 * \[ ] 准备一个$1的商品链接。 3. 发送截图和商品链接,并通知技术支持,将由客户/技术支持对该商品链接发起真实交易测试。以验证对接结果和网站支付可用性。 4. 完成真实交易测试之后,需要商户发起退款,以便于验证退款流程。 5. 完成以上流程,网站对接结束,支付通道正式上线,支付可用。 ## 生产环境配置 ### 审核过程 从对接群中或者商务/客户处获得通知,审核通过。 登录[商户后台](https://pay.pingpongx.com/aq/websiteList) ```text:line-numbers title="urls/merchant-backend.txt" https://pay.pingpongx.com/aq/websiteList ``` ### 前往网站列表 如图所示,前往群组管理->查看详情->网站列表 ### 群组管理 > * ⚫ 从菜单栏选择【网站管理】-【群组管理】进入群组管理页面 > * ⚫ 该功能实现当前商户可点击“创建群组”新建群组;系统默认会给一个默认的群组 > * ⚫ 网站下挂于群组。 > * ⚫ 点击“查看详情”进入群组详情页面,可修改群组名称、查看复制 ID 号、查看群组下的网站。  ### 选择网站 根据当前对接网站的域名,在列表中选择对应的网站  ### 获取对应域名网站的accId  ### 获取秘钥 > 从菜单栏选择【系统管理】-【秘钥管理】默认进入秘钥管理页,可在此页面查 看网站秘钥。 > 进入秘钥管理后,可查看所有网站对应的秘钥,点击“秘钥详情”查看具体秘 > 钥字段。 > 状态为“正常”的秘钥可使用,当状态为“异常”时,将无法使用可联系相关业务 人员处理。  --- --- url: 'https://acquirer-api-docs-v4.pingpongx.com/notes/zh/integrate/zenCart/index.md' description: >- ZenCart-PPPay 插件安装说明提供了在 ZenCart 平台上集成 PPPay 支付插件的详细步骤。适用于 ZenCart 1.7 及以上版本,需满足 PHP 7.1 及其扩展要求。文档涵盖了从上传文件到配置环境参数的全过程,并强调了订单号唯一性和单调递增的重要性。 --- # ZenCart-PPPay 插件安装说明 ### 安装前提 > * ZenCart version>=1.7 > * php version >=7.1 > * php Extensions:curl bcmath > * chmod 777 /zenCartRoot/logs *** 以下为非必要设置,若出现504错误可以检查下列选项 * \[ ] php ini执行超时时间 * \[ ] nginx 或者 apache 设置执行超时时间 *** ::: danger 1. 同一个accId下订单号不能重复,必须是单调递增的,否则会引发订单状态问题; 2. 来源于不同数据库的订单不能共用同一个accId; 3. accId下已经有过交易,安装插件之前应该将id起始值设置为大于当前订单id最大的值; 4. 重置数据库,商店,或者accId迁往别的商店,应该检查accId下订单号最大值。 ::: ### ### ZenCart安装路径规则 #### 解压文件 解压之后,目录结构如下。 这四个目录和zenCart/inclues 下面的目录对应。  ### 安装过程 #### 登录FTP 使用FTP工具上服务器,上传插件压缩包。 没有FTP工具,可以使用命令行,windwos下使用powershell。 SFTP命令-连接远程服务器: ```shell:line-numbers title="terminal" sftp username@ip # [!code focus] ``` #### 文件上传 没有FTP工具,使用SFTP命令-将文件上传到服务器上: ```shell:line-numbers title="terminal" put [本地文件的地址] [服务器上文件存储的位置] # [!code focus] ``` #### 文件解压 使用unzip命令 ZenCart-PPPay 带有完整的目录结构, 插件解压后带有inclues/目录,在zenCart根目录解压后,插件文件会自动合并到原有文件下。 ### 配置过程 #### 登录网站后台 前往页面 `Modules->Payments->PingPongCheckout`  #### 安装并启用模块 选择模块`PingPongCheckout`,并点击安装  #### 配置环境 按下面图片所示,配置支付所需的环境参数。  #### 保存配置  ### 环境参数 #### 沙箱环境店铺参数 ```ini:line-numbers title="config/sandbox.ini" clientId: 2018092714313010016 # [!code focus] accId: 2018092714313010016291 # [!code focus] salt: F78BC96A55548B2319EE68E0 # [!code focus] ``` #### 沙箱环境测试卡号 ```text:line-numbers title="config/test-cards.txt" 卡号:4200000000000000 有效期:12/22 cvv: 123 cvv需为3位纯数字 3DS交易卡:4711100000000000 ``` #### 环境地址 ```text:line-numbers title="config/environment-urls.txt" 沙箱环境 https://sandbox-acquirer-payment.pingpongx.com 生产环境 https://acquirer-payment.pingpongx.com ``` ### 对接过程 #### 沙箱环境对接 1. 按照文件安装插件。 2. 插件安装完成之后,需要进行支付自测,并完成以下事项: * \[ ] 截图输入卡号的页面 * \[ ] 截图支付完成的最终跳转页面 * \[ ] 将截图发送到对接群,并通知技术支持 安装过程,有任何问题可以在对接群里需求技术支持。 *** 注意事项: > 沙箱环境下,不会对持卡人发起扣款,支付之后发货将造成损失,不发货将持卡人可能会发起投诉。因此在对接期间,需要谨慎操作,对接测试通过之后,因立即关闭支付通道,等待生产环境上线之后打开。 *** #### 生产环境对接 1. 插件在技术支持下完成第一轮的沙箱环境对接后将进入,网站资料和账户审查阶段,通过之后,会发放生产环境参数。 2. 获取到生产参数之后,完成以下事项 * \[ ] 将沙箱环境参数替换为生产参数。 * \[ ] 自测支付,并完成截图 * \[ ] 准备一个$1的商品链接。 3. 发送截图和商品链接,并通知技术支持,将由客户/技术支持对该商品链接发起真实交易测试。以验证对接结果和网站支付可用性。 4. 完成真实交易测试之后,需要商户发起退款,以便于验证退款流程。 5. 完成以上流程,网站对接结束,支付通道正式上线,支付可用。 ### 生产环境配置 #### 审核过程 从对接群中或者商务/客户处获得通知,审核通过。 登录[商户后台](https://pay.pingpongx.com/aq/websiteList) ```text:line-numbers title="urls/merchant-backend.txt" https://pay.pingpongx.com/aq/websiteList ``` #### 前往网站列表 如图所示,前往群组管理->查看详情->网站列表 #### 群组管理 > * ⚫ 从菜单栏选择【网站管理】-【群组管理】进入群组管理页面 > * ⚫ 该功能实现当前商户可点击“创建群组”新建群组;系统默认会给一个默认的群组 > * ⚫ 网站下挂于群组。 > * ⚫ 点击“查看详情”进入群组详情页面,可修改群组名称、查看复制 ID 号、查看群组下的网站。  #### 选择网站 根据当前对接网站的域名,在列表中选择对应的网站  #### 获取对应域名网站的accId  #### 获取秘钥 > 从菜单栏选择【系统管理】-【秘钥管理】默认进入秘钥管理页,可在此页面查 看网站秘钥。 > 进入秘钥管理后,可查看所有网站对应的秘钥,点击“秘钥详情”查看具体秘 > 钥字段。 > 状态为“正常”的秘钥可使用,当状态为“异常”时,将无法使用可联系相关业务 人员处理。  --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/marketplaces/createAccount/index.md description: >- 平台账号注册文档介绍了在PingPongCheckout平台上注册账号的步骤,包括访问注册页面、填写个人信息、邮箱验证及登录。成功注册后需选择账户类型并进行实名认证。之后可创建店铺并在管理页面查看店铺信息。 --- # 平台账号注册 ## 平台账号注册 ### 账户注册 在使用平台的服务之前,您需要先注册一个账号。请按照以下步骤进行注册: 1. 访问 [PingPongCheckout 注册](https://checkout.pingpongx.com/aq/register),在浏览器中打开注册页面。 2. 输入您的姓名、邮箱地址、密手机号等信息,并点击注册按钮。 3. 系统将向您的邮箱发送一封验证邮件,请点击邮件中的链接完成注册。 4. 注册成功后,您将自动登录到平台的主页。 详见注册流程 ### 账户类型选择 登录成功后,如图所示,选择账户类型 ::: note 提示 * 请确保您的邮箱地址是有效的,以便接收验证邮件。 * 请不要使用过于简单的密码,以保护您的账号安全。 * 注册成功后,您可以开始使用平台提供的服务。 ::: ## 实名认证 账号在创建后,需要先进行实名认证。请按照以下步骤进行实名认证: 1. 登录平台的后台管理系统,进入实名认证页面。 2. 在实名认证页面,填写信息。 ## 店铺注册 在平台注册成功后,您需要创建店铺。 ## 查看店铺 创建店铺成功后,您可以在店铺管理页面查看店铺信息。 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/marketplaces/createSubMerchant/index.md description: >- 子商户注册功能允许在市场平台上注册商户,适用于电商平台、服务平台等。子商户通过平台进行交易、收款和提现。注册信息包括名称、联系人、联系方式等,并需经SafetyNet认证。支持随交易注册及通过PingPongCheckout KYB API注册两种方式。 --- # 子商户注册 ## 子商户 子商户是指在市场平台上注册的商户。市场平台可以是电商平台、服务平台或其他类型的平台。子商户可以通过市场平台进行交易、收款和提现等操作。 子商户的注册信息包括商户名称、商户号、联系人、联系电话、邮箱、地址等。市场平台需要验证子商户的注册信息,以保证子商户的 SafetyNet 认证。 PingPong Marketplace 支持两种子商户注册方式: * 随交易注册子商户 - 通过 PingPongCheckout KYB API 注册子商户 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/marketplaces/createSubMerchantWithKYB/index.md description: >- PingPongCheckout KYB API 用于创建和管理子商户,确保其合法合规。适用于市场平台,支持批量新增和修改子商户信息,关键参数包括子商户号、名称、国家、店铺链接及MCC编码等。 --- # 通过 PingPongCheckout KYB API 注册子商户 ## 通过 PingPongCheckout KYB API 注册子商户 KYB API 是 PingPongCheckout 提供的用于创建子商户的 API 接口。通过 KYB API,商户可以创建子商户。 KYB 是支付机构或银行对商户进行身份核验和风险评估的流程,确保商户合法合规。类似于个人用户的 KYC(Know Your Customer),但针对企业客户。 ## 新增子商户接口 新增子商户可以通过上传**子商户信息收集列表-subMerchantList**,同时创建多个子商户。 **新增单个subMerchant关键信息** | 字段名 | 类型 | 是否必填 | 描述 | |------------------------|-------------|------|--------------| | subMerchantId | String(64) | 是 | 商户平台的子商户号 | | subMerchantName | String(255) | 是 | 子商户名称 | | businessIdentityNumber | String(64) | 否 | 子商户机构代码 | | subMerchantStoreUrl | String(255) | 是 | 店铺链接 | | subMerchantCountry | String(64) | 是 | 子商户所属国家 | | subMerchantAddress | String(255) | 否 | 子商户地址 | | subMerchantMcc | String(64) | 是 | 商户经营类目,MCC编码 | | subMerchantBrand | String(64) | 否 | 商户经营品牌 | ## 批量修改子商户接口 批量修改子商户 **修改单个subMerchant关键信息** | 字段名 | 类型 | 是否必填 | 描述 | |------------------------|-------------|------|--------------| | subMerchantId | String(64) | 是 | 商户平台的子商户号 | | subMerchantName | String(255) | 是 | 子商户名称 | | businessIdentityNumber | String(64) | 否 | 子商户机构代码 | | subMerchantStoreUrl | String(255) | 是 | 店铺链接 | | subMerchantCountry | String(64) | 是 | 子商户所属国家 | | subMerchantAddress | String(255) | 否 | 子商户地址 | | subMerchantMcc | String(64) | 是 | 商户经营类目,MCC编码 | | subMerchantBrand | String(64) | 否 | 商户经营品牌 | --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/marketplaces/createSubMerchantWithTransactions/index.md description: >- 随交易注册子商户功能允许在创建交易时附带子商户信息列表subOrderList,在交易完成后自动创建子商户。适用于市场平台场景,支持的关键参数包括子商户ID、订单金额、币种、店铺链接等,以及商品详情如名称、单价和数量。 --- # 随交易注册子商户 ## 随交易注册子商户 随交易注册子商户是指在交易创建时附带子商户信息列表`subOrderList`,在交易完成后自动创建子商户。 详见 marketplaces下单并支付。 **子商户信息收集列表-subOrder** | 字段名 | 类型 | 是否必填 | 描述 | |--------------------------|-------------|------|-------------------| | subMerchantId | String(64) | 是 | 商户平台的子商户号 | | subMerchantTransactionId | String(64) | 是 | 子商户订单号,子订单唯一标识 | | amount | String(12) | 是 | 子订单金额 | | currency | String(3) | 是 | 子订单金额币种 | | subMerchantName | String(255) | 否 | 子商户主体名称 | | businessIdentityNumber | String(64) | 否 | 子商户营业执照编号 | | subMerchantStoreUrl | String(255) | 是 | 店铺链接 | | subMerchantCountry | String(64) | 是 | 子商户主体所属国家 | | subMerchantAddress | String(255) | 否 | 子商户主体地址 | | subMerchantMcc | String(4) | 是 | 商户经营主类目,MCC编码 | | subMerchantBrand | String(64) | 否 | 商户经营品牌 | | goods | Array | 是 | 商品信息 | | goods.name | String(128) | 是 | 商品名称 | | goods.unitPrice | String(12) | 是 | 商品单价 | | goods.currency | String(3) | 是 | 商品金额币种 | | goods.quantity | String(12) | 是 | 商品数量 | | goods.imgUrl | String(255) | 否 | 商品主图链接 | | goods.mcc | String(4) | 否 | 商品类别,MCC编码 | | goods.virtualProduct | String(1) | 否 | 是否是虚拟产品,虚拟商品(Y/N) | :::note 注意 所有goods合计最大不能超过1000 ::: ## 子商户创建工作流程 ### 卡支付-子商户创建工作流程 ### APM支付-子商户创建工作流程 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/marketplaces/overview/index.md description: >- Marketplaces 是PingPongCheckout为金融机构和电商SaaS平台提供的跨境支付解决方案,支持在线市场、电子商务网站及移动应用中的一站式支付体验。通过API可实现子商户注册、安全处理全球支付、资金分账与管理、风险控制以及报告对账等功能。 --- # 概览 ## Marketplaces Marketplaces 是PingPongCheckout 为 金融机构、电商SaaS服务等平台提供的一站式跨境支付解决方案。 在您的在线市场、电子商务网站、或移动应用程序中,打造流畅的端到端支付体验。 让您的平台用户能够在一个解决方案内轻松注册、销售和接收付款。 通过Marketplaces API,您可以: * 轻松创建和注册子商户 自动注册子商户轻松将您的客户 (卖家、服务提供商或分销商) 连接到您的平台 * 安全处理支付 通过PingPongCheckout支付网络,接受来自全球各地消费的安全支付。 * 资金分账和资金管理 为您的子商户提供安全、合规和智能的资金分割和付款解决方案 * 管理风险:识别欺诈行为,阻止可疑付款,并标记异常用户活动。 * 报告和对账 使用 PingPongCheckout 生成的账单和对账流程,确保资金的准确核算。 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/notify/bindNotify/APM/accTokenCancelMerchant/index.md description: >- 商家取消签约通知接口用于接收商家取消支付服务签约的通知。适用于需要实时了解商家状态变更的场景,支持通过异步方式接收通知。关键参数包括merchantId(商家ID)和cancelTime(取消时间)。 --- # 商家取消签约通知 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/notify/bindNotify/APM/accTokenCancelMerchantUser/index.md description: >- 用户在钱包侧取消签约通知接口用于接收用户取消与商户签约状态的通知。适用于需要实时更新用户签约状态的场景,确保系统数据一致性。该接口通过异步方式发送通知,包含用户标识、商户号等关键参数。 --- # 用户在钱包側取消签约通知 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/notify/bindNotify/APM/accTokenCreation/index.md description: >- 签约成功通知接口用于在用户完成支付签约后,向商户系统发送异步通知。适用于需要实时了解用户签约状态的场景。该接口通过POST方式调用,返回的关键参数包括签约ID、商户ID及签约状态等信息。 --- # 签约成功通知 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/notify/bindNotify/cof/accTokenCancelMerchant/index.md description: >- 商家取消签约通知接口用于接收商家取消签约的异步通知。适用于需要实时了解商家签约状态变更的场景,支持的关键特性包括通过回调URL即时通知、提供商家ID及取消原因等重要信息,确保平台能够及时响应并处理相关业务变动。 --- # 商家取消签约通知 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/notify/bindNotify/cof/accTokenCreation/index.md description: >- 签约成功通知接口用于在用户完成支付账户绑定后,向商户系统发送异步通知。适用于需要实时了解用户支付账户绑定状态的场景,支持全球范围内的支付服务接入。关键特性包括通过HTTPS POST方式传递数据,确保信息传输的安全性;消息体包含签约结果、用户标识等重要参数,便于商户进行后续处理。 --- # 签约成功通知 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/notify/closeNotify/index.md description: >- 订单关闭通知接口用于在订单被系统自动或手动关闭时,向商户发送异步通知。适用于需要实时掌握订单状态变更的场景。关键特性包括支持多种关闭原因标识及提供详细的订单信息,确保商户能够及时响应并处理相关业务逻辑。 --- # 订单关闭通知 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/notify/dispute/apis/eventCode/arbitiration/index.md description: >- 进入仲裁阶段通知接口用于在支付争议升级至仲裁阶段时向商户发送异步通知。适用于处理涉及复杂纠纷的交易情况,支持全球范围内的支付平台使用。关键参数包括事件代码、订单号及仲裁详情等,帮助商家及时响应并管理处于仲裁状态的交易。 --- # 进入仲裁阶段通知 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/notify/dispute/apis/eventCode/chargeback/index.md description: >- 拒付通知接口用于接收和处理因客户拒付导致的支付状态变更信息。适用于所有需要实时监控交易状态并及时响应拒付情况的商户。关键特性包括支持多种支付方式,自动更新订单状态,并提供详细的拒付原因说明。主要参数涵盖事件代码、订单ID及拒付详情等。 --- # 拒付通知 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/notify/dispute/apis/eventCode/chargebackReturn/index.md description: >- 拒付驳回通知接口用于接收银行或支付机构关于商户成功反驳拒付的结果。适用于处理客户发起的信用卡拒付争议后,当商户提供证据并获得支持时触发。关键特性包括异步回调机制与事件代码chargebackReturn,确保信息实时更新。主要参数涵盖交易ID、状态及详细原因等。 --- # 拒付驳回通知 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/notify/dispute/apis/eventCode/disputeDefensePeriodEnded/index.md description: >- 拒付抗辩时间已截止通知接口用于告知商户拒付抗辩期结束。适用于处理支付争议时,确保商户及时了解拒付流程状态。关键参数包括事件代码(eventCode)、交易ID(transactionId)等,帮助商户更新内部记录并采取相应措施。 --- # 拒付抗辩时间已截止通知 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/notify/dispute/apis/eventCode/fraud/index.md description: >- 欺诈提醒通知接口用于在检测到潜在欺诈行为时向商户发送实时通知。适用于需要即时响应欺诈活动的在线支付场景,支持全球范围内的交易监控。关键特性包括提供详细的交易信息、欺诈评分及建议措施。主要功能涵盖接收异步通知,关键参数包括事件代码(eventCode)、商户订单号及欺诈详情。 --- # 欺诈提醒通知 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/notify/dispute/apis/eventCode/information/index.md description: >- 调单通知接口用于接收支付争议事件的异步通知。适用于处理退款、拒付等支付纠纷场景,确保商户能够及时响应并处理相关问题。关键特性包括自动发送调单信息至指定URL,支持多种事件类型如退款请求、拒付通知等。主要参数包括事件代码、订单ID及交易详情。 --- # 调单通知 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/notify/dispute/apis/eventCode/prearbitration/index.md description: >- 预仲裁通知接口用于在支付争议进入预仲裁阶段时向商户发送通知。适用于处理支付纠纷场景,支持全球范围内的支付服务。该API允许商户及时了解并响应潜在的财务风险。关键参数包括事件代码、交易ID及金额等信息,确保商户能够准确识别和处理相关案件。 --- # 预仲裁通知 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/notify/dispute/apis/eventCode/prearbitrationLost/index.md description: >- 仲裁失败的结果通知接口用于接收并处理交易争议中仲裁失败的通知。适用于商家需及时响应争议裁决结果的场景,支持全球范围内的支付争议处理。关键参数包括事件代码、商户ID及争议详情等,确保商家能够迅速采取相应措施以维护自身权益。 --- # 仲裁失败的结果通知 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/notify/dispute/apis/eventCode/prearbitrationWon/index.md description: >- 仲裁成功的结果通知接口用于接收支付争议处理中胜诉的通知。适用于商家需要了解并记录争议最终结果的场景。该接口通过异步方式发送,确保数据传递的安全性和实时性。关键参数包括事件代码、交易号及处理结果等,支持全球范围内的支付争议处理。 --- # 仲裁成功的结果通知 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/notify/dispute/apis/eventCode/predispute/index.md description: >- 未升级争议通知接口用于接收未升级为正式争议的争议事件通知。适用于早期预警和预防性处理场景,帮助商户在争议升级前采取行动。关键特性包括提供争议预警信息、原因说明及建议措施。主要功能涵盖接收异步通知,关键参数包括事件代码(eventCode)、商户订单号及争议详情。 --- # 未升级争议通知 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/notify/dispute/apis/eventCode/reversed/index.md description: >- 拒付撤销通知接口用于接收和处理因用户拒付后银行或支付机构取消拒付的事件。适用于需要实时更新交易状态的商家系统,支持全球范围内的支付渠道。关键参数包括事件代码、交易ID及撤销时间等,确保商家能够及时调整账务处理策略。 --- # 拒付撤销通知 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/notify/dispute/dispatch/index.md description: >- 调单接口用于处理持卡人对不明交易的查询请求。当持卡人对其账单上的某笔交易有疑问时,可通过此接口向商户索要交易详情副本。商户需提交相关交易单据至收单机构,再由其转交至发卡行以供核实。关键参数包括交易编号、发生日期等,确保信息准确无误至关重要。 --- # 调单 当持卡人不能辨认其账单上的交易时,他们通常会向发卡行索要一份与交易相关的单据副本,以确定该笔交易是否是他们所为。商户需向收单机构提交该交易单据副本,再由收单机构转交给发卡行。 --- --- url: 'https://acquirer-api-docs-v4.pingpongx.com/notes/zh/notify/notify/index.md' description: >- 异步通知接口用于接收交易相关事件的回调信息。适用于需要实时了解交易状态变化的场景,如交易成功、退款等。开发者需配置可公网访问的`notificationUrl`地址,并确保该服务支持接收和解析HTTP POST请求中的JSON数据。关键特性包括自动重试机制以应对网络不稳定情况,以及明确的HTTP响应 --- # 异步通知 ## 异步通知概述 * 首先,商户侧配置异步回调通知`notificationUrl`地址。 * 每当,交易相关事件发生时(如交易成功),PingPongCheckOut 通知服务将会创建一个JSON对象,其中包含事件相关的数据等信息。 * 然后,PingPongCheckOut 通知服务通过 HTTP POST 请求将JSON对象发送到开发者配置的回调通知`notificationUrl`中。 商户侧在收到回调通知后,可根据异步通知报文做下一步的业务处理。 其流程描述如下: ## 接收异步通知 ### 准备一个支持 HTTP POST 的web服务 PingPongCheckOut 通知服务将以 HTTP POST 方式推送 JSON 格式的数据,因此开发者所提供的 Web 服务需要能够接收并解析来自HTTP POST 请求的 JSON 数据并能够返回相应 HTTP 状态码。 ### 设置回调通知地址 开发者可以通过各接口入参中的 `notificationUrl` 参数配置回调通知Url地址。 > 异步通知受双方网络连接状态影响,请确保通知地址公网可访问 ### 接收并响应 对于商户交易通知响应,遵循以下约定: | 接收结果 | HTTP Code 约定 | 应答报文格式约定 | |------|--------------------------------------------------------------------------------------------------------|-------------------------------------------------| | 接收成功 | 200 <= `httpcode` < 300,比如:200、201、204 | 无需返回应答报文 | | 接收失败 | `httpcode` > 300 或 `httpcode` < 200 200 <= `httpcode` < 300,比如:200、201、204 | 报文体任意 需返回应答报文「FAIL」 | > 重试机制:接收失败的情况下会触发重试机制,PingPongCheckout 会在随后的一段时间内,以递增的时间间隔重发,间隔为 `5s/5s/3m/10m/20m/30m/30m/30m/60m/3h/3h/3h`(若中间重试通知成功,则中断不再继续重试)。 ::: danger 1. 商户不能仅仅依赖于异步通知,如果⻓时间未收到交易结果,商户应该主动向 PingPongCheckout 发起交易查询,查询对应的交易结果; 2. 请不要在`notificationUrl`后面携带query类型的参数,以免丢失,如果一定要携带,请使用pathInfo的URL模式; 3. 异步通知代码处理逻辑不能做登录态校验。 ::: ## PingPongCheckout回调通知服务器信息 如果商户侧需要防火墙配置后才允许 PingPongCheckout 消息通知服务推送数据,请根据下方信息进行防火墙设置,将IP加入到白名单: | 生产环境 | 沙箱环境 | |:--------------|:--------------| | 3.125.243.2 | 52.76.198.228 | | 3.126.196.22 || | 18.195.199.34 || | 188.239.12.25 || ## 通知报文 交易异步通知 退款异步通知 预授权确认通知 预授权撤销通知 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/notify/refundNotify/index.md description: 退款通知接口用于接收支付平台发送的退款结果。适用于商户需要实时了解退款状态的场景,支持自动处理退款信息。关键参数包括退款单号、退款金额及退款状态。 --- # 退款通知 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/notify/status/captureNotify/index.md description: >- 预授权确认通知接口用于接收支付平台发送的预授权确认结果。适用于需要验证预授权交易最终状态的场景,如酒店预订或租车服务。主要功能包括实时更新交易状态,关键参数有订单号、交易金额和确认状态。 --- # 预授权确认通知 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/notify/status/notify/index.md description: >- 支付通知接口用于接收支付状态更新。适用于需要实时了解支付结果的商户,支持订单支付成功、失败等状态的通知。该接口通过异步方式发送HTTP POST请求至商户指定URL,关键参数包括交易号、订单金额及支付状态等。 --- # 支付通知 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/notify/status/voidNotify/index.md description: >- 预授权撤销异步通知用于接收和处理预授权撤销的结果。适用于需要实时了解预授权撤销状态的商户系统。该通知通过异步方式发送,确保高可靠性和低延迟。关键参数包括交易号、商户订单号和撤销结果等,帮助商户及时更新订单状态。 --- # 预授权撤销异步通知 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/onlinePayment/auth/index.md description: >- PingPongCheckout API 用于处理在线支付中的预授权和捕获流程。适用于需要分阶段处理付款的场景,如商品定制或预定服务。关键步骤包括授权、预授权取消、预授权取消查询、预授权确认及预授权确认查询。主要功能通过设置参数如captureDelayHours实现,确保资金在正确时间点从顾客账户 --- # 概览 ## 接口调用说明 接口调用流程: 1. **授权**:预授权交易第一步需要调用 授权请求 创建一笔预授权订单(需要将接口中 captureDelayHours 的值设为 -1) 2. **预授权取消**:商户调用预授权撤销可以对预授权订单进行撤销处理。如果一个预授权交易被撤销,那么原本预留的资金将被释放回卡主的账户。此操作通常在订单被取消或更改时发生。 3. **预授权取消查询**:商户调用预授权撤销查询确认预授权交易是否已成功被撤销。商家可以使用此查询来确定预留的资金是否已经被释放回卡主的账户。 4. **预授权确认**:商户调用捕获,将触发实际的资金转移,将之前预留的金额从卡主账户转移到商家账户。如果交易不被捕获,则预先授权的资金将释放回卡主账户。 5. **预授权确认查询**:商家可以调用预授权确认查询 确认是否扣款成功,查看预留的资金是否仍然存在,或该预授权交易是否已被撤销。 信用卡交易的处理过程中,"Auth Capture"(授权和捕获)是非常常见的一个流程,尤其在线上交易中。这个过程可以分为两个主要阶段:授权(Authorization)和捕获(Capture)。下面是对这两个阶段的简单解释: ## 业务流程 ### 授权(Authorization) 当顾客使用信用卡在线购物并提交订单时,商家首先会向顾客的信用卡发出授权请求(需要将接口中 captureDelayHours 的值设为 -1)。 ### 捕获(Capture) 在商品发货或服务提供完毕后,商家需要向银行发送一个捕获请求来完成这笔交易。捕获请求是告诉银行可以从顾客的账户中扣除之前授权冻结的金额了。银行收到捕获请求后,会正式从顾客的账户中扣款,并将这些资金转移到商家的账户中。这标志着整个支付过程的完成。 ### 示例 假设你在一家网上书店订购了一本书,价格为$30。 1. 在你提交订单时,书店会向你的信用卡发行银行请求$30的授权。 2. 如果你的信用卡通过验证并且账户中有足够的额度,银行会预留这$30并给出授权码。 3. 当书店发货时,他们会执行捕获操作,实际上从你的账户中扣除这$30并开始资金转移过程。 通常情况下,授权和捕获是同步进行的。然而,在某些案例中,商家可能需要在不同的时间点执行这两个步骤。比如说,当一个产品需要定制或者预定时,商家可能会在客户下单时获取授权,然后在产品真正准备好并且发货时再执行捕获。 另外,需要注意的是,每一个授权都有一个有效期,在有效期内商家必须执行捕获操作,超过有效期未执行的话,授权将会过期,届时,即使商家执行捕获也无法完成交易。有效期的长短通常由发卡银行决定,大部分银行设定的有效期是7天。 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/onlinePayment/debit/index.md description: >- PingPongCheckout API 的 debit 交易支持信用和钱包两种支付方式,提供收银台和 S2S 对接模式。收银台对接包括 JS-SDK 和 Redirect 模式,简化开发过程并提高效率;S2S 对接则更加灵活但需商户具备 PCI-DSS 认证。此外,API 支持退款操作及异步通知功 --- # 概览 debit 交易主要分为信用和钱包两种支付方式,对接形式分为收银台和 S2S 支付 ## 下单 根据业务场景选择适合的开发模式,调用下单接口 * 收银模式下单 * S2S 模式下单 ### 收银台对接 收银台对接的优点 * 全面性:PINGPONG 提供了 JS-SDK 和 Redirect 两种收银台模式。 * 简化开发过程:由于收银台已经封装了大部分功能,开发者可以更专注于实现业务逻辑而非底层实现。 * 高效率:相较于S2S而言,SDK 可以减少开发时间并提升开发效率。 ### S2S 对接 S2S 对接的优点 * 灵活性: S2S 的方式对比收银台对接更加灵活。 ::: danger 注意 该方案要求商户服务器自行保存、处理持卡人的信用卡信息,因此强制要求商户具备PCI-DSS认证。 ::: ## 退款 当满足退款条件时,商户通过调用支付服务提供者的退款接口来发起退款操作。需要注意的是部分支付方式支持全额退款,部分支付方式支持部分退款 具体可以参见退款章节 ## 异步通知 用户完成支付后,PINGPONG 会根据事先约定的异步通知规则,向商户的服务器发送支付结果通知。这个过程是异步的,即支付结果会在用户支付完成后的某个时间点发送给商户系统。 具体可以参见异步通知章节 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/onlinePayment/features/tokenization/cardOnFile/index.md description: >- CardOnFile功能支持商户在用户授权后存储并重复使用用户的支付卡信息。关键参数包括bizType、merchantUserId、createToken和token,用于标识交易类型、用户身份及卡信息标志。通过创建card token,校验卡要素(可选),展示卡列表(可选)以及使用card to --- # CardOnFile ## 关键参数 | 参数字段 | 参数类型 | 参数属性 | 参数说明 | |:---------------|:-----------|:-----|:------------------------------------------------------| | bizType | String(64) | C | 绑卡并交易或绑卡需要验证卡号的情况传固定值 `CardOnFile`,否则不传(使用这个值请联系技术支持) | | merchantUserId | String(64) | M | 商户网站的持卡人 ID,全局唯一,游客模式或不存在的情况传`null` | | createToken | String(1) | M | `Y`/`N`,是否创建token | | token | String(16) | M | 卡信息标志 | ## 交互流程 ### 步骤一:创建card token ::: card title="Hosted" 关联API: [Hosted-JS-SDK](/notes/zh/integrate/sdk-v4/) 或 [获取跳转收银台](/notes/zh/integrate/hosted/) * 收银台模式下,将通过⻚面勾选框来决定createToken 是否为 ,无需接口上送。 * 商户需要传送 ,来标识当前付款人身份。 * PingPongCheckout 根据商户上送的merchantUserId匹配token,无需商户上传 ::: ::: card title="Non-Hosted" 关联API: [token创建](/notes/zh/checkout/api/uniformly/) * 上送参数 。 * 上送参数 ,来标识当前持卡人身份。 * 上送参数 ,进行卡校验。 ::: ### 步骤二:校验卡的要素(可选) 如果您想校验卡的有效性,或者需要同时进行绑卡和支付过程(传入的amount>=0),必须设置`bizType=CardOnFile`。 ### 步骤三:展示卡列表(可选) 同一个用户可能存在多张信用卡,为了优化支付体验,我们需要了列出指定customerId下的卡列表(只展示卡号前6后4)供支持卡人选择。 #### Non-Hosted 这个步骤由商户端完成,商户可以自行记录卡和token的关系列表, 也可以调用PingPongCheckout的卡列表接口。 ### 步骤四:使用card token支付 ```mermaid sequenceDiagram participant 持卡人 as 💳 持卡人 participant 商户网站前端 as 💻 商户网站前端 participant 商户网站后端 as 🏪 商户网站后端 participant pingpongCheckout as 🔄 pingpongCheckout 持卡人->>+商户网站前端: 发起结账 商户网站前端->>+商户网站后端: 1️⃣ 提交订单 商户网站后端->>+pingpongCheckout: 2️⃣ 请求统一支付传入token pingpongCheckout-->>-商户网站后端: 3️⃣ 响应结果 商户网站后端-->>-商户网站前端: 返回初始支付状态 Note over 持卡人,pingpongCheckout: 🚀 token支付过程 loop 轮询获取支付状态 商户网站前端->>+商户网站后端: 查询支付状态 商户网站后端-->>-商户网站前端: 返回当前支付状态 Note over 商户网站前端: 若状态为最终状态则结束轮询 end 商户网站前端-->>-持卡人: 显示最终支付结果 pingpongCheckout->>+商户网站后端: 4️⃣ 📡 异步通知 商户网站后端-->>-pingpongCheckout: 5️⃣ 🟢 响应OK ``` [//]: # "" ::: steps 1. 客户端下单 客户在商户平台发起订单创建 2. 商户服务端请求下单并支付 调用[下单并支付](/notes/zh/checkout/api/uniformly/)接口 * 传入`token` * 如果创建token时候传入了`bizType=CardOnFile`,那么后续使用token交易时候每一笔都需要传送 3. 下单并支付API同步响应支付结果 [下单并支付](/notes/zh/checkout/api/uniformly/)接口会立即返回处理结果 4. 异步通知推送最终结果 系统会通过异步通知机制推送最终的支付结果,详见[异步通知](/notes/zh/notify/notify/) ::: --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/onlinePayment/features/tokenization/codeGrant/index.md description: >- CodeGrant是PingPongCheckout在线支付模块中的授权支付方式,适用于需要用户签约后进行支付的场景。通过调用签约接口获取authUrl完成用户签约,随后使用下单并支付接口传入token、bizType(固定为'CodeGrant')及merchantUserId完成支付。支持解约功 --- # CodeGrant ## 对接流程 ### 签约流程 签约流程如下: ```mermaid sequenceDiagram participant 持卡人 as 💳 持卡人 participant 用户终端 as 📱 用户终端 participant 商户/建站平台 as 🏪 商户/建站平台 participant pingpongCheckout as 🔄 pingpongCheckout participant E-wallet as 💰 E-wallet 持卡人->>用户终端: 选择支付方式 用户终端->>商户/建站平台: 提交签约请求 商户/建站平台->>pingpongCheckout: 请求v4/paymethod/bind pingpongCheckout->>E-wallet: 请求-获取钱包签约地址authUrl E-wallet-->>pingpongCheckout: 返回签约页面地址authUrl pingpongCheckout-->>商户/建站平台: 返回签约页面地址authUrl 商户/建站平台-->>用户终端: 返回签约页面地址authUrl Note over 用户终端,E-wallet: 📝 签约流程 用户终端->>E-wallet: 用户完成签约 E-wallet->>pingpongCheckout: 响应签约结果 pingpongCheckout->>商户/建站平台: 触发📡异步通知 商户/建站平台-->>pingpongCheckout: 响应http code 200 ``` [//]: # " " 开发者调用签约接口获取钱包签约地址authUrl,用户访问authUrl完成签约,触发签约成功异步通知,获取支付凭证token。 ### 解约 发起解约有两种情况: * 商户端调用API进行解约 * 钱包用户可以在钱包侧解约。 以下是需要集成的API清单 解约接口 如果需要解约,可以调 解约接口 ,取消之后token将会失效。 ### 支付流程 ```mermaid sequenceDiagram participant 商户网站后端 as 🏪 商户网站后端 participant pingpongCheckout as 🔄 pingpongCheckout Note right of 商户网站后端: 1️⃣ 🕐 定时任务触发 商户网站后端->>商户网站后端: 2️⃣ 执行定时任务启动-请求扣款 商户网站后端->>pingpongCheckout: 3️⃣ 请求下单并支付接口,传入 token, bizType, merchantUserId pingpongCheckout-->>商户网站后端: 4️⃣ 响应支付结果 Note over 商户网站后端,pingpongCheckout: 🚀 一键支付-交易 pingpongCheckout-->>商户网站后端: 5️⃣ 📡 异步通知 商户网站后端->>pingpongCheckout: 6️⃣ 🟢 响应200 ``` [//]: # "" [//]: # "" [//]: # " " [//]: # "" 以下是需要集成的API清单 下单并支付接口 调 下单并支付接口 传入token,bizType和merchantUserId。 ##### 关键入参: | 参数名 | 类型 | 是否必填 | 描述 | |----------------|--------|------|--------------------------------| | token | String | M | 已有字段,传授权或者签约完成获取的token | | bizType | String | M | 已有字段,新增类型标识认证授权,固定传"CodeGrant" | | merchantUserId | String | M | 会员ID,用户在商户网站的会员ID | > 调用下单并支付接口的时候入参中必须要传入merchantUserId,并且要和认证的时候传入的merchantUserId一致,否则会报错token不存在 下单并支付接口入参示例如下: ::: code-tabs @tab JSON ```json { "accId": "2023042011040310224447", "clientId": "2023042011040310224", "signType": "SHA256", "sign": "{{Sign}}", "version": "1.0", "bizContent": { "captureDelayHours": 0, "amount": 100, "currency": "HKD", "requestId": "{{requestId}}", "payResultUrl": "https://www.baidu.com", "notificationUrl": "https://test-acquirerpay.pingpongx.com/qa/notify", "merchantTransactionId": "{{merchantTransactionId}}", "shopperIP": "192.168.1.1", "token": "7dda0a6f6958105204fd6637001f900efd9b3168c948b68b6f7f2bf063eadf97", "bizType": "CodeGrant", "merchantUserId": "126048960513465", "paymentMethod": { "type": "AlipayHK" }, "customer": { "email": "pass@pingpongx.com" }, "device": { "orderTerminal": "02" } } } ``` > 其他同现有APM支付参数即可 ## 异步通知 ::: danger 注意 1. 当http code 为200的时候,表明商户已经收到报文,商户无需返回额外信息。 2. 响应报文异常重试2次 ::: ### 签约异步通知 ### 支付方式 具体支持使用CodeGrant支付方式列表 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/onlinePayment/features/tokenization/networkToken/index.md description: >- NetworkToken是在线支付模块中的一个功能,用于通过卡组token实现安全支付。适用于需要提高交易安全性与效率的场景。关键参数包括paymentMethod.type(固定为networkToken)、schemeTokenValue(卡组token)、paymentBrand(卡品牌,支持 --- # NetworkToken ## 关键入参说明 使用NetworkToken支付必须要在下单接口或者下单并支付接口的入参基础上添加下面这几个参数: | 参数字段 | 参数类型 | 参数属性 | 参数说明 | |-----------------------------------------|------------|------|-----------------------------------------| | paymentMethod.type | String(16) | C | 固定传入:networkToken,如果用卡组的token必传 | | paymentMethod.cardInfo.schemeTokenValue | String(16) | C | 卡组的token,如果用卡组的token必传 | | paymentMethod.cardInfo.paymentBrand | String(16) | C | 卡品牌,如果用卡组的token必传,可选值为visa/MasterCard | | paymentMethod.cardInfo.tokenCryptogram | String | C | 加密的数值字符串,用于验证卡片和终端之间的交易数据。如果用卡组的token必传 | --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/onlinePayment/features/tokenization/overview/index.md description: >- Tokenization技术用于安全存储购物者的支付信息,支持主要卡品牌及部分本地支付方式。通过生成令牌,可实现更快的结账、订阅支付、自动充值等功能。首次支付时收集支付信息并生成令牌,后续支付使用该令牌即可。默认按商户accId存储令牌。若未完全符合PCI DSS要求,建议使用Tokenizatio --- # Tokenization ## Tokenization 使用Tokenization 技术允许您安全地存储每个购物者的一个或多个支付信息。 这样,您可以提供订阅支付、购物者账户自动充值以及通过使用他们存储的卡片提供更快的结账体验。 我们支持主要的卡品牌和一些本地支付方式。 令牌化的好处包括: 1. 允许购物者存储他们的支付信息,以便之后更快地结账。 2. 向购物者提供他们存储的支付信息以便后续支付。 3. 为订阅或非固定时间表的合同保存支付信息。 4. 提交订阅的后续支付或购物者账户的自动充值。 要保存购物者的支付信息,您只需要在进行支付时传递一些额外的参数。在首次支付中,我们从购物者那里收集支付信息并为其生成一个令牌。然后,令牌被发送到您的服务器以供将来使用。对于后续支付,您需要使用令牌发出请求。 默认情况下,令牌按商户accId存储。 ::: warning 提示 要收集原始的信用卡数据,您需要完全符合PCI DSS(支付卡行业数据安全标准)的要求。如果您已经完全符合PCI DSS的要求,您可以选择创建自己的令牌保险库(Token Vault),或者存储原始信用卡数据以提供更快的结账选项。 ::: ::: note 提示 如果您还没有完全符合PCI DSS(支付卡行业数据安全标准)的要求,我们建议您使用Tokenization 技术来进行支付。通过使用令牌,您可以为您的购物者提供改进的结账体验。 ::: ## 实施方案 您可以为以下几种定期支付类型创建并使用令牌进行支付: * 国际信用卡: CardOnFile * 本地支付: CodeGrant --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/onlinePayment/integration/index.md description: >- 快速启动指南帮助开发者简化PingPongCheckout在线支付API的集成过程。文档涵盖支付回调和查单实现,指导用户从零开始到调试完成整个流程,并提供参考文档支持。适用于需要快速接入安全支付解决方案的电子商务网站与应用,确保交易顺利进行的同时提升用户体验。 --- # 支付回调和查单实现指引 ## 快速启动 ## 简化您的集成应用 ## 调试您的应用 ## 参考文档 ## 集成您的业务 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/onlinePayment/IssuerResponseCodes/index.md description: >- 发卡行响应代码定义了在线支付过程中银行返回的各种状态码及其含义。适用于处理支付请求时遇到的不同错误情况,帮助开发者快速定位问题并采取相应措施。每个响应代码对应特定的支付失败原因,如账户余额不足、卡片过期等,确保交易流程的透明度和可控性。 --- # Issuer Response Codes ## 发卡行响应代码 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/onlinePayment/Klarna/index.md description: >- Klarna测试资源提供用于在线支付集成的测试账号和支付物料信息,支持美国、芬兰、德国及奥地利等地区的支付模拟。关键特性包括对账单和运输地址信息的严格校验,以及虚拟行业接入时的特殊配置需求。 --- # Klarna测试资源 ### 测试账号: | clientId | accId | salt | |:--------------------|:-----------------------|:-------------------------| | 2022092115464510103 | 2022092115464510103123 | 79DAA521F03DC90BAB03B070 | ### 支付物料: | country | currency | phone | code | name | street | postcode | city | |:--------|:---------|:--------------|:-------|:------------------|:------------------------|:---------|:---------| | US | USD | 3055787342 | 123456 | John Doe | 123 Main St Apartment 4 | 10001 | New York | | FI | EUR | 358040123456 | 123456 | Matti Meikäläinen | Esimerkkikatu 123 | 00100 | Helsinki | | DE | EUR | 4901761428434 | 123456 | Max Mustermann | Musterstraße 123 | 10115 | Berlin | | AT | EUR | 6762600456 | 123456 | Johann Schmidt | Hauptstraße 50 | 1040 | Wien | Klarna对 billing,shipping中的国家,城市,地址信息会做严格校验,测试的时候不同国家需要取不同的支付物料信息。 ::: tip 虚拟行业在接入时需要提前报备,在报备配置完成情况下可免除billing,shipping相关信息收集。沙箱环境联调可提前告知技术支持人员进行沙箱环境特殊配置 ::: --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/onlinePayment/modify/Capture/index.md description: >- Capture功能用于国际信用卡支付等支持单独捕获的支付方式,分为授权和捕获两个步骤。支持自动和手动捕获策略,默认为自动捕获。手动捕获需设置captureDelayHours参数并调用CAPTURE-预授权确认API。关键参数包括merchantTransactionId、merchantCaptu --- # Capture ## 业务流程 对于支持单独Capture(捕获)的支付方式(如国际信用卡支付),支付过程分为两个步骤完成: * Authorization:验证购物者的支付细节与发行方,并预留资金。 * CAPTURE:将预留的资金从购物者转移到您的账户。 ```mermaid sequenceDiagram participant 商户网站 as 🏪 商户网站 participant pingpongCheckout as 🔄 pingpongCheckout rect rgb(191, 223, 255) note right of 商户网站: 📋 请求流程 activate 商户网站 activate pingpongCheckout pingpongCheckout->>商户网站: 1️⃣ 🔐 Authorization状态: AUTH_SUCCESS 商户网站->>pingpongCheckout: 2️⃣ 💰 Capture 请求 pingpongCheckout->>商户网站: 3️⃣ 📊 Capture响应 deactivate 商户网站 deactivate pingpongCheckout end rect rgb(200, 220, 240) note right of 商户网站: 📡 异步通知流程 activate 商户网站 activate pingpongCheckout 商户网站-->>pingpongCheckout: 📡 Capture 异步通知 pingpongCheckout-->>商户网站: 🟢 响应200 deactivate 商户网站 deactivate pingpongCheckout end ``` [//]: # "" ## 支持的Capture策略 * 自动Capture(捕获):支付在授权后立即被捕获。这是默认设置。 * 手动Capture(捕获):您通过向 CAPTURE-预授权权确认 API发起请求来捕获每笔支付。 ## 自动Capture 这是默认行为,无需设置。请求支付后,将会自动进行Capture,您只需设置交易异步通知监听交易状态变更。 当您收到`SUCCESS`状态,即代表交易成功,无需调用CAPTURE-预授权权确认API ### 不同场景获取的状态 ## 手动Capture ### step 1 启用手动Capture 要使用手动Capture,您必须手动设置启用特性,在请求下单接口或者下单并支付时候`captureDelayHours`设置为`1`,并且所使用的支付方式支持手动Capture |captureDelayHours| 备注 | |-----------------|----------------------------------| |`0`| 下单之后立即自动capture,无需手动调用CAPTURE-预授权权确认 | |`1`| 手动capture,成功之后还需要调用下CAPTURE-预授权权确认,本地支付不支持 | ### step 2 确认执行Capture的时机 当您在请求支付时候,设置了启用手动Capture,您需要在合适的时机调用CAPTURE-预授权权确认API。 执行Capture,必须在Authorization获取批准之后。因此您必须在支付接口的同步响应或者交易异步通知收到`AUTH_SUCCESS`-预授权成功状态后,再结合您的实际业务情况调用调用CAPTURE-预授权权确认API。 ### step 3 设置关键参数 要调用CAPTURE-预授权权确认API,您需要设置一些重要的参数 * `merchantTransactionId`,从付款响应或异步通知中可以Capture(捕获)的授权的`merchantTransactionId`。 * `merchantCaptureId`,请求Capture的流水号,全局唯一,每次请求都必须不同。 * `notificationUrl`,调用Capture后,同步响应中可能会是`PROCESSING`状态,当您设置了`notificationUrl`时,Capture的状态将会通知到`notificationUrl`设置的URL上,报文详见预授权确认通知 ### step 4 处理Capture状态 当我们处理完您的Capture请求后,我们将向您发送一个异步通知,报文详见预授权确认通知。 ::: note 提示 当您收不到异步通知或者无法确认状态的情况,您可以调用预授权确认查询 ::: 根据`status`取值: * `SUCCESS` Capture成功,此时交易完成,预留的资金从购物者转移到您的账户 * `FAILED` Capture失败,交易失败,资金将会持续冻结,直到执行`VOID`,或者`Authorization`过期,资金自动释放。 #### 不同情况下获取的状态 ## 多次Capture CAPTURE-预授权权确认 API 根据`merchantCaptureId`幂等,您可以安全的多次调用。 ::: note 提示 目前暂不支持部分CAPTURE,CAPTURE的总金额必须等于交易金额 ::: * 当`merchantCaptureId`相同时候,重新调用CAPTURE-预授权权确认 API,您将会获取到查询结果。 * 当您调用CAPTURE-预授权权确认 API失败需要重试时候,您需要更新`merchantCaptureId`重新发起请求。 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/onlinePayment/modify/Refund/index.md description: >- 退款功能允许商家在交易完成后将部分或全部金额返还给购物者。适用于已捕获的支付,支持全额及多次部分退款。通过调用申请退款API发起退款,需设置notificationUrl以处理退款状态。退款具有时效性,且根据merchantRefundId幂等,确保安全多次调用。 --- # Refund Refund(退款)是指在一笔交易已经完成后(即资金已从购物者账户转移到商家账户后),商家将部分或全部交易金额返还给购物者的过程。您可以全额退款,也可以部分退款。您也可以执行多次部分退款,只要金额不超过捕获的金额。 退款是支付领域中常见的一种"修改"操作,它直接影响到已授权或已捕获的支付的状态,并确保资金能够安全地返回到购物者的账户。 ## 发起退款 请求申请退款API,您可以发起退款。 ::: note 提示 1. 手动Capture的交易,您只能在付款已被捕获后才能退款。若您想取消尚未捕获的付款,可以使用Void。 2. 当您的交易无法确认是否已经`CAPTURE`的情况,您可以调用单笔交易查询 3. 退款具有时效性,在一定期限内,您可以发起退款,超出期限无法发起退款。 ::: ## 处理退款状态 调用申请退款API后,在同步响应中您可能会收到`status`可选值: * `SUCCESS`-成功 * `FAILED`-失败 * `PROCESSING`-进行中 为了处理`PROCESSING`的情况,您需要在调用申请退款API时,正确设置`notificationUrl`,以便于正确收到退款通知 ::: note 提示 当您收不到异步通知或者无法确认状态的情况,您可以调用退款查询 ::: ## 多次退款和部分退款 申请退款 API 根据`merchantRefundId`幂等,您可以安全的多次调用。 ::: note 提示 目前支持部分退款,退款总金额必须等于交易金额 ::: * 当`merchantRefundId`相同时候,重新调用申请退款 API,您将会获取到查询结果。 * 当您调用申请退款 API失败需要重试时候,您需要更新`merchantRefundId`重新发起请求。 * 若您想要部分退款,请在申请退款 API中传入小于支付金额的退款金额。 * 支持多次退款且金额不同的场景,您需要更新`merchantRefundId`重新发起请求。 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/onlinePayment/modify/Void/index.md description: >- VOID操作用于取消已授权但未捕获的支付,释放预留资金。适用于支持单独Capture的支付方式如国际信用卡支付。通过调用VOID-预授权撤销API并设置notificationUrl来发起和接收异步通知。状态包括SUCCESS、FAILED及PROCESSING。多次调用需使用不同的merchant --- # VOID 对于支持单独Capture(捕获)的支付方式(如国际信用卡支付),支付过程分为两个步骤完成: * Authorization:验证购物者的支付细节与发行方,并预留资金。 * CAPTURE:将预留的资金从购物者转移到您的账户。 Void:如果您Authorization 成功,但不想操作CAPTURE,可以发起void操作。 void通常指取消一笔已经授权但尚未捕获的支付。此操作会释放之前预留的资金,确保资金不会从购物者的账户中扣除。这与退款不同,退款是针对已经捕获的资金进行的。 void是支付领域中常见的一种"修改"操作,它直接影响到已授权或已捕获的支付的状态。 ## 发起VOID 对于`AUTH_SUCCESS`状态的订单可以通过调用VOID-预授权撤销API发起VOID操作,为了接收VOID的异步通知请设置`notificationUrl`。报文内容详见预授权撤销异步通知 ::: note 提示 当您的交易无法确认是否已经`CAPTURE`的情况,您可以调用单笔交易查询 ::: ## 处理VOID操作的状态 调用VOID-预授权撤销API后,在同步响应中您可能会收到`status`可选值: * `SUCCESS`-成功 * `FAILED`-失败 * `PROCESSING`-进行中 为了处理`PROCESSING`的情况,您需要在调用VOID-预授权撤销API时,正确设置`notificationUrl`,以便于正确收到预授权撤销异步通知 ::: note 提示 当您收不到异步通知或者无法确认状态的情况,您可以调用预授权撤销查询 ::: ## 多次VOID CAPTURE-预授权权确认 API 根据`merchantVoidId`幂等,您可以安全的多次调用。 ::: note 提示 目前暂不支持部分VOID,VOID的总金额必须等于交易金额 ::: * 当`merchantVoidId`相同时候,重新调用CAPTURE-预授权撤销 API,您将会获取到查询结果。 * 当您调用CAPTURE-预授权撤销 API失败需要重试时候,您需要更新`merchantVoidId`重新发起请求。 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/onlinePayment/offlineBarcodePayment/index.md description: >- 线下付款码支付功能支持通过扫描购物者手机钱包中的条形码完成支付,适用于已集成扫码枪的POS系统。主要支持支付宝和微信支付,其中支付宝条形码为16-24位数字,微信支付为18位数字。发起支付请求时需指定支付方式及条形码码值。 --- # 线下付款码支付 ## 线下付款码支付 目前支付宝和微信都支持线下付款码支付,前提是商家POS系统必须包含可以读取条形码的扫码枪,POS系统需要将条形码转换为数值。 商家扫购物者手机钱包应用程序中显示的条形码,POS应用程序在发起付款请求的时候将此条形码数据发送给 PingPong 进行处理。 ## 支付流程 1. 用扫码枪扫购物者的条形码。 2. 将条形码数据转换为数值,以便在付款请求中传递。 例如,数值包含: * 支付宝16-24位。 * 微信支付18位数字。 条形码码值查看如下图所示: > 备注:微信支付沙箱测试需要使用真实的微信钱包条形码码值进行测试。 3. 发起付款请求,调用 下单并支付接口,在`paymentMethod`对象中额外指定: * paymentMethod.type:支付方式 * scanCodeId:条形码码值 ## 支付方式 ### Wechat-Offline 请求示例: ```json { "accId": "2023042011040310224447", "clientId": "2023042011040310224", "signType": "SHA256", "sign": "{{Sign}}", "version": "1.0", "bizContent": { "captureDelayHours": 0, "amount": 0.02, "currency": "CNY", "requestId": "{{requestId}}", "payResultUrl": "https://www.baidu.com", "notificationUrl": "https://test-acquirerpay.pingpongx.com/qa/notify", "merchantTransactionId": "{{merchantTransactionId}}", "paymentMethod": { "type": "Wechat-Offline", "scanCodeId":"1328*******1501" }, "device": { "orderTerminal": "02" } } } ``` ### AlipayCN-Offline 请求示例: ```json { "accId": "2023042011040310224447", "clientId": "2023042011040310224", "signType": "SHA256", "sign": "{{Sign}}", "version": "1.0", "bizContent": { "captureDelayHours": 0, "amount": 1, "currency": "CNY", "requestId": "{{requestId}}", "payResultUrl": "https://www.baidu.com", "notificationUrl": "https://test-acquirerpay.pingpongx.com/qa/notify", "merchantTransactionId": "{{merchantTransactionId}}", "paymentMethod": { "type": "AlipayCN-Offline", "scanCodeId":"286********2272" }, "device": { "orderTerminal": "02" } } } ``` ### AlipayHK-Offline 请求示例: ```json { "accId": "2023042011040310224447", "clientId": "2023042011040310224", "signType": "SHA256", "sign": "{{Sign}}", "version": "1.0", "bizContent": { "captureDelayHours": 0, "amount": 1, "currency": "HKD", "requestId": "{{requestId}}", "payResultUrl": "https://www.baidu.com", "notificationUrl": "https://test-acquirerpay.pingpongx.com/qa/notify", "merchantTransactionId": "{{merchantTransactionId}}", "paymentMethod": { "type": "AlipayHK-Offline", "scanCodeId":"289********2243" }, "device": { "orderTerminal": "02" } } } ``` --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/onlinePayment/overview/index.md description: >- PingPongCheckout API支持在交易成功后于服务端存储持卡人的卡信息,并生成一个token用于后续支付,以提升结账速度。适用于在线支付场景,特别是需要重复使用同一张信用卡的用户。通过Hosted模式下的收银台页面,用户可选择保存卡号,在下次支付时自动展示并回填已保存的卡信息,从而优化结 --- # 概览 在持卡人交易成功后,在PingPongCheckout服务端上存储卡信息,换取卡信息的标志token,该持卡人以当前信用卡进行的后续交易,可使用 token 令牌代替卡信息进行支付。 这将为您提供在PingPongCheckout服务端上存储每个购物者的一个或多个卡信息的服务。并给您的购物者一个更快的结帐体验。 ## 效果展示 Hosted模式的收银台页面,如果勾选了保存卡号,下次支付时候将会自动展示上次的卡信息,如果有多个卡, 将展示已保存的卡列表。选择卡号之后将会自动回填卡信息,优化持卡人的结帐体验。 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/onlinePayment/recurring/overview/index.md description: >- 订阅支付服务允许商家按照预设周期从用户授权账户自动扣款,适用于会员服务、定期商品消费等场景。持卡人需先授权订阅计划与支付信息,之后系统将依据既定规则自动执行扣款。首次支付成功后,后续扣款才能生效。使用前需与技术支持确认扣款及补扣策略。 --- # 概览 订阅支付,是按约定周期向用户已授权支付账户扣款的收款服务。该收款服务,通常运用于商户的会员服务订阅,周期性商品消费等。 ::: warning 投产线需要提前和技术支持同步扣款计划及失败补扣机制策略。 ::: ## 订阅服务的两类事件 订阅需要两类事件: * 持卡人授权 订阅计划的确认和支付账户的扣款授权需用户直接参与。 * 计划扣款 周期性扣款将由系统按约定的规则自动处理。 ## 订阅计划的执行 订阅计划由商户端自行维护,通过请求PingPongCheckout API发起自动扣款。 首期支付成功,后续订阅扣款才能生效。 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/onlinePayment/recurring/recurring/index.md description: >- 订阅支付API允许商户实现定期自动扣款功能,适用于需要定期收费的服务。支持Hosted和Non-Hosted两种接入模式。主要流程包括持卡人授权和计划扣款。关键参数包括bizType(固定值Recurring)和primaryMerchantTransactionId(首次交易标识)。 --- # 订阅支付 ## 接入前提 需要接入下列其中一种模式,以便于完成支付和授权流程 Hosted Non-Hosted ## 交互过程 ### 持卡人授权事件交互流程 ```mermaid sequenceDiagram participant 持卡人 as 💳 持卡人 participant 商户网站前端 as 💻 商户网站前端 participant 商户网站后端 as 🏪 商户网站后端 participant pingpongCheckout as 🔄 pingpongCheckout 持卡人->>+商户网站前端: 发起订阅支付 activate 商户网站前端 商户网站前端->>+商户网站后端: 1️⃣ 提交订单 deactivate 商户网站前端 activate 商户网站后端 商户网站后端->>+pingpongCheckout: 2️⃣ 请求统一下单接口bizType=Recurring pingpongCheckout-->>-商户网站后端: 3️⃣ 响应支付结果 deactivate 商户网站后端 Note over 商户网站前端,pingpongCheckout: 🔐 授权流程(首次支付) %% 轮询流程 activate 商户网站前端 loop 轮询支付状态 商户网站前端->>+商户网站后端: 4️⃣A 查询订单状态 商户网站后端-->>-商户网站前端: 5️⃣A 返回订单状态 end deactivate 商户网站前端 %% 异步通知流程(独立流程) pingpongCheckout-->>+商户网站后端: 4️⃣B 📡 异步通知 activate 商户网站后端 商户网站后端->>-pingpongCheckout: 5️⃣B 🟢 响应OK deactivate 商户网站后端 ``` [//]: # "" [//]: # " " [//]: # "" ::: steps 1. 客户端向商户服务端发起订阅支付 用户在商户平台上选择订阅服务并发起支付请求 2. 商户服务端请求PingPongCheckout服务端 商户系统向PingPongCheckout发起一笔标记为订阅支付的交易 3. PingPongCheckout服务端响应支付结果 处理结果分为两种情况: * 支付成功:授权成功,后续可以发起计划扣款 * 支付失败:授权失败,不能发起计划扣款 ::: ### 计划扣款事件交互流程 ```mermaid sequenceDiagram participant 商户网站后端 as 🏪 商户网站后端 participant pingpongCheckout as 🔄 pingpongCheckout activate 商户网站后端 商户网站后端->>商户网站后端: 1️⃣ 🕐 商户定时任务触发 商户网站后端->>+pingpongCheckout: 2️⃣ 请求统一下单接口带上以下标记bizType=RecurringprimaryMerchantTransactionId pingpongCheckout-->>-商户网站后端: 3️⃣ 响应支付结果 deactivate 商户网站后端 Note over 商户网站后端,pingpongCheckout: 💰 计划扣款(再次支付) %% 异步通知流程(独立流程) pingpongCheckout-->>+商户网站后端: 4️⃣ 📡 异步通知 activate 商户网站后端 商户网站后端->>-pingpongCheckout: 5️⃣ 🟢 响应OK deactivate 商户网站后端 ``` [//]: # [//]: # "" [//]: # " " [//]: # "" ::: steps 1. 商户服务端执行计划扣款 根据订阅计划,商户系统在指定时间触发扣款流程 2. 商户服务端请求PingPongCheckout服务端 调用[下单并支付](/notes/zh/checkout/api/uniformly/)接口,发起一笔标记为订阅支付的交易,并带上发生授权时候的商户订单号 3. PingPongCheckout服务端响应支付结果 系统处理扣款请求并返回处理结果 ::: ## API清单 ## 服务端接入 ### 持卡人授权 | 字段名称 | 类型 | 必填 | 描述 | |:-----------------------------|:-----------|:----|:------------------------------------| | bizType | String(64) | M | Recurring交易标识,固定值`Recurring` | 在请求下单并支付 时候新增参数`bizType`=`Recurring`,标记当前交易为recurring交易 ### 计划扣款 | 字段名称 | 类型 | 必填 | 描述 | |:-----------------------------|:-----------|:----|:------------------------------------| | primaryMerchantTransactionId | String(64) | M | 首次成功下单时候异步通知中的merchantTransactionId | | bizType | String(64) | M | Recurring交易标识,固定值`Recurring` | 商户服务端请求下单并支付,发起计划扣款 * 新增参数`bizType`=`Recurring`,标记当前交易为recurring交易 * 新增参数`primaryMerchantTransactionId`,值为首次扣款时候的`merchantTransactionId` * 参数`cardInfo`由`primaryMerchantTransactionId`代替,不用传送 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/onlinePayment/sandbox/index.md description: >- 沙箱环境提供给开发者进行接口开发和调试,账号仅限于该环境中使用。访问地址为https://sandbox-acquirer-payment.pingpongx.com。提供了多种测试账号与支持的本地支付方式,包括Wechat Pay、AlipayCN等,并列出了可用于测试的卡号及其属性,如是否支持3 --- # 沙箱环境使用说明 沙箱环境用于开发者进行接口开发、调试,沙箱环境的账号仅可以在沙箱环境中使用。 ## 访问地址 | env | host | |:----|:-----------------------------------------------| | 沙箱 | https://sandbox-acquirer-payment.pingpongx.com | ## 沙箱环境测试资源 ### 测试账号 | clientId | accId | salt | 支持的本地支付方式 | |:--------------------|:-----------------------|:-------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | 2018092714313010016 | 2018092714313010016289 | BCE27A281029F5EAF3CC0E82 | Klarna Wechat Pay AlipayCN AlipayHK DANA TrueMoney Wallet Rabbit LINE Pay GCash Boost TNG eWallet BPI | | 2018092714313010016 | 2018092714313010016291 | F78BC96A55548B2319EE68E0 | DOKU BLIK EPS Giropay Multibanco Mybank Trustly PaybyBank Paysera Bancontact Grab Pay Skrill PromptPay | ### 测试卡号 | 测试卡号 | 过期年月 | cvv | 卡品牌 | 卡是否支持3DS | 可能的支付结果 | |:-----------------|:--------|:------|:-----------------|:---------|:--------| | 4012001037141112 | 12/27 | 840 | VISA | 不支持 | 成功/失败 | | 5204740000001002 | 任意的将来时间 | 任意三位数 | Masrercard | 支持 | 成功/失败 | | 5200000000001096 | 任意的将来时间 | 任意三位数 | Masrercard | 支持 | 成功/失败 | | 341111599241000 | 12/25 | 123 | American Express | 不支持 | 成功/失败 | | 6250947000000014 | 12/33 | 123 | CHINA\_UNION\_PAY | 不支持 | 成功/失败 | ::: note 提示 3D挑战页验证码: 1234 ::: ## 测试用例 测试用例 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/Afterpay/index.md description: >- Afterpay是一种先购买后分期付款的支付方式,适用于希望为客户提供灵活支付选项的在线商家。主要特点包括四次无息分期付款、覆盖澳大利亚、美国、英国等市场以及简单的集成流程,有助于提高转化率和平均订单价值。 --- # Afterpay --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/AkuLaku/index.md description: >- AkuLaku是一种先买后付的支付方式,主要服务于东南亚市场,允许消费者分月付款。该支付方式无需信用卡即可使用,支持多种还款期限选择,为用户提供了灵活便捷的支付体验,特别适合在线购物和小额消费场景。 --- # AkuLaku --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/Alfamart/index.md description: >- Alfamart是一种在印度尼西亚广泛使用的现金支付方式,允许用户通过遍布全国的便利店网络进行支付。适用于没有银行账户或信用卡的消费者,支持在线购物、账单支付等多种场景。主要特点包括即时确认交易和广泛的地理覆盖范围。 --- # Alfamart --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/Alipay/index.md description: >- Alipay是一种广泛应用于中国及部分亚洲地区的在线支付方式,支持网页、移动应用等多种场景。用户可通过支付宝账户或绑定银行卡完成快速安全的支付。商家接入Alipay后,能够覆盖更广泛的消费群体,提升交易成功率。 --- # Alipay --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/AlipayHK/index.md description: >- AlipayHK是一种在香港地区广泛使用的电子支付方式,支持用户通过手机应用进行线上及线下支付。主要特点包括便捷的二维码支付、即时转账以及丰富的本地化服务如缴费、购票等。适用于各类商户接入以满足香港消费者的支付需求。 --- # AlipayHK --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/ApplePay/index.md description: >- Apple Pay 是一种安全无缝的支付方式,适用于应用内、实体店和网页支付。采用Tokenization技术存储支付信息,并通过Touch ID或Face ID进行支付确认。在欧洲实施时符合PSD2 SCA要求。用户需使用兼容设备、Safari浏览器(网页支付)、位于支持地区并已添加银行卡至App --- # ApplePay Apple Pay 提供了一种安全且无缝的支付方式,可以在应用内、实体店和网页上使用。Apple Pay 采用Tokenization技术,将支付信息安全地存储在用户的 Apple Pay 兼容设备中,并通过 Touch ID 或 Face ID 进行支付确认。如果你在欧洲实施 Apple Pay,它是符合 PSD2 SCA(强客户认证)要求的。 当用户选择 Apple Pay 时,会显示一个支付表单,用户可以在其中选择银行卡并提供联系信息和送货地址。然后,系统会提示用户通过 Face ID 或 Touch ID 进行支付认证。 **付款人只有在满足以下条件时才能使用 Apple Pay 作为支付方式选项:** 1. 使用[兼容 Apple Pay 的设备](https://support.apple.com/en-us/102896) 2. 如果在网页上支付,则使用 Safari 浏览器。 3. 位于[Apple Pay 可用的国家或地区](https://support.apple.com/en-us/102775) 4. 已在他们的 Apple Pay 钱包中添加了一张现有的银行卡。详见[如何设置 Apple Pay](https://support.apple.com/zh-cn/guide/iphone/iph9b7f53382/ios) **PCI合规和风控要求** | 集成方式 | PCI DSS | 风控JS | 3DS组件 | |:-----------------|:--------|:-----|:------| | 内嵌收银台 | 无需 | 无需 | 无需 | | 跳转收银台 | 无需 | 无需 | 无需 | | Server To Server | 需要 | 无需 | 无需 | --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/ApplePay/checkout/index.md description: >- 介绍Apple Pay收银台集成流程,包括跳转收银台交互和订阅支付集成。适用于需要支持Apple Pay支付的商户,覆盖全球多个地区。关键特性包括预下单获取支付URL、渲染收银台以及订阅支付模式下的自动扣费功能。集成过程中需设置`merchantUserId`、`createToken`等参数以建立 --- # Apple Pay 收银台集成 ## ApplePay-跳转收银台交互流程 ```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' } }}%% sequenceDiagram participant Merchant as 🏪 商户后端 participant Frontend as 💻 商户前端 participant PP as 🔄 PingPong服务端 participant Hosted as 🛒 跳转收银台 participant Apple as 🍎 Apple Pay Note over Merchant, Apple: 🚀 Apple Pay跳转收银台集成流程 Note over Merchant, Frontend: 📋 准备阶段:• 获取访问凭证• 准备跳转链接 Merchant->>+PP: 1️⃣ 获取paymentUrl Note right of PP: 调用收银台预下单接口生成支付链接 PP-->>-Merchant: 返回paymentUrl Merchant->>Frontend: 2️⃣ 传递跳转参数到前端 Frontend->>Frontend: 3️⃣ 构建跳转链接 Note right of Frontend: 使用paymentUrl构建完整链接 Frontend->>+Hosted: 4️⃣ 跳转到PingPong收银台 Note right of Hosted: 在新窗口或当前页面打开收银台页面 Hosted->>Hosted: 5️⃣ 初始化收银台界面 Note right of Hosted: 显示支付方式列表加载Apple Pay组件 Hosted-->>-Frontend: 收银台加载完成 Note over Hosted, Apple: 💳 Apple Pay支付流程 User->>Hosted: 6️⃣ 用户选择Apple Pay支付 Hosted->>+Apple: 7️⃣ 调用Apple Pay API Note right of Apple: • 显示Apple Pay界面• Touch ID/Face ID验证• 获取支付令牌 Apple-->>-Hosted: 返回加密支付令牌 Hosted->>+PP: 8️⃣ 发送支付请求(含加密令牌) PP->>PP: 9️⃣ 处理支付 Note right of PP: • 解密Apple Pay令牌• 风控检查• 支付路由处理 alt ✅ [支付成功] PP-->>Hosted: 🎉 支付成功 Hosted->>Hosted: 显示成功页面 Hosted-->>Frontend: 可选的页面回调 Note over Frontend: 支付成功处理和页面跳转 else ❌ [支付失败] PP-->>Hosted: ❌ 支付失败 Hosted->>Hosted: 显示错误页面 Hosted-->>Frontend: 可选的错误回调 Note right of Frontend: 错误处理和用户提示 end Note over Merchant, PP: 🎯 Apple Pay跳转收银台流程完成 ``` ## 集成导航 ### Step1 请求收银台预下单 在API收银台预下单的响应中,您可以获取`paymentUrl`用于跳转收银台 ### Step2 渲染收银台 使用Step1获取的`paymentUrl`跳转收银台,接入文档: * 跳转收银台 ## Apple Pay 订阅支付集成 Apple Pay 支持订阅支付模式,允许商户为用户设置定期自动扣费服务。 ### 集成流程 #### Step1 首笔支付(跳转收银台模式) 首次订阅支付需要通过跳转收银台模式完成,用于建立订阅关系并获取支付令牌。使用收银台预下单接口。 **关键参数说明:** | 参数名称 | 参数说明 | 是否必填 | |:---------|:---------|:---------| | `merchantUserId` | 商户用户唯一标识 | 必填 | | `createToken` | 是否创建支付令牌,固定值"Y" | 必填 | | `bizType` | 业务类型,固定值"CodeGrant" | 必填 | | `recurringInfo` | 订阅信息对象 | 必填 | **recurringInfo 订阅信息参数:** | 参数名称 | 参数说明 | 示例值 | |:---------|:---------|:-------| | `recurringPaymentStartDate` | 订阅开始时间 | "2025-06-01 00:00:00" | | `recurringPaymentIntervalUnit` | 扣费周期单位 | "month" | | `recurringPaymentIntervalCount` | 扣费周期数量 | "6" | | `recurringPaymentEndDate` | 订阅结束时间 | "2025-12-01 00:00:00" | **完整请求示例:** **订阅支付特殊参数:** | 参数名称 | 参数值 | |:---------|:-------| | `bizType` | "CodeGrant" | | `createToken` | "Y" | | `merchantUserId` | "126048960513465" | **recurringInfo 参数示例:** ```json "recurringInfo": { "recurringPaymentStartDate": "2025-06-01 00:00:00", "recurringPaymentIntervalUnit": "month", "recurringPaymentIntervalCount": "6", "recurringPaymentEndDate": "2025-12-01 00:00:00" } ``` #### Step2 获取支付令牌 首笔支付成功后,系统会通过交易异步通知返回支付令牌(token)。 ::: warning 重要提醒 * 只有首次交易状态为 `SUCCESS` 时才能获取有效的支付令牌 * 请妥善保存令牌,用于后续自动扣费 * 令牌与 `merchantUserId` 绑定,请确保一致性 ::: #### Step3 后续自动扣费(Non-Hosted模式) 使用获取的令牌进行后续自动扣费,调用下单并支付接口。 **关键参数:** | 参数名称 | 参数说明 | 是否必填 | |:---------|:---------|:---------| | `bizType` | 业务类型,固定值"CodeGrant" | 必填 | | `merchantUserId` | 与首笔支付保持一致 | 必填 | | `token` | 从首笔支付异步通知中获取 | 必填 | **二次扣款请求示例:** **二次扣款特殊参数:** | 参数名称 | 参数值 | |:---------|:-------| | `bizType` | "CodeGrant" | | `merchantUserId` | "126048960513465" | | `token` | "81cf697a30731d407b87b680e044a351" | ### 注意事项 1. **令牌管理**:支付令牌有效期为20年,请关注令牌状态并及时处理失效情况 2. **订阅周期**:合理设置订阅周期,避免过于频繁的扣费 3. **用户体验**:建议在订阅前明确告知用户扣费规则和取消方式 4. **异常处理**:做好扣费失败的处理逻辑,如重试机制、用户通知等 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/ApplePay/s2s_decryptionMode/index.md description: >- 介绍如何通过解密Token模式集成ApplePay API,适用于需要符合PCI合规的商户。此模式下,商户使用自持证书对支付Token进行解密,并将信息传递给PingPongCheckout以完成支付流程。主要步骤包括请求下单并支付,以及处理不同状态码如SUCCESS、PROCESSING和FAIL --- # ApplePay API集成-解密Token模式 使用商户的证书,对支付Token进行解密,传送解密信息给PingPongCheckout,获取支付结果。 ## 1.解密Token模式交互流程 ```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' } }}%% sequenceDiagram participant Merchant as 🏪 商户后端 participant Frontend as 💻 商户前端 participant Apple as 🍎 Apple Pay participant PP as 🔄 PingPong服务端 Note over Merchant, PP: 🔐 ApplePay解密Token模式交互流程 Note over Merchant, Frontend: 📋 准备阶段:• 前端集成Apple Pay JS API• 商户后端准备证书 Frontend->>+Apple: 1️⃣ 前端调用Apple Pay JS API Note right of Apple: • 显示Apple Pay界面• 用户身份验证• 获取支付令牌 Apple-->>-Frontend: 返回加密支付令牌 Frontend->>Merchant: 2️⃣ 发送加密令牌到商户后端 Note right of Merchant: 接收加密的Apple Pay支付令牌 Merchant->>Merchant: 3️⃣ 使用商户证书解密令牌 Note right of Merchant: • 使用私钥解密• 提取支付信息• 验证令牌有效性 Merchant->>+PP: 4️⃣ 发送解密后的支付信息 Note right of PP: 调用下单并支付API提交解密后的支付数据 PP->>PP: 5️⃣ 处理支付 Note right of PP: • 风控检查• 支付路由• 交易处理 alt ✅ [支付成功] PP-->>-Merchant: 🎉 支付成功响应 Merchant->>Merchant: 更新订单状态 Merchant-->>Frontend: 通知前端支付结果 else ❌ [支付失败] PP-->>-Merchant: ❌ 支付失败响应 Merchant->>Merchant: 记录失败原因 Merchant-->>Frontend: 通知前端支付失败 end Note over Merchant, PP: 🎯 ApplePay解密Token模式流程完成 ``` ## 2. 集成导航 ::: danger 提示 1. 根据您的集成情况,通过API(解密Token模式)接入ApplePay,您需要符合PCI合规。 2. 您需要提前完成对ApplePay API 页面部分交互集成。 ::: ### 请求下单并支付 在API下单并支付的响应中: 1. status 为 `SUCCCESS` 时,订单已支付。 2. status 为 `PROCESSING` 时,订单已创建,但未支付。 3. status 为 `FAILED` 时,订单创建失败。 ## 3. 关键参数 ## 4. 参数示例 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/ApplePay/s2s_encryptionMode/index.md description: >- 介绍如何通过PingPongCheckout组件集成Apple Pay API,使用加密Token模式。适用于需要支持Apple Pay支付的商户,覆盖全球主要市场。关键步骤包括传送加密Token至服务端进行解密处理以完成支付。请求下单并支付时,响应状态码`SUCCESS`表示支付成功,`PROCE --- # ApplePay API集成-加密Token模式 使用PingPongCheckout组件,实现Apple Pay API集成。商户传送加密Token给PingPongCheckout服务端,PingPongCheckout服务端对加密Token进行解密,完成支付。 ## ApplePay-加密Token交互流程 ```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' } }}%% sequenceDiagram participant M as 🏪 商户后端 participant F as 💻 商户前端 participant A as 🍎 Apple Pay participant P as 🔄 PingPong服务端 Note over F,A: 1. 发起支付 F->>+A: 调用Apple Pay API A-->>-F: 返回加密令牌 Note over F,M: 2. 令牌传递 F->>M: 发送加密令牌 Note over M,P: 3. 支付处理 M->>+P: 提交到PingPong P->>P: 解密令牌 P->>P: 执行支付 alt 支付成功 P-->>M: 🎉 支付成功响应 Note over M: 更新订单状态 M-->>F: 通知支付成功 else 支付失败 P-->>M: ❌ 支付失败响应 Note over M: 记录失败原因 M-->>F: 通知支付失败 end deactivate P ``` ## 集成导航 ::: note 提示 1. 根据您的集成情况,通过API(加密Token模式)接入ApplePay,要提前完成对ApplePay API 页面部分交互集成 ::: ### 请求下单并支付 在API下单并支付的响应中: 1. status 为 `SUCCCESS` 时,订单已支付。 2. status 为 `PROCESSING` 时,订单已创建,但未支付。 3. status 为 `FAILED` 时,订单创建失败。 ### 关键参数 ### 参数示例 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/ApplePay/s2s/index.md description: >- 介绍如何通过Server To Server方式集成Apple Pay,接受信用卡和借记卡付款。适用于需要符合PCI DSS要求的商家。集成步骤包括风控组件和3DS组件集成、请求下单并支付等。支持两种Apple Pay传参方式。 --- # ApplePay集成-S2S 通过集成收银台,接受信用卡和借记卡付款。 ## PCI合规 ::: note 提示 根据您的集成情况,PingPongCheckout 可能要求您提交 PCI DSS 文档,然后才能在生产环境中接受信用卡支付。 ::: 接受Apple Pay付款,需要符合PCI DSS的要求。详见PCI DSS 合规导航 | 集成方式 | PCI DSS | 风控JS | 3DS组件 | |:-----------|:--------|:-----|:-------------| | 内嵌收银台 | 无需 |无需 | 无需 | | 跳转收银台 | 无需 |无需 | 无需 | | Server To Server | 需要 |无需 | 无需 | ## 集成导航 ### Step1 风控组件和3DS组件集成 详见 Dynamic 3D Secure ### Step2 请求下单并支付 在API下单并支付的响应中: 1. status 为 `SUCCCESS` 时,订单已支付。 2. status 为 `PROCESSING` 时,订单已创建,但未支付。 1. `bizContent.threeDContinue` = `false` 无需3DS验证,您可以等待异步通知通知。 2. `bizContent.threeDContinue` = `true`,需要3DS验证,您需要跳转到3DS验证页面。 3. status 为 `FAILED` 时,订单创建失败。 详见 国际信用卡支付 目前,有两种Apple Pay 传参方式被支持: ::: cardList 2 ```yaml - name: Encryption Mode desc: 您传递 Apple 的加密的消息,PingPongCheckout 会自动解密。 bgColor: '#F0DFB1' textColor: '#242A38' - name: Decryption Mode desc: 您预先解密Apple 的加密的消息,并将解密后的消息传递到PingPongCheckout。 bgColor: '#DFEEE7' textColor: '#2A3344' ``` ::: --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/ApplePay/sdk_domain_association/index.md description: >- Apple Pay 域名验证指南介绍如何在网站上启用 Apple Pay 功能。适用于希望在其网站上集成 Apple Pay 的商户。关键步骤包括获取和部署验证文件,确保文件路径、名称及内容正确,并支持 HTTPS 访问。完成验证后,Apple 将自动检测并确认域名控制权,允许商户使用 Apple --- # Apple Pay On Web JS-SDK商户域名验证申请流程 ## 1.申请材料 请将`申请材料`发送给邮箱`acq-pmteam@pingpong.com`,并抄送到`acq-tech@pingpongx.com`和 `acq-ts@pingpongx.com`。 1. 商户名称 2. 商户 AccId 3. 商户 ClientId 4. 商户 域名(如果存在多个,请填写多个,注意和accId,clientId保持配对) ## 域名验证流程 为了在您的网站上启用 Apple Pay 功能,您需要完成 Apple 的域名验证流程,证明您对该域名拥有控制权。以下是详细步骤: ### step-1:获取验证文件 1. 您将通过邮件收到一个名为 `apple-developer-merchantid-domain-association.txt` 的验证文件。该文件由Apple 预生成,请勿手动修改。 2. 此文件包含 Apple 预先生成的唯一字符串,用于验证您对域名的所有权。 3. **重要:** 请勿修改此文件的内容,任何更改都将导致验证失败。 ### step-2:部署验证文件 1. 在您的 Web 服务器上创建 `.well-known` 目录(如果尚不存在)。 2. 将 `apple-developer-merchantid-domain-association.txt` 文件上传到此目录中。 3. 确保文件可通过 HTTPS 协议访问。 ``` https://您的域名/.well-known/apple-developer-merchantid-domain-association.txt ``` ## 验证要求 * **文件路径**:必须位于 `/.well-known/` 目录下 * **文件名**:必须严格为 `apple-developer-merchantid-domain-association.txt` * **文件内容**:必须与 Apple 提供的原始内容完全一致 * **访问协议**:必须支持 HTTPS 访问 ## 验证确认 完成部署后,您可以通过以下方式确认验证文件是否正确配置: 1. 在浏览器中访问 `https://您的域名/.well-known/apple-developer-merchantid-domain-association.txt` 2. 确认返回的内容与您收到的原始文件内容完全一致 3. 确认文件能够正常下载且无任何错误 ## shell 脚本示意 下面通过shell脚本说明域名验证文件的部署过程。 ::: danger 提示 此脚本将检查并部署 Apple Pay 域名验证文件。 脚本只做流程说明和参考,请根据您的实际情况进行修改,请勿直接运行。 ::: ```bash #!/bin/bash # Apple Pay 域名验证文件部署脚本 # 配置变量 DOMAIN="example.com" # 替换为您的域名 WEB_ROOT="/var/www/$DOMAIN" # 替换为您的网站根目录 FILE_PATH="$HOME/Downloads/apple-developer-merchantid-domain-association.txt" # 替换为验证文件的本地路径 # 显示欢迎信息 echo "===== Apple Pay 域名验证文件部署工具 =====" echo "域名: $DOMAIN" echo "网站根目录: $WEB_ROOT" echo "验证文件: $FILE_PATH" echo "========================================" # 检查验证文件是否存在 if [ ! -f "$FILE_PATH" ]; then echo "错误: 验证文件不存在于 $FILE_PATH" echo "请确保您已下载 Apple 提供的验证文件" exit 1 fi # 创建 .well-known 目录 echo "正在创建 .well-known 目录..." mkdir -p "$WEB_ROOT/.well-known" if [ $? -ne 0 ]; then echo "错误: 无法创建 .well-known 目录,请检查权限" exit 1 fi # 设置目录权限 echo "设置目录权限..." chmod 755 "$WEB_ROOT/.well-known" # 复制验证文件 echo "复制验证文件到目标位置..." cp "$FILE_PATH" "$WEB_ROOT/.well-known/apple-developer-merchantid-domain-association.txt" if [ $? -ne 0 ]; then echo "错误: 无法复制验证文件,请检查权限" exit 1 fi # 设置文件权限 echo "设置文件权限..." chmod 644 "$WEB_ROOT/.well-known/apple-developer-merchantid-domain-association.txt" # 验证部署 echo "验证文件部署..." if command -v curl &> /dev/null; then echo "使用 curl 验证文件访问..." curl -s -o /dev/null -w "HTTP状态码: %{http_code}\n" "https://$DOMAIN/.well-known/apple-developer-merchantid-domain-association.txt" echo "验证文件内容(前20个字符):" curl -s "https://$DOMAIN/.well-known/apple-developer-merchantid-domain-association.txt" | head -c 20 echo "..." else echo "curl 未安装,请手动验证文件是否可访问:" echo "https://$DOMAIN/.well-known/apple-developer-merchantid-domain-association.txt" fi echo "========================================" echo "部署完成!请在浏览器中访问以下地址确认验证文件是否正确部署:" echo "https://$DOMAIN/.well-known/apple-developer-merchantid-domain-association.txt" echo "" echo "如果您能看到文件内容,且内容与 Apple 提供的原始文件完全一致,则表示文件已成功部署。" ``` ## 常见问题 * **404 错误**:检查文件路径和名称是否正确 * **内容不匹配**:确认文件未被修改,且未出现编码问题 * **HTTPS 问题**:确保您的域名已正确配置 SSL 证书 完成验证后,Apple 将自动检测您的域名验证状态,验证成功后您将能够在网站上使用 Apple Pay 功能。 > **注意**:域名验证是启用 Apple Pay 的必要步骤,请确保严格按照要求完成配置。 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/ApplePay/sdk/index.md description: >- ApplePay内嵌收银台集成文档介绍了如何在网站中集成ApplePay支付方式,适用于需要为用户提供便捷支付体验的在线商户。覆盖全球多个国家和地区,支持订阅支付模式。集成流程包括提交域名申请、请求预下单获取accessToken、渲染内嵌收银台以及设置定期自动扣费服务。 --- # ApplePay 内嵌收银台集成 ## ApplePay-内嵌收银台交互流程 ```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' } }}%% sequenceDiagram participant Merchant as 🏪 商户后端 participant Frontend as 💻 商户前端 participant PP as 🔄 PingPong服务端 participant Hosted as 🛒 内嵌收银台 participant Apple as 🍎 Apple Pay Note over Merchant, Apple: 📱 ApplePay内嵌收银台交互流程 Note over Merchant, Frontend: 📋 准备阶段:• 获取访问凭证• 准备内嵌收银台 Merchant->>+PP: 1️⃣ 获取accessToken Note right of PP: 调用收银台预下单接口生成内嵌收银台访问凭证 PP-->>-Merchant: 返回accessToken Merchant->>Frontend: 2️⃣ 传递accessToken到前端 Frontend->>+PP: 3️⃣ 初始化内嵌收银台 Note right of Frontend: 使用accessToken初始化Hosted-JS-SDK PP-->>-Frontend: 返回收银台配置 Frontend->>+Hosted: 4️⃣ 渲染内嵌收银台 Note right of Hosted: 在商户页面内嵌显示收银台加载Apple Pay组件 Hosted-->>-Frontend: 内嵌收银台加载完成 Note over Hosted, Apple: 💳 Apple Pay支付流程 User->>Hosted: 5️⃣ 用户选择Apple Pay支付 Hosted->>+Apple: 6️⃣ 调用Apple Pay API Note right of Apple: • 显示Apple Pay界面• 用户身份验证• 获取支付令牌 Apple-->>-Hosted: 返回加密支付令牌 Hosted->>+PP: 7️⃣ 发送支付请求(含加密令牌) PP->>PP: 8️⃣ 处理支付 Note right of PP: • 解密Apple Pay令牌• 风控检查• 支付路由处理 alt ✅ [支付成功] PP-->>Hosted: 🎉 支付成功 Hosted->>Hosted: 显示成功页面 Hosted-->>Frontend: 支付成功回调 Note over Frontend: 支付成功处理和页面更新 else ❌ [支付失败] PP-->>Hosted: ❌ 支付失败 Hosted->>Hosted: 显示错误页面 Hosted-->>Frontend: 支付失败回调 Note right of Frontend: 错误处理和用户提示 end Note over Merchant, PP: 🎯 ApplePay内嵌收银台流程完成 ``` ## 集成导航 ::: danger 提示 使用SDK集成需要将您的网站域名提交PingPongCheckout的域名白名单中。 ::: ### step0 提交申请 请将申请材料发送给邮箱`acq-pmteam@pingpong.com`,并抄送到`acq-ts@pingpongx.com` **申请材料如下:** 1. 商户名称 2. 商户 AccId 3. 商户 ClientId 4. 网站域名 ### Step1 请求收银台预下单 在API收银台预下单的响应中,您可以获取`accessToken`用于内嵌收银台渲染 ### Step2 渲染收银台 使用Step1获取的`accessToken`渲染内嵌收银台,接入文档:内嵌收银台 ## Apple Pay 订阅支付集成 Apple Pay 支持订阅支付模式,允许商户为用户设置定期自动扣费服务。 ### 集成流程 #### Step1 首笔支付(内嵌收银台模式) 首次订阅支付需要通过内嵌收银台模式完成,用于建立订阅关系并获取支付令牌。使用收银台预下单接口。 **关键参数说明:** | 参数名称 | 参数说明 | 是否必填 | |:---------|:---------|:---------| | `merchantUserId` | 商户用户唯一标识 | 必填 | | `createToken` | 是否创建支付令牌,固定值"Y" | 必填 | | `bizType` | 业务类型,固定值"CodeGrant" | 必填 | | `recurringInfo` | 订阅信息对象 | 必填 | **recurringInfo 订阅信息参数:** | 参数名称 | 参数说明 | 示例值 | |:---------|:---------|:-------| | `recurringPaymentStartDate` | 订阅开始时间 | "2025-06-01 00:00:00" | | `recurringPaymentIntervalUnit` | 扣费周期单位 | "month" | | `recurringPaymentIntervalCount` | 扣费周期数量 | "6" | | `recurringPaymentEndDate` | 订阅结束时间 | "2025-12-01 00:00:00" | **完整请求示例:** | paymentMethods | scenario | |:---------------|:---------| | ApplePay | subscription | **订阅支付特殊参数:** | 参数名称 | 参数值 | |:---------|:-------| | `bizType` | "CodeGrant" | | `createToken` | "Y" | | `merchantUserId` | "126048960513465" | **recurringInfo 参数示例:** ```json "recurringInfo": { "recurringPaymentStartDate": "2025-06-01 00:00:00", "recurringPaymentIntervalUnit": "month", "recurringPaymentIntervalCount": "6", "recurringPaymentEndDate": "2025-12-01 00:00:00" } ``` #### Step2 获取支付令牌 首笔支付成功后,系统会通过交易异步通知返回支付令牌(token)。 ::: warning 重要提醒 * 只有首次交易状态为 `SUCCESS` 时才能获取有效的支付令牌 * 请妥善保存令牌,用于后续自动扣费 * 令牌与 `merchantUserId` 绑定,请确保一致性 ::: #### Step3 后续自动扣费(Non-Hosted模式) 使用获取的令牌进行后续自动扣费,调用下单并支付接口。 **关键参数:** | 参数名称 | 参数说明 | 是否必填 | |:---------|:---------|:---------| | `bizType` | 业务类型,固定值"CodeGrant" | 必填 | | `merchantUserId` | 与首笔支付保持一致 | 必填 | | `token` | 从首笔支付异步通知中获取 | 必填 | **二次扣款请求示例:** | paymentMethods | scenario | |:---------------|:---------| | ApplePay | recurring | **二次扣款特殊参数:** | 参数名称 | 参数值 | |:---------|:-------| | `bizType` | "CodeGrant" | | `merchantUserId` | "126048960513465" | | `token` | "81cf697a30731d407b87b680e044a351" | ### 注意事项 1. **令牌管理**:支付令牌有效期为20年,请关注令牌状态并及时处理失效情况 2. **订阅周期**:合理设置订阅周期,避免过于频繁的扣费 3. **用户体验**:建议在订阅前明确告知用户扣费规则和取消方式 4. **异常处理**:做好扣费失败的处理逻辑,如重试机制、用户通知等 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/Argencard/index.md description: >- Argencard是阿根廷的本土信用卡品牌,隶属于Prisma Medios de Pago公司。作为阿根廷最早的信用卡之一,它在本地市场拥有广泛认可度,支持实体店和在线支付,并提供分期付款、积分奖励等优惠。该卡在全国范围内被广泛接受,适用于零售商店、餐厅和在线商户。对于跨境电商,支持Argenca --- # Argencard Argencard是阿根廷的本土信用卡品牌,隶属于Prisma Medios de Pago公司。作为阿根廷最早的信用卡之一,Argencard在本地市场拥有悠久的历史和广泛的认可度。它提供多种类型的信用卡,适合不同消费需求的用户。Argencard支持实体店和在线支付,并提供分期付款、积分奖励等优惠。该卡在阿根廷全国范围内被广泛接受,包括零售商店、餐厅和在线商户。对于在阿根廷开展业务的商家,尤其是跨境电商,支持Argencard支付可以有效提升本地用户的支付体验和购买意愿。 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/Aupay/index.md description: >- AuPay是一种便捷的移动支付方式,适用于日本市场。用户可通过手机应用程序完成在线及实体店的支付,支持多种充值方式和优惠活动。主要特点包括快速支付、安全保障以及与各大商家合作提供的专属折扣。 --- # AuPay --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/Aupay/checkout/index.md description: 介绍如何通过集成收银台接受Au Pay支付,适用于日本市场。首先需请求收银台预下单以获取paymentUrl,随后渲染并跳转至收银台完成支付流程。 --- # Au Pay-收银台集成 通过集成收银台,接受Au Pay支付。 ## 集成导航 ### Step1 请求收银台预下单 在API收银台预下单的响应中,您可以获取`paymentUrl` ### Step2 渲染收银台 接入文档:跳转收银台 ## 收银台接入最佳实践 详见APM 接入方式实践 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/Aupay/s2s/index.md description: >- Au Pay-API集成文档介绍了如何通过API实现下单并支付的功能。适用于需要在日本地区支持Au Pay支付方式的商家,提供服务器到服务器的支付请求与重定向完成支付流程。关键步骤包括调用下单并支付API以及根据返回的paymentRedirectUrl进行页面重定向以完成支付。 --- # Au Pay-API集成 ## 集成导航 ## step1 请求下单并支付 请求API:下单并支付 ## 重定向 下单并支付响应中获取参数`paymentRedirectUrl`。并重定向到该地址,根据页面提示完成支付。 详见Non-hosted 本地支付 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/Aupay/sdk/index.md description: >- 介绍如何通过集成Au Pay-JSSDK在收银台接受Au Pay支付。适用于日本地区的在线商家,支持通过API预下单并渲染收银台以完成支付流程。关键步骤包括请求收银台预下单获取accessToken及使用内嵌JS-SDK渲染收银台。 --- # Au Pay-JSSDK集成 通过集成收银台,接受Au Pay支付。 ## 集成导航 ### Step1 请求收银台预下单 在API收银台预下单的响应中,您可以获取`accessToken` ### Step2 渲染收银台 接入文档:内嵌JS-SDK ## 收银台接入最佳实践 详见APM 接入方式实践 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/Aura/index.md description: >- Aura是巴西的信用卡品牌,由Aura Financeira发行,提供多种类型的信用卡以满足不同消费者需求。其特点包括灵活的信用额度、分期付款选项和积分奖励计划,广泛接受于零售商店、超市及在线商城。Aura还通过移动应用方便用户管理账户和支付账单,并支持多种在线支付场景。适用于希望吸引更多本地消费者 --- # Aura Aura是巴西的信用卡品牌,由Aura Financeira发行。作为一家专注于消费金融的公司,Aura提供多种类型的信用卡,满足不同消费者的需求。Aura卡的特点包括灵活的信用额度、分期付款选项和积分奖励计划。它在巴西的零售商店、超市和在线商城中被广泛接受。Aura还提供移动应用,方便用户管理账户、查看交易和支付账单。近年来,Aura加强了在数字支付领域的布局,支持多种在线支付场景。对于在巴西市场运营的商家,特别是零售和电子商务领域,支持Aura支付可以吸引更多本地消费者,提高销售额。 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/BancoDoBrasil/index.md description: >- Banco do Brasil是一种支付方式,主要服务于巴西地区。支持通过银行转账、信用卡和借记卡等多种方式进行在线支付,为用户提供便捷安全的支付体验。适用于电子商务、公共服务缴费等场景,具有广泛的用户基础和较高的市场认可度。 --- # Banco do Brasil --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/BancomatPay/index.md description: >- Bancomat Pay是一种电子支付方式,适用于意大利境内在线和实体店铺的支付。支持即时转账、移动支付等功能,用户可以通过银行账户直接进行支付,具有便捷安全的特点。 --- # Bancomat Pay --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/Bancontact/index.md description: >- Bancontact是一种在比利时广泛使用的在线支付方式,支持即时银行转账。适用于电子商务网站和移动应用,提供快速安全的支付体验。主要特点包括:实时交易确认、高安全性以及广泛的银行网络覆盖,几乎涵盖所有比利时的主要银行。 --- # Bancontact --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/Banorte/index.md description: >- Banorte是一种墨西哥主要的在线支付方式,支持个人和企业通过银行转账或信用卡完成交易。覆盖整个墨西哥地区,提供安全便捷的支付体验,适用于电子商务、公共服务缴费等多种场景。 --- # Banorte --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/BBVABancomer/index.md description: >- BBVA Bancomer是一种墨西哥主要的在线银行支付方式,允许用户通过其银行账户直接进行安全便捷的支付。适用于电子商务平台、公共服务缴费及各类在线交易场景。覆盖地区为墨西哥全境,支持实时支付确认和退款功能,确保交易过程中的资金安全与高效流转。 --- # BBVA Bancomer --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/BCA/index.md description: >- BCA是印度尼西亚的一种银行转账支付方式,支持通过BCA银行账户进行在线支付。适用于印尼境内的电子商务平台和各类线上服务,提供即时转账确认功能,确保交易安全快速完成。 --- # BCA --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/BDOOnlinePayment/index.md description: >- BDO(Banco de Oro)是菲律宾最大的银行之一,提供全面的在线银行支付服务。用户可通过BDO银行账户进行安全高效的网上支付、转账和金融交易。该支付方式具有强大的银行背景、高度安全性、广泛的ATM网络支持等优势,是菲律宾市场最受信赖的支付方式之一。 --- # BDO --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/BLIK/index.md description: >- BLIK是一种基于移动银行的支付方式,主要用于波兰地区。用户通过手机银行应用生成一次性代码完成在线支付,无需提供银行卡信息,确保交易安全便捷。适用于电子商务、公共服务缴费等多种场景。 --- # BLIK --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/BNI/index.md description: >- BNI是一种支付方式,适用于印度尼西亚地区的在线和线下交易。支持银行转账、信用卡及借记卡等多种支付手段,特点是操作简便、安全性高,并且在印尼拥有广泛的用户基础和接受度。 --- # BNI --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/Boleto/index.md description: >- Boleto是一种巴西常用的支付方式,允许客户通过打印的票据在指定银行、ATM或网上银行完成支付。主要特点包括广泛覆盖巴西地区,支持多种支付渠道如实体店、线上平台等,并提供一定的支付期限。适用于希望为巴西用户提供本地化支付体验的商家。 --- # Boleto --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/BoletoFlash/index.md description: >- Boleto Flash是一种现代化的巴西支付方式,通过二维码或支付链接提供即时处理和24/7全天候服务。适用于没有银行账户的消费者,支持在柜台、网上银行或移动设备上支付。与传统Boleto相比,Boleto Flash提供更快捷、更便捷的支付体验,但传统Boleto因其普及性和可靠性仍广泛使用。 --- # Boleto Flash 通过巴西任何支持网点的柜台或网上银行支付在线服务费用。 它在该国非常受欢迎,那里有相当多的消费者没有银行账户。 向消费者提供支付代码(或条形码),然后使用该代码以现金或通过家庭银行完成支付。 Boleto Flash是传统Boleto的现代化版本,提供更快速和便捷的支付体验,而传统Boleto则因其普及性和可靠性仍然广泛使用。选择哪种方式取决于用户的具体需求和偏好。 **差别:** 1. 处理速度: * Boleto Flash: 即时处理,支付确认通常在几分钟内完成。 * 传统Boleto: 处理时间较长,可能需要1-3个工作日。 2. 可用时间: * Boleto Flash: 24/7全天候可用。 * 传统Boleto: 通常受银行营业时间限制。 3. 支付方式: * Boleto Flash: 主要通过移动设备和在线方式支付。 * 传统Boleto: 可以在银行、ATM或网上银行支付。 4. 技术特性: * Boleto Flash: 使用二维码或支付链接。 * 传统Boleto: 使用条形码。 5. 市场普及度: * Boleto Flash: 正在快速增长,但相对较新。 * 传统Boleto: 在巴西已广泛使用多年。 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/Book/index.md description: >- Book是一种支付方式,允许用户通过银行转账完成在线购物。主要适用于欧洲地区,特别是德国、奥地利和荷兰。该支付方式具有高度安全性,支持实时交易确认,并提供多种语言界面以适应不同国家和地区的需求。 --- # Book --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/Boost/index.md description: >- Boost是一种电子钱包支付方式,主要在马来西亚广泛使用。用户可以通过扫描二维码或输入手机号码完成支付,支持多种货币结算。Boost提供便捷的移动支付体验,适用于线上购物、餐饮服务及日常消费等多种场景。 --- # Boost --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/BPI/index.md description: >- BPI是一种在菲律宾广泛使用的在线银行支付方式,支持用户通过其银行账户直接进行安全快捷的支付。主要特点包括实时交易确认、高安全性及便捷的操作流程,适用于电子商务网站和移动应用中需要快速结算的场景。 --- # BPI --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/Bradesco/index.md description: >- Bradesco是一种巴西主要银行提供的支付方式,支持在线转账、信用卡和借记卡支付。适用于电子商务平台,覆盖整个巴西地区。其特点包括安全可靠、即时确认交易以及广泛接受度高,为商家提供便捷的收款解决方案。 --- # Bradesco --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/BRI/index.md description: BRI是一种支持印度尼西亚地区的支付方式,通过银行转账完成交易。适用于电商平台、旅游服务等在线支付场景。主要特点包括操作便捷、安全性高以及支持多种货币结算。 --- # BRI --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/BSI/index.md description: >- BSI是一种电子支付方式,适用于欧洲地区。支持即时转账和直接扣款,提供安全高效的支付体验。主要特点包括快速结算、低手续费以及与多家银行系统兼容,特别适合在线商家和个人用户进行跨境交易时使用。 --- # BSI --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/Cabal/index.md description: >- Cabal是阿根廷信用合作社联盟创立的支付卡品牌,在阿根廷、巴西、乌拉圭和巴拉圭等南美国家广泛使用。提供信用卡、借记卡和预付卡服务,支持实体店和在线支付。特点包括灵活的支付选项、优惠利率和广泛的商户网络。Cabal与国际支付网络合作,卡片可全球使用。面向南美市场的商家,特别是中小企业,接受Cabal --- # Cabal Cabal是阿根廷的支付卡品牌,由阿根廷信用合作社联盟(Federación Argentina de Cooperativas de Crédito)创立。作为一个合作社信用系统,Cabal在阿根廷、巴西、乌拉圭和巴拉圭等南美国家广泛使用。Cabal提供信用卡、借记卡和预付卡服务,支持实体店和在线支付。其特点包括灵活的支付选项、优惠的利率和广泛的商户网络。Cabal还与国际支付网络合作,使其卡片可在全球使用。对于面向南美市场的商家,特别是中小企业,接受Cabal支付可以扩大客户群,提高本地市场渗透率。 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/Caixa/index.md description: >- Caixa是一种主要在巴西使用的支付方式,支持借记卡、信用卡及预付卡等多种支付手段。其特点是安全便捷,广泛应用于线上购物、公共服务缴费等场景。商家接入Caixa后,能够覆盖更广泛的客户群体,提升交易成功率。 --- # Caixa --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/cardIntegrationWidthCheckout/index.md description: >- 国际卡集成-收银台模块介绍如何通过集成PingPong收银台接受信用卡和借记卡付款,支持VISA、MasterCard等主流卡种。覆盖全球,提供内嵌JS-SDK、跳转收银台及API三种集成方式,其中API集成需满足PCI DSS要求。该解决方案简化了支付流程并确保符合PCI合规标准,同时支持3D S --- # 国际卡集成-收银台 通过集成收银台,接受信用卡和借记卡付款。 ## PCI合规 ::: note 提示 根据您的集成情况,PingPongCheckout 可能要求您提交 PCI DSS 文档,然后才能在生产环境中接受信用卡支付。 ::: 接受信用卡和借记卡付款,需要符合PCI DSS的要求。详见PCI DSS 合规导航 PingPong 收银台 集成了大多数的支付方式。通过集成收银台,您可以轻松的接受信用卡和借记卡付款。并且PingPong收银台可以帮助您符合PCI合规的要求,降低加入成本。 | 集成方式 | PCI DSS | |:------|:--------| | 内嵌收银台 | 无需 | | 跳转收银台 | 无需 | | API | 需要 | ## 集成导航 ### Step1 请求收银台预下单 在API收银台预下单的响应中,您可以获取`accessToken`或者`paymentUrl` | paymentMethods | |:------| | VISA | | MasterCard | | American Express | | Discover | | JCB | | CHINA UNION PAY | ### Step2 渲染收银台 跳转收银台/内嵌JS-SDK 接入文档: * 内嵌JS-SDK * 跳转收银台 ## 立即Capture和手动Capture 默认情况下,所有信用卡支付在授权后立即被捕获。或者,您可以设置使用手动捕获。 详见Capture ::: danger Alert 授权只在有限的时间(一般为7天)内有效。如果授权的支付没有被捕获或取消,一旦错过预定的截止日期,它将过期,并且将会自动`VOID`。 ::: ## 3D Secure 收银台已自动集成3D Secure。当用户使用3D Secure时,收银台会自动跳转到3D Secure页面。 1. 使用PingPongCheckout的风控系统自动决策:我们将通过风控体系自动决策。需要3D Secure时,自动决策为3D Secure,收银台会自动跳转到3D Secure页面。 2. 自定义决策:如果您有自己的风控体系和成熟的风控经验,需要手动控制3D Secure,可以使用`executeThreeD`参数。详见 Dynamic 3D Secure ::: danger Alert 在使用自定义决策功能情况下,如果您的收购处理实体和您的客户的发行者处理实体都在欧洲经济区(EEA)、摩纳哥,您的支付属于 PSD2 SCA 范围。为此,您可能需要大部分交易设置3DS验证,除了TRA豁免的情况。 ::: ## 记住卡号 如果您传送了参数`merchantUserId`,收银台可以记住卡号。当用户再次支付时,收银台会自动填充卡号。 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/cardIntegrationWidthS2S/index.md description: >- 国际卡集成-S2S介绍如何通过收银台接受信用卡和借记卡付款,支持VISA、MasterCard等主流卡种。覆盖全球,需符合PCI DSS合规要求。提供内嵌或跳转收银台集成方式以降低商家PCI负担,API集成则需提交PCI DSS文档。支付流程包括风控及3DS验证步骤,支持立即或手动捕获资金。 --- # 国际卡集成-S2S 通过集成收银台,接受信用卡和借记卡付款。 ## PCI合规 ::: note 提示 根据您的集成情况,PingPongCheckout 可能要求您提交 PCI DSS 文档,然后才能在生产环境中接受信用卡支付。 ::: 接受信用卡和借记卡付款,需要符合PCI DSS的要求。详见PCI DSS 合规导航 | 集成方式 | PCI DSS | |:------|:--------| | 内嵌收银台 | 无需 | | 跳转收银台 | 无需 | | API | 需要 | ## 集成导航 ### Step1 风控组件和3DS组件集成 详见 Dynamic 3D Secure ### Step2 请求下单并支付 在API下单并支付的响应中: 1. status 为 `SUCCCESS` 时,订单已支付。 2. status 为 `PROCESSING` 时,订单已创建,但未支付。 1. `bizContent.threeDContinue` = `false` 无需3DS验证,您可以等待异步通知通知。 2. `bizContent.threeDContinue` = `true`,需要3DS验证,您需要跳转到3DS验证页面。 3. status 为 `FAILED` 时,订单创建失败。 详见 国际信用卡支付 | paymentMethod | |:------| | VISA | | MasterCard | | American Express | | Discover | | JCB | | UPIPay | ## 立即Capture和手动Capture 默认情况下,所有信用卡支付在授权后立即被捕获。或者,您可以设置使用手动捕获。 详见Capture ::: danger Alert 授权只在有限的时间(一般为7天)内有效。如果授权的支付没有被捕获或取消,一旦错过预定的截止日期,它将过期,并且将会自动`VOID`。 ::: ## 3D Secure * S2S集成需要您嵌入风控JS和3DS组件。 * 无法嵌入JS组件,请向商务或者风控申请API接入3DS方式。 1. 使用PingPongCheckout的风控系统自动决策:我们将通过风控体系自动决策。需要3D Secure时,自动决策为3D Secure,收银台会自动跳转到3D Secure页面。 2. 自定义决策:如果您有自己的风控体系和成熟的风控经验,需要手动控制3D Secure,可以使用`executeThreeD`参数。详见 Dynamic 3D Secure ::: danger Alert 在使用自定义决策功能情况下,如果您的收购处理实体和您的客户的发行者处理实体都在欧洲经济区(EEA)、摩纳哥,您的支付属于 PSD2 SCA 范围。为此,您可能需要大部分交易设置3DS验证,除了TRA豁免的情况。 ::: --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/CartaoMercadoLivre/index.md description: >- Cartao MercadoLivre是MercadoLibre推出的支付卡,面向其用户,提供信用卡和预付卡服务。持卡人可在平台上享受现金返还、免息分期等优惠,并支持实体店支付和ATM取现。作为MercadoPago生态系统的一部分,该卡在巴西及其他南美国家广受欢迎,有助于提高商家销售额和客户忠诚度 --- # Cartao MercadoLivre Cartao MercadoLivre是由南美最大的电子商务平台MercadoLibre推出的支付卡。这张卡主要面向MercadoLibre的用户,提供信用卡和预付卡服务。持卡人可在MercadoLibre平台上享受特别优惠,如现金返还、免息分期和额外积分。除了在线购物,Cartao MercadoLivre还支持实体店支付和ATM取现。作为MercadoPago支付生态系统的一部分,这张卡在巴西和其他南美国家广受欢迎。对于在MercadoLibre平台上经营的商家,支持Cartao MercadoLivre支付可以提高销售额和客户忠诚度。 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/CashApp/index.md description: >- Cash App是一种移动支付方式,允许用户通过智能手机发送、接收和存储资金。主要在美国地区使用,支持即时转账、直接存款以及购买比特币等功能。商家和个人均可利用其便捷性进行交易,无需传统银行账户即可完成大部分金融操作。 --- # Cash App --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/Cencosud/index.md description: >- Cencosud信用卡是由南美零售巨头Cencosud集团发行的支付卡,主要在智利、阿根廷、巴西、秘鲁和哥伦比亚等国家使用。持卡人可在Cencosud旗下的超市、百货商店和购物中心(如Jumbo、Easy和Paris)享受积分奖励、专属折扣和分期付款等优惠。该卡还支持在线支付,方便用户在集团的电商平 --- # Cencosud Cencosud信用卡是由南美零售巨头Cencosud集团发行的支付卡。Cencosud在智利、阿根廷、巴西、秘鲁和哥伦比亚等国家拥有广泛的业务网络。这张卡主要用于Cencosud旗下的超市、百货商店和购物中心,如Jumbo、Easy和Paris等。持卡人可享受积分奖励、专属折扣和分期付款等优惠。Cencosud卡还支持在线支付,方便用户在集团的电商平台上购物。对于在南美市场经营的商家,尤其是零售业,接受Cencosud卡支付可以吸引大量忠实客户。 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/CIMB/index.md description: >- CIMB是一种支付方式,主要服务于东南亚地区,包括马来西亚、印度尼西亚、泰国等。支持网上银行转账和信用卡支付等多种交易手段,具有高度的安全性和便捷性,适用于电子商务和个人间转账。 --- # CIMB --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/CMRFalabella/index.md description: >- CMR Falabella是智利Falabella集团的信用卡品牌,广泛用于Falabella旗下商店及其他商户。提供积分奖励、分期付款和特别折扣等优惠,并与多家银行合作推出联名卡,扩大使用范围。近年来,CMR Falabella推出移动应用,方便客户管理账户和支付。支持CMR Falabella支 --- # CMR Falabella CMR Falabella是智利零售巨头Falabella集团旗下的信用卡品牌,成立于1980年。作为智利流行的支付方式,它主要用于Falabella旗下商店,也被其他商户广泛接受。CMR Falabella提供积分奖励、分期付款和特别折扣等优惠。该卡与多家银行合作推出联名卡,扩大了使用范围。近年来,CMR Falabella推出移动应用,方便客户管理账户和支付。对在智利开展电子商务的商家而言,支持CMR Falabella支付可显著提升本地客户的购物体验。 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/CoBadgedCards/index.md description: >- Cartes Bancaires是一种主要在法国及其海外领土使用的支付方式,支持借记卡和信用卡交易。该支付方式覆盖了广泛的商业领域,从零售到在线服务,具有高安全性与便捷性特点。适用于希望进入法国市场的商家。 --- # Cartes Bancaires --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/commonIntegration/index.md description: >- 介绍支付方式接入流程,包括收银台和S2S两种模式。收银台模式通过预下单获取accessToken或paymentUrl后,可选择内嵌JS-SDK或跳转收银台完成支付;S2S模式则直接请求下单并支付,获取paymentUrl跳转至钱包支付页面。适用于需要灵活集成支付功能的场景,覆盖地区广泛,支持多种支 --- ::: note 提示 参数中的 device 设备信息,accessModel取值,需要根据具体场景填写对应的编号,不同的编号会展示不同支付形态,具体可以参考下单接口 ::: # 集成导航 ## 收银台 ### Step1 请求收银台预下单 在API收银台预下单的响应中,您可以获取`accessToken`或者`paymentUrl` ### Step2 渲染收银台 跳转收银台/内嵌JS-SDK 接入文档: * 内嵌JS-SDK * 跳转收银台 ## S2S ### Step1 请求S2S下单并支付 在APIS2S下单并支付的响应中,您可以获取`paymentUrl` 并跳转到对应的钱包支付页面 ## 请求参数 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/Cordial/index.md description: >- Cordial是阿根廷的信用卡品牌,由Cordial Compañía Financiera S.A.发行,提供多种类型的信用卡以满足不同客户需求。Cordial卡具有灵活的分期付款选项、积分奖励计划和专属优惠,在阿根廷的零售商店、超市和在线商城中广泛接受。Cordial还提供移动应用,方便用户管理 --- # Cordial Cordial是阿根廷的信用卡品牌,由Cordial Compañía Financiera S.A.发行。作为一家专注于消费金融的公司,Cordial提供多种类型的信用卡,满足不同客户群的需求。Cordial卡的特点包括灵活的分期付款选项、积分奖励计划和专属优惠。它在阿根廷的零售商店、超市和在线商城中被广泛接受。Cordial还提供移动应用,方便用户管理账户、查看交易和支付账单。对于在阿根廷市场运营的商家,特别是零售和电子商务领域,支持Cordial支付可以吸引更多本地消费者,提高销售转化率。 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/Cordobesa/index.md description: >- Cordobesa是阿根廷科尔多瓦省的本地信用卡品牌,由Banco de Córdoba发行。该卡在省内广泛使用,提供信用卡和借记卡服务,支持实体店支付、在线购物和ATM取现。Cordobesa卡具有优惠利率、灵活分期付款选项及本地商户专属优惠。适用于科尔多瓦省内的中小企业和电商平台,有助于吸引当地 --- # Cordobesa Cordobesa是阿根廷科尔多瓦省的本地信用卡品牌,由Banco de Córdoba发行。作为一种区域性支付卡,Cordobesa在科尔多瓦省内拥有广泛的使用范围和高度的认可度。它提供信用卡和借记卡服务,支持实体店支付、在线购物和ATM取现。Cordobesa卡的特点包括优惠的利率、灵活的分期付款选项和本地商户的专属优惠。对于在科尔多瓦省经营的商家,特别是中小企业和本地电商平台,支持Cordobesa支付可以有效吸引当地消费者,提高客户忠诚度和销售额。 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/Cultureland/index.md description: >- Cultureland是一种预付卡支付方式,主要应用于韩国市场。用户可通过购买Cultureland预付卡为在线游戏、音乐、电影等数字内容充值。该支付方式支持多种面额,便于不同消费层次的用户使用。 --- # Cultureland --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/DANA/index.md description: >- DANA是一种在印度尼西亚广泛使用的电子钱包支付方式,支持在线购物、账单支付及个人间转账。用户可通过银行账户或合作网点充值,享受便捷安全的移动支付体验。主要特点包括快速交易确认、高安全性以及与多家本地服务提供商集成。 --- # DANA --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/DANA/danaIntegration/index.md description: >- DANA是一种适用于印度尼西亚的电子钱包支付方式,支持收银台和S2S两种集成模式。在收银台模式下,通过预下单获取accessToken或paymentUrl后渲染收银台;S2S模式则直接请求下单并支付,获取paymentUrl跳转至钱包支付页面。设备信息和接入模式需根据具体场景填写对应编号。 --- ::: note 提示 参数中的 device 设备信息,accessModel取值,需要根据具体场景填写对应的编号,不同的编号会展示不同支付形态,具体可以参考下单接口 ::: # 集成导航 ## 收银台 ### Step1 请求收银台预下单 在API收银台预下单的响应中,您可以获取`accessToken`或者`paymentUrl` ### Step2 渲染收银台 跳转收银台/内嵌JS-SDK 接入文档: * 内嵌JS-SDK * 跳转收银台 ## S2S ### Step1 请求S2S下单并支付 在APIS2S下单并支付的响应中,您可以获取`paymentUrl` 并跳转到对应的钱包支付页面 ## 请求参数 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/docomo/index.md description: >- docomo是一种在日本广泛使用的移动支付方式,支持通过手机进行便捷的线下和线上支付。主要特点包括快速、安全以及与多种商家和服务的良好兼容性,适用于日常购物、餐饮及公共服务缴费等多种场景。 --- # docomo --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/DOKUVA/index.md description: >- DOKU VA是一种虚拟账户支付方式,允许用户通过银行转账完成支付。适用于印尼市场,支持主要本地银行。特点是即时到账确认和便捷的支付体验,特别适合电商平台和需要快速结算的企业使用。 --- # DOKU VA --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/DOKUWallet/index.md description: >- DOKU Wallet 是一种电子钱包支付方式,适用于印尼地区的在线交易。支持多种充值途径如银行转账、便利店充值等,为用户提供便捷安全的支付体验。主要特点包括即时到账、易于使用及广泛的应用场景,适合电商、游戏内购等多种支付需求。 --- # DOKU Wallet --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/dragonpay/index.md description: >- Dragonpay是一种电子支付方式,主要服务于菲律宾地区的用户。支持多种支付渠道,包括银行转账、在线银行支付及线下支付点付款等,为用户提供便捷安全的支付体验。适用于电子商务网站、旅游服务预订以及各类线上交易场景。 --- # Dragonpay --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/DuitNow/index.md description: >- DuitNow是一种即时支付方式,主要用于马来西亚的个人和企业间转账。支持通过手机号码、身份证号或银行账号进行快速安全的资金转移,覆盖马来西亚主要银行及金融机构。特点是操作简便、到账迅速,适用于日常消费、账单支付等场景。 --- # DuitNow --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/Efecty/index.md description: >- Efecty是一种在哥伦比亚广泛使用的现金支付方式,允许用户通过遍布全国的网点进行付款。主要特点包括即时交易确认、无需银行账户即可使用以及支持多种支付场景,如账单支付、电子商务等。 --- # Efecty --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/EggMoney/index.md description: 'Egg Money是一种电子钱包支付方式,适用于亚洲多个国家和地区,支持快速转账、在线购物和账单支付。用户可以轻松绑定银行卡,享受便捷安全的支付体验。' --- # Egg Money --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/Elo/index.md description: >- Elo是巴西本土支付卡品牌,提供信用卡、借记卡和预付卡服务,在巴西广泛使用。该支付方式专为本地市场设计,符合巴西消费习惯,并通过国际合作实现全球使用。近年来,Elo积极拓展移动支付和非接触支付,支持多种数字钱包。面向巴西市场的电商和跨境商户集成Elo支付可提升用户体验,扩大市场份额。 --- # Elo Elo是巴西本土支付卡品牌,2011年由三大银行联合创立。提供信用卡、借记卡和预付卡服务,在巴西广泛使用。Elo卡专为本地市场设计,提供符合巴西消费习惯的功能和优惠。通过国际合作,Elo卡也可在全球使用。近年来,Elo积极拓展移动支付和非接触支付,支持多种数字钱包。对面向巴西市场的电商和跨境商户而言,集成Elo支付可提升本地用户体验,扩大市场份额。Elo持续创新,巩固其在巴西支付领域的地位。 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/EPS/index.md description: >- EPS是一种奥地利的在线银行转账支付方式,允许用户通过其网上银行账户安全地完成支付。主要特点包括即时确认交易、高安全性以及广泛覆盖奥地利的主要银行。适用于需要快速且安全支付选项的电子商务场景。 --- # EPS --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/FPX/index.md description: >- FPX是一种马来西亚的在线银行转账支付方式,允许用户通过本地银行账户直接进行安全快捷的支付。适用于电子商务网站、政府服务及各类在线交易场景。主要特点包括实时交易确认、支持多家主流银行以及无需额外注册即可使用。 --- # FPX --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/GameCulture/index.md description: >- Game Culture是一种专为游戏内购设计的支付方式,支持全球多个国家和地区。该支付方式允许玩家通过多种渠道购买虚拟商品和服务,包括但不限于信用卡、第三方支付平台等。其主要特点包括快速结算、高度安全性和用户友好的界面设计。 --- # Game Culture --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/GCash/index.md description: >- GCash是一种菲律宾流行的电子钱包支付方式,允许用户通过移动应用进行快速安全的在线交易。主要特点包括即时转账、账单支付、手机充值及购物付款等。广泛应用于日常消费场景,如超市购物、餐饮服务以及线上平台支付。 --- # GCash --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/GooglePay/index.md description: >- Google Pay 是一种数字钱包技术,允许用户在实体店、App 和网上使用存储在 Google 账户中的信用卡或借记卡进行支付。支持面部识别和指纹识别验证交易,适用于大多数发行银行和国家。使用条件包括兼容设备、支持的浏览器、HTTPS 服务及有效 SSL 证书。Android 设备需运行 And --- # GooglePay Google Pay 是一种数字钱包技术,使购物者能够在实体店、App 内或网上使用兼容设备上存储在 Google 账户中的任何信用卡或借记卡进行无缝支付。 购物者可以使用面部识别或指纹识别通过结账过程来验证交易. Google Pay 还使购物者能够检索存储在其关联账户中的卡片,包括来自 Google Play、Chrome 或 Android 设备的卡片。对于这些交易,根据卡片类型,购物者可能需要进行验证。 谷歌支付适用于大多数发行银行和国家,使其成为增长最快的支付方式之一。 **付款人只有在满足以下条件时才能使用 Google Pay 作为支付方式选项:** * 使用兼容 Google Pay 的设备。 * 如果在网页上支付,则使用支持 Google Pay 的浏览器(如 Chrome、Safari、Firefox 等)。 * 位于 Google Pay 可用的国家或地区 * 所有集成 Google Pay 的页面都必须通过 HTTPS 服务。您的域名必须具有有效的 SSL 证书。 要使用 Google Pay,用户的设备必须满足以下要求: * Android 设备需运行 Android 4.4 (KitKat) 或更高版本 * 设备必须安装 Google Play 服务 16.0.0 或更高版本 * 用户需要在 Google 账户中添加支付方式 对于开发人员集成 Google Pay API,还需满足以下要求: * 开发环境需要 Android Studio 3.0 或更高版本 * 应用的目标 API 级别建议为 26 或更高 * 需要使用最新版本的 Google Play 服务库 了解更多关于兼容性要求的信息,请参考: * [Google Pay 支持的设备](https://developers.google.com/pay/issuers/overview/supported-devices#compatibility_requirements) * [Google Pay API Android 设置前提条件](https://developers.google.com/pay/api/android/guides/setup#app%20prerequisites) * [Google Wallet 支持的设备和功能](https://support.google.com/wallet/answer/14187106?sjid=1565778547611136477-NC\&visit_id=638912664571713484-955916255\&rd=1) 接受Google Pay付款,有一些合规需求。 | 集成方式 | PCI DSS | 风控JS | 3DS接入处理 | |:----------------------------|:--------|:-----|:-----------------------| | 内嵌收银台 | 无需 | 无需 | 无需-自动集成 | | 跳转收银台 | 无需 | 无需 | 无需-自动集成 | | Server To Server(传输加密Token) | 无需 | 需要 | 需要-手动集成 | | Server To Server(传输解密Token) | 需要 | 需要 | 需要-手动集成 | | 行业 | billing Address | shipping Address | goods | tradeCountry | |:-------|:----------------|:-----------------|:------|:---------------------| | 实物电商行业 | 必填 | 必填 | 必填 | 可选 | | 虚拟行业 | 可选 | 可选 | 必填 | 必填,收银台自动传送/S2S需要手动传入 | --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/GooglePay/hosted/index.md description: >- Google Pay 跳转收银台集成支持订阅支付模式,允许商户为用户设置定期自动扣费服务。覆盖地区广泛,主要特点包括通过跳转收银台完成首笔支付并获取支付令牌,后续使用该令牌进行自动扣费。关键参数如`merchantUserId`、`createToken`和`bizType`需在请求中指定。 --- # Google Pay 跳转收银台集成 ## GooglePay-跳转收银台交互流程 ```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' } }}%% sequenceDiagram participant Merchant as 🏪 商户后端 participant Frontend as 💻 商户前端 participant PP as 🔄 PingPong服务端 participant Hosted as 🌐 跳转收银台 participant Google as 🌐 Google Pay Note over Merchant, Google: 🚀 GooglePay跳转收银台集成流程 Note over Merchant, Frontend: 📋 准备阶段:• 获取访问凭证• 准备跳转链接 Merchant->>+PP: 1️⃣ 获取accessToken/paymentUrl Note right of PP: 调用收银台预下单接口生成访问凭证或支付链接 PP-->>-Merchant: 返回accessToken或paymentUrl Merchant->>Frontend: 2️⃣ 传递跳转参数到前端 Frontend->>Frontend: 3️⃣ 构建跳转链接 Note right of Frontend: 使用paymentUrl或accessToken构建完整链接 Frontend->>+Hosted: 4️⃣ 跳转到PingPong收银台 Note right of Hosted: 在新窗口或当前页面打开收银台页面 Hosted->>Hosted: 5️⃣ 初始化收银台界面 Note right of Hosted: • 显示支付方式列表• 加载Google Pay组件 Hosted-->>-Frontend: 收银台加载完成 Note over Hosted, Google: 💳 Google Pay支付流程 User->>Hosted: 6️⃣ 用户选择Google Pay支付 Hosted->>+Google: 7️⃣ 调用Google Pay API Note right of Google: • 显示Google Pay界面• 用户验证身份• 获取支付令牌 Google-->>-Hosted: 返回加密支付令牌 Hosted->>+PP: 8️⃣ 发送支付请求(含加密令牌) PP->>PP: 9️⃣ 处理支付 Note right of PP: • 解密Google Pay令牌• 风控检查• 支付路由处理 alt ✅ [支付成功] PP-->>Hosted: 🎉 支付成功 Hosted->>Hosted: 显示成功页面 Hosted-->>Frontend: 可选的页面回调 Note over Frontend: 支付成功处理和页面跳转 else ❌ [支付失败] PP-->>Hosted: ❌ 支付失败 Hosted->>Hosted: 显示错误页面 Hosted-->>Frontend: 可选的错误回调 Note right of Frontend: 错误处理和用户提示 end Note over Merchant, PP: 🎯 Google Pay跳转收银台流程完成 ``` ## 集成导航 ### Step1 请求收银台预下单 在API收银台预下单的响应中,您可以获取`accessToken`或者`paymentUrl` ### Step2 渲染收银台 接入文档:跳转收银台 ## Google Pay 订阅支付集成 Google Pay 支持订阅支付模式,允许商户为用户设置定期自动扣费服务。 ### 集成流程 #### Step1 首笔支付(跳转收银台模式) 首次订阅支付需要通过跳转收银台模式完成,用于建立订阅关系并获取支付令牌。使用收银台预下单接口。 **关键参数说明:** | 参数名称 | 参数说明 | 是否必填 | |:---------|:---------|:---------| | `merchantUserId` | 商户用户唯一标识 | 必填 | | `createToken` | 是否创建支付令牌,固定值"Y" | 必填 | | `bizType` | 业务类型,固定值"CodeGrant" | 必填 | **完整请求示例:** | paymentMethods | scenario | |:---------------|:---------| | GooglePay | subscription | **订阅支付特殊参数:** | 参数名称 | 参数值 | |:---------|:-------| | `bizType` | "CodeGrant" | | `createToken` | "Y" | | `merchantUserId` | "126048960513465" | #### Step2 获取支付令牌 首笔支付成功后,系统会通过交易异步通知返回支付令牌(token)。 ::: warning 重要提醒 * 只有首次交易状态为 `SUCCESS` 时才能获取有效的支付令牌 * 请妥善保存令牌,用于后续自动扣费 * 令牌与 `merchantUserId` 绑定,请确保一致性 ::: #### Step3 后续自动扣费(Non-Hosted模式) 使用获取的令牌进行后续自动扣费,调用下单并支付接口。 **关键参数:** | 参数名称 | 参数说明 | 是否必填 | |:---------|:---------|:---------| | `bizType` | 业务类型,固定值"CodeGrant" | 必填 | | `merchantUserId` | 与首笔支付保持一致 | 必填 | | `token` | 从首笔支付异步通知中获取 | 必填 | **二次扣款请求示例:** | paymentMethods | scenario | |:---------------|:---------| | GooglePay | recurring | **二次扣款特殊参数:** | 参数名称 | 参数值 | |:---------|:-------| | `bizType` | "CodeGrant" | | `merchantUserId` | "126048960513465" | | `token` | "81cf697a30731d407b87b680e044a351" | ### 注意事项 1. **令牌管理**:支付令牌有效期为20年,请关注令牌状态并及时处理失效情况 2. **订阅周期**:合理设置订阅周期,避免过于频繁的扣费 3. **用户体验**:建议在订阅前明确告知用户扣费规则和取消方式 4. **异常处理**:做好扣费失败的处理逻辑,如重试机制、用户通知等 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/GooglePay/s2s_decryptionMode/index.md description: >- 介绍了解密Token模式下Google Pay API的集成方法,适用于需要符合PCI合规且接入风控及3DS组件的商户。此模式通过商户证书解密支付Token,并将解密信息传递给PingPongCheckout以完成支付过程。主要覆盖地区为全球,关键特性包括支持动态3DS验证和异步通知机制。 --- # Google Pay API集成-解密Token模式 使用商户的证书,对支付Token进行解密,传送解密信息给PingPongCheckout,获取支付结果。 ## 1.解密Token模式交互流程 ```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' } }}%% sequenceDiagram participant Merchant as 🏪 商户后端 participant Frontend as 💻 商户前端 participant PP as 🔄 PingPong服务端 participant Risk as 🛡️ 风控组件 participant Google as 🌐 Google Pay Note over Merchant, Google: 🚀 GooglePay解密Token集成流程 Note over Merchant, Frontend: 📋 前置准备:• PCI合规环境• 集成Google Pay API• 集成风控和3DS组件 Frontend->>+Google: 1️⃣ 初始化Google Pay API Note right of Google: • 加载Google Pay组件• 配置支付环境(商户证书)• 验证商户配置 Google-->>-Frontend: Google Pay组件就绪 Note over Frontend, Google: 💳 获取支付令牌 Frontend->>+Google: 2️⃣ 用户发起支付包含: 金额、货币、商户信息 Note right of Google: • 显示Google Pay界面• 用户选择支付方式• 生物识别验证 Google-->>-Frontend: 3️⃣ 返回加密支付令牌🔐 包含加密的卡片信息 Note right of Frontend: 获得加密的Google Pay支付令牌准备发送到后端处理 Frontend->>+Merchant: 4️⃣ 提交加密令牌到后端📦 包含: Token + 订单信息 Note right of Merchant: 接收加密的Google Pay令牌开始后端处理流程 Merchant->>Merchant: 5️⃣ 解密支付令牌🔓 获取真实卡片信息 Note right of Merchant: 使用商户证书解密Google Pay令牌提取: 卡号、有效期、CVV等验证令牌完整性 Merchant->>+Risk: 6️⃣ 风控检查和3DS验证🛡️ 安全评估 Note right of Risk: • 风险评估分析• 3D Secure验证• 反欺诈检测• 合规性检查 Risk-->>-Merchant: 风控验证结果✅ 通过/❌ 拒绝/🔄 需要3DS Merchant->>+PP: 7️⃣ 发起支付请求📋 完整支付信息 Note right of PP: 请求包含:• 解密后的支付信息• 风控验证结果• 交易详细信息• 商户配置参数 PP->>PP: 8️⃣ 处理支付⚙️ 核心支付逻辑 Note right of PP: • 验证支付信息完整性• 二次风控验证• 支付路由选择• 与银行通信处理 alt 🎉 支付成功 PP-->>Merchant: ✅ 支付成功响应包含: 交易ID + 状态 Merchant->>Merchant: 📝 记录成功日志更新订单状态 Note over Frontend: • 显示成功页面• 更新订单状态• 发送确认邮件• 库存扣减处理 else ❌ 支付失败 PP-->>Merchant: ⚠️ 支付失败响应包含: 错误码 + 失败原因 Merchant->>Merchant: 📋 记录失败日志分析失败原因 Note over Frontend: • 显示错误信息• 提供重试选项• 记录失败原因• 用户友好提示 else 🔄 需要3DS验证 PP-->>Merchant: 🔐 需要3DS验证返回验证URL Note over Frontend: • 跳转到3DS页面• 用户完成身份验证• 返回验证结果• 继续支付流程 Merchant->>PP: 🔄 重新提交支付附带3DS验证结果 PP-->>Merchant: ✅ 最终支付结果处理完成 end PP-->>-PP: 处理完成 Merchant-->>-Frontend: 🎊 通知最终结果包含完整状态信息 Note over Merchant, PP: 🎯 GooglePay解密Token流程完成✨ 安全、高效、用户友好 rect rgb(240, 248, 255) Note over Merchant, Google: 💡 关键要点:• 商户需要PCI合规环境进行Token解密• 风控和3DS验证是必要的安全措施• 支持多种支付结果的处理流程• 确保用户数据安全和隐私保护 end ``` ## 2. 集成导航 ::: danger 提示 1. 根据您的集成情况,通过API(解密Token模式)接入Google Pay,您需要符合PCI合规并且接入风控组件和3DS组件。 2. 您需要提前完成对Google Pay API 页面部分交互集成。 ::: ### 2.1 Step0 前置条件 集成Google Pay Web支付组件,详见Google Pay文档 ### 2.2 Step1 前端组件集成 详见 Dynamic 3D Secure ### 2.3 Step2 请求下单并支付 在API下单并支付的响应中: 1. status 为 `SUCCCESS` 时,订单已支付。 2. status 为 `PROCESSING` 时,订单已创建,但未支付。 1. `bizContent.threeDContinue` = `false` 无需3DS验证,您可以等待异步通知通知。 2. `bizContent.threeDContinue` = `true`,需要3DS验证,您需要跳转到3DS验证页面。 3. status 为 `FAILED` 时,订单创建失败。 ## 3. 关键参数 ## 4. 参数示例 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/GooglePay/s2s_encryptionMode/index.md description: >- 介绍如何通过PingPongCheckout组件集成Google Pay API,采用加密Token模式实现安全支付。适用于需要接入风控和3DS验证的商户。支持地区广泛,主要特点包括服务器端解密Token以完成交易,确保数据传输的安全性。 --- # Google Pay API集成-加密Token模式 ## GooglePay-加密Token交互流程 ```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' } }}%% sequenceDiagram participant Merchant as 🏪 商户后端 participant Frontend as 💻 商户前端 participant PP as 🔄 PingPong服务端 participant Risk as 🛡️ 风控组件 participant Google as 🟦 Google Pay Note over Frontend, Google: 🔒 GooglePay加密Token流程 Frontend->>Google: 1️⃣ 初始化Google Pay API Note right of Google: 加载组件, 配置环境 Google->>Frontend: Google Pay组件就绪 Frontend->>Google: 2️⃣ 用户发起支付 Google->>Frontend: 3️⃣ 返回加密支付令牌 Frontend->>Risk: 4️⃣ 风控检查和3DS验证 Risk->>Frontend: 风控验证结果 Frontend->>Merchant: 5️⃣ 提交加密令牌和风控结果 Merchant->>PP: 6️⃣ 发起支付请求 PP->>PP: 7️⃣ 处理支付 alt ✅ [支付成功] PP->>Merchant: 🎉 支付成功 Merchant->>Frontend: 通知支付结果 else ❌ [支付失败] PP->>Merchant: ❌ 支付失败 Merchant->>Frontend: 通知失败结果 end ``` ## 集成导航 ::: note 提示 1. 根据您的集成情况,通过API(加密Token模式)接入Google Pay,您需要接入风控组件和3DS组件。 2. 您需要提前完成对Google Pay API 页面部分交互集成。 ::: ### Step0 前置条件 集成Google Pay Web支付组件,详见Google Pay文档 ### Step1 风控组件和3DS组件集成 详见 Dynamic 3D Secure ### Step2 请求下单并支付 在API下单并支付的响应中: 1. status 为 `SUCCCESS` 时,订单已支付。 2. status 为 `PROCESSING` 时,订单已创建,但未支付。 1. `bizContent.threeDContinue` = `false` 无需3DS验证,您可以等待异步通知通知。 2. `bizContent.threeDContinue` = `true`,需要3DS验证,您需要跳转到3DS验证页面。 3. status 为 `FAILED` 时,订单创建失败。 ### 关键参数 ### 参数示例 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/GooglePay/sdk/index.md description: >- Google Pay 内嵌收银台集成文档介绍了如何在网站中集成Google Pay支付方式,覆盖全球多个地区。集成流程包括提交申请、请求收银台预下单和渲染内嵌收银台。支持订阅支付模式,允许商户为用户设置定期自动扣费服务。关键参数包括merchantUserId、createToken和bizType --- # Google Pay 内嵌收银台集成 ## GooglePay-内嵌收银台交互流程 ```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' } }}%% sequenceDiagram participant Merchant as 🏪 商户后端 participant Frontend as 💻 商户前端 participant SDK as 📦 内嵌收银台 participant PP as 🔄 PingPong服务端 participant Google as 🌐 Google Pay Note over Merchant, Google: 🚀 GooglePay内嵌收银台集成流程 Note over Merchant, Frontend: 📋 准备阶段:• 获取访问凭证• 引入收银台组件 Merchant->>+PP: 1️⃣ 获取accessToken Note right of PP: 调用收银台预下单接口生成访问凭证 PP-->>-Merchant: 返回accessToken Merchant->>Frontend: 2️⃣ 传递accessToken到前端 Frontend->>+SDK: 3️⃣ 渲染内嵌收银台 Note right of SDK: 使用accessToken初始化Google Pay支付组件 SDK->>SDK: 4️⃣ 初始化Google Pay组件 SDK-->>Frontend: 收银台准备就绪 Note over Frontend, Google: 💳 Google Pay支付流程 Frontend->>SDK: 5️⃣ 用户选择Google Pay支付 SDK->>+Google: 6️⃣ 调用Google Pay API Note right of Google: • 显示Google Pay界面• 用户验证身份• 获取支付令牌 Google-->>-SDK: 返回加密支付令牌 SDK-->>Frontend: 令牌获取成功 Frontend->>SDK: 7️⃣ 确认支付 SDK->>+PP: 8️⃣ 发送支付请求(含加密令牌) PP->>PP: 9️⃣ 处理支付 Note right of PP: • 解密Google Pay令牌• 风控检查• 支付路由处理 alt ✅ [支付成功] PP-->>SDK: 🎉 支付成功 SDK-->>Frontend: 支付完成回调 Note over Frontend: 页面跳转或显示成功信息 else ❌ [支付失败] PP-->>SDK: ❌ 支付失败 SDK-->>Frontend: 显示错误信息 Note right of Frontend: 错误处理和用户提示 end PP-->>-SDK: 支付流程结束 SDK-->>-Frontend: 收银台流程结束 Note over Merchant, PP: 🎯 Google Pay内嵌收银台流程完成 ``` ## 集成导航 ::: danger 提示 使用SDK集成需要将您的网站域名提交PingPongCheckout的域名白名单中。 ::: ### step0 提交申请 请将申请材料发送给邮箱`acq-pmteam@pingpong.com`,并抄送到`acq-ts@pingpongx.com` **申请材料如下:** 1. 商户名称 2. 商户 AccId 3. 商户 ClientId 4. 网站域名 5. 商户网站页面截图(从选择商品,到下单展示Google Pay),文字需要转成英文版,规范:1. 文字改为 “Google Pay” 2. Google Pay Logo 需要改为正式的,参考 https://developers.google.com/pay/api/web/guides/brand-guidelines#mark(需科学上网) ### Step1 请求收银台预下单 在API收银台预下单的响应中,您可以获取`accessToken`用于内嵌收银台渲染 ### Step2 渲染收银台 使用Step1获取的`accessToken`渲染内嵌收银台,接入文档:内嵌收银台 ## Google Pay 订阅支付集成 Google Pay 支持订阅支付模式,允许商户为用户设置定期自动扣费服务。 ### 集成流程 #### Step1 首笔支付(内嵌收银台模式) 首次订阅支付需要通过内嵌收银台模式完成,用于建立订阅关系并获取支付令牌。使用收银台预下单接口。 **关键参数说明:** | 参数名称 | 参数说明 | 是否必填 | |:---------|:---------|:---------| | `merchantUserId` | 商户用户唯一标识 | 必填 | | `createToken` | 是否创建支付令牌,固定值"Y" | 必填 | | `bizType` | 业务类型,固定值"CodeGrant" | 必填 | **完整请求示例:** | paymentMethods | scenario | |:---------------|:---------| | GooglePay | subscription | **订阅支付特殊参数:** | 参数名称 | 参数值 | |:---------|:-------| | `bizType` | "CodeGrant" | | `createToken` | "Y" | | `merchantUserId` | "126048960513465" | #### Step2 获取支付令牌 首笔支付成功后,系统会通过交易异步通知返回支付令牌(token)。 ::: warning 重要提醒 * 只有首次交易状态为 `SUCCESS` 时才能获取有效的支付令牌 * 请妥善保存令牌,用于后续自动扣费 * 令牌与 `merchantUserId` 绑定,请确保一致性 ::: #### Step3 后续自动扣费(Non-Hosted模式) 使用获取的令牌进行后续自动扣费,调用下单并支付接口。 **关键参数:** | 参数名称 | 参数说明 | 是否必填 | |:---------|:---------|:---------| | `bizType` | 业务类型,固定值"CodeGrant" | 必填 | | `merchantUserId` | 与首笔支付保持一致 | 必填 | | `token` | 从首笔支付异步通知中获取 | 必填 | **二次扣款请求示例:** | paymentMethods | scenario | |:---------------|:---------| | GooglePay | recurring | **二次扣款特殊参数:** | 参数名称 | 参数值 | |:---------|:-------| | `bizType` | "CodeGrant" | | `merchantUserId` | "126048960513465" | | `token` | "81cf697a30731d407b87b680e044a351" | ### 注意事项 1. **令牌管理**:支付令牌有效期为20年,请关注令牌状态并及时处理失效情况 2. **订阅周期**:合理设置订阅周期,避免过于频繁的扣费 3. **用户体验**:建议在订阅前明确告知用户扣费规则和取消方式 4. **异常处理**:做好扣费失败的处理逻辑,如重试机制、用户通知等 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/GoPay/index.md description: >- GoPay是一种便捷的在线支付方式,适用于亚洲多个地区,特别是东南亚。支持多种货币结算,提供即时转账、账单支付及移动充值等功能。商家和个人用户均可通过API轻松集成,享受低费率和高安全性的支付体验。 --- # GoPay --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/GrabPay/index.md description: >- GrabPay是一种电子钱包支付方式,主要在东南亚地区使用,支持新加坡、马来西亚、菲律宾等国家。用户可通过绑定银行卡或充值的方式进行支付,适用于线上购物、打车服务及日常消费等多种场景。其特点是操作简便、安全性高,并且能够提供多种优惠活动吸引消费者。 --- # GrabPay --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/Hipercard/index.md description: >- Hipercard是巴西知名的信用卡品牌,由Itaú Unibanco集团运营,在全国尤其是东北地区广泛使用。支持实体店和在线支付,提供灵活的支付选项、积分奖励计划和专属商户优惠。适用于零售和电商企业,接受Hipercard支付可有效吸引本地消费者,提高销售转化率。 --- # Hipercard Hipercard是巴西知名的信用卡品牌,最初由Bompreço超市连锁创立,现归Itaú Unibanco集团所有。作为巴西本土支付解决方案,Hipercard在全国范围内广泛使用,特别是在东北地区。它提供信用卡服务,支持实体店和在线支付。Hipercard的特点包括灵活的支付选项、积分奖励计划和专属商户优惠。近年来,Hipercard加强了在电子商务领域的应用,支持多种在线支付场景。对于在巴西市场运营的商家,尤其是零售和电商企业,接受Hipercard支付可以有效吸引本地消费者,提高销售转化率。 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/iDEAL/index.md description: >- iDeal是一种荷兰在线银行转账支付方式,适用于荷兰消费者通过网银直接向商家付款。覆盖荷兰主要银行,提供安全、即时的支付确认,无需信用卡,适合各种在线购物场景。 --- # iDeal --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/Indomaret/index.md description: >- Indomaret是一种便捷的现金支付方式,主要在印度尼西亚使用。顾客可以在全国范围内的Indomaret便利店通过出示支付码完成线上订单的现金支付,适用于没有银行账户或信用卡的人群。此支付方式简单快捷,支持即时确认收款。 --- # Indomaret --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/InternationalCards/index.md description: >- VISA是一种国际信用卡支付方式,广泛应用于全球范围内的线上及线下交易。支持多种货币结算,具有快速便捷、安全可靠的特点,适用于跨境电子商务、旅游消费等多种场景。 --- # VISA --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/Itau/index.md description: >- Itau是一种主要在巴西使用的在线银行支付方式,支持用户通过其Itau银行账户安全快捷地完成支付。适用于电子商务、公共服务缴费等多种场景,具有实时到账、高安全性及便捷性等特点。 --- # Itau --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/Kakaopay/index.md description: >- Kakaopay是一种流行的韩国移动支付方式,支持通过手机应用进行在线和离线支付。主要特点包括快速转账、便捷的二维码支付以及与Kakao生态系统内的多种服务无缝集成。适用于需要覆盖韩国市场的电子商务平台和个人用户。 --- # Kakaopay --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/Klarna/index.md description: >- Klarna是一种流行的“先买后付”支付方式,覆盖超过20个国家。支持四种主要支付选项:立即支付、延期支付、分期付款和融资。使用Klarna前会进行风险检查以确保交易安全。 --- # Klarna Klarna是一种流行的“先买后付”支付方式,适用于超过20个国家。使用Klarna,付款人可以选择以下付款方式: 1. Pay now:通过银行卡、直接借记或其他资金来源立即支付全部金额。 2. Pay later:在商品送达后再付款,例如在30天内付款。 3. Pay in parts(分期付款):分几次(例如3次或4次)逐步支付总金额。 4. Financing:由Klarna提供的定期贷款。 在批准付款之前,Klarna会对付款人进行风险检查。 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/Klarna/integrationWithCheckout/index.md description: >- 介绍如何通过集成Klarna收银台接受支付,适用于实物电商和虚拟行业。支持内嵌JS-SDK和跳转收银台两种方式,无需PCI DSS合规。关键参数包括账单地址、配送地址、商品信息等,并需确保商品总价与支付金额一致。支持多种语言显示,但需匹配交易国家和币种。Klarna自带钱包功能,支持中断后继续支付。 --- # Klarna-收银台 通过集成收银台,接受Klarna支付。 ## PCI合规 | 集成方式 | PCI DSS | |:------|:--------| | 内嵌收银台 | 无需 | | 跳转收银台 | 无需 | | API | 无需 | ## 集成导航 跳转收银台/内嵌JS-SDK 接入文档: * 内嵌JS-SDK * 跳转收银台 ## klarna必要参数 | 行业 | billing Address | shipping Address |goods | tradeCountry | |:-------|:----------------|:-----------------|:-----------------|:---------------------| | 实物电商行业 | 必填 | 必填 | 必填 | 可选 | | 虚拟行业 | 可选 | 可选 | 必填 | 必填,收银台自动传送/S2S需要手动传入 | ::: note 特殊参数规则 1. goods参数的单价乘以数量求和后的结果应大于等于支付金额 (sum(goods\[0-N].unitPrice \* goods\[0-N].number) => amount) 2. 运费及额外费用设置 goods 里面新增一个对象 name和description 设置为shipping-fee unitPrice=运费 3. 为了提高转换率,我们建议您收集付款人姓名和账单地址,如果您暂时没有收集表单可以打开收银台可以打开账单地址收集选项。 4. klarna交易币种和交易国家必须对应,列表详见 klarna支付详情页 5. 只有当指定的区域设置与请求中使用的国家和货币匹配时,才能以另一种语言呈现 Klarna 收银台页面。默认情况下,结帐页面呈现为英文(en-US)。 ::: ## 再支付 Klarna有自己的钱包,在pingpong支付跳转钱包支付时放弃支付,用户可在钱包继续完成支付订单.pingpong会根据订单完成结果查询获得交易结果 ## 3D Secure Klarna 无需集成3D Secure ## 收银台接入最佳实践 详见APM 接入方式实践 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/Klarna/integrationWithS2S/index.md description: >- Klarna-S2S是一种通过API接受Klarna付款的方式,允许商户自定义结账页面。适用于实物电商和虚拟行业,无需PCI DSS合规。主要特点包括:覆盖欧洲、北美等地,支持多种支付方式如分期付款;关键参数有billingAddress、shippingAddress及goods等,且需确保商品总 --- # Klarna-S2S 使用我们的API接受Klarna付款,并构建自己的付款表单,以完全控制结账页面的外观和体验。 ## PCI合规 | 集成方式 | PCI DSS | |:------|:--------| | 内嵌收银台 | 无需 | | 跳转收银台 | 无需 | | API | 无需 | ## 集成导航 在API下单并支付的响应中获取参数`paymentRedirectUrl`, 重定向到该地址完成支付 详见Non-hosted 本地支付 ## klarna必要参数 | 行业 | billing Address | shipping Address |goods |tradeCountry | |:-------|:----------------|:-----------------|:-----------------|:---------------------| | 实物电商行业 | M | M | M |可选 | | 虚拟行业 | O | O | M |必填,收银台自动传送/S2S需要手动传入 | ::: note 特殊参数规则 1. goods参数的单价乘以数量求和后的结果应大于等于支付金额 (sum(goods\[0-N].averageUnitPrice \* goods\[0-N].number) => amount) 2. 运费及额外费用设置 goods 里面新增一个对象 name和description 设置为shipping-fee averageUnitPrice=运费 3. 为了提高转换率,我们强烈建议您收集付款人姓名和账单地址。 4. klarna交易币种和交易国家必须对应,列表详见 klarna支付详情页 5. 只有当指定的区域设置与请求中使用的国家和货币匹配时,才能以另一种语言呈现 Klarna 收银台页面。默认情况下,结帐页面呈现为英文(en-US)。 ::: ## 再支付 Klarna有自己的钱包,在PingPongCheckout跳转钱包支付时放弃支付,用户可在钱包继续完成支付订单.PingPongCheckout会根据订单完成结果查询获得交易结果 ## 3D Secure Klarna 无需集成3D Secure --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/Konbini/index.md description: >- Konbini是一种在日本广泛使用的便利店支付方式。顾客在网上下单后,会收到一个带有条形码的账单,可于指定时间内在任意一家合作便利店完成付款。主要特点包括无需银行账户、操作简便以及广泛的便利店网络覆盖。 --- # Konbini --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/Konbini/checkout/index.md description: >- Konbini-收银台集成文档介绍了如何通过集成收银台接受Konbini支付。适用于日本市场的线上支付场景,提供便捷的预下单和渲染收银台步骤。关键特性包括生成`paymentUrl`以及最佳实践指南。 --- # Konbini-收银台集成 通过集成收银台,接受Konbini支付。 ## 集成导航 ### Step1 请求收银台预下单 在API收银台预下单的响应中,您可以获取`paymentUrl` ### Step2 渲染收银台 接入文档:跳转收银台 ## 收银台接入最佳实践 详见APM 接入方式实践 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/Konbini/s2s/index.md description: >- Konbini-API集成文档介绍了如何通过API实现日本便利店支付方式的集成。适用于需要支持日本本地支付场景的应用。主要步骤包括调用下单并支付API,获取重定向URL,并引导用户至指定页面完成支付。 --- # Konbini-API集成 ## 集成导航 ## step1 请求下单并支付 请求API:下单并支付 ## 重定向 下单并支付响应中获取参数`paymentRedirectUrl`。并重定向到该地址,根据页面提示完成支付。 详见Non-hosted 本地支付 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/Konbini/sdk/index.md description: >- Konbini-JSSDK集成介绍如何通过API请求和JS-SDK渲染收银台,以接受日本地区的便利店支付。主要步骤包括请求预下单获取accessToken以及根据接入文档内嵌JS-SDK渲染收银台。适用于希望为用户提供线下支付选项的在线商家。 --- # Konbini-JSSDK集成 通过集成收银台,接受Konbini支付。 ## 集成导航 ### Step1 请求收银台预下单 在API收银台预下单的响应中,您可以获取`accessToken` ### Step2 渲染收银台 接入文档:内嵌JS-SDK ## 收银台接入最佳实践 详见APM 接入方式实践 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/KoreanBanks/index.md description: >- Korea Banks 介绍韩国各大银行的在线支付方式。适用于电子商务平台和各类线上服务,支持即时转账和信用卡支付等功能。覆盖整个韩国地区,以其便捷性和安全性受到广泛欢迎。 --- # Korea Banks --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/KoreanCards/index.md description: >- 韩国卡支付方式支持使用韩国本地发行的信用卡和借记卡进行在线支付。适用于与韩国商家交易或在韩国境内消费,具有便捷、安全的特点。主要覆盖地区为韩国,支持多种主流银行发行的卡片。 --- # Korea Cards --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/KoreanCards/localCardKoreaintegration/index.md description: >- Local Cards Korea 支持韩国本地银行卡支付,适用于需要接入韩国本地银行支付的场景。集成方式包括收银台和S2S模式。收银台模式下通过预下单获取accessToken或paymentUrl后渲染页面;S2S模式则直接请求下单并支付获取paymentUrl。注意,S2S模式需指定具体的本地 --- ::: note 提示 参数中的 device 设备信息,accessModel取值,需要根据具体场景填写对应的编号,不同的编号会展示不同支付形态,具体可以参考下单接口 ::: # 集成导航 ## 收银台 ### Step1 请求收银台预下单 在API收银台预下单的响应中,您可以获取`accessToken`或者`paymentUrl` ### Step2 渲染收银台 跳转收银台/内嵌JS-SDK 接入文档: * 内嵌JS-SDK * 跳转收银台 ## S2S ### Step1 请求S2S下单并支付 在APIS2S下单并支付的响应中,您可以获取`paymentUrl` 并跳转到对应的钱包支付页面 ## 请求参数 ::: note 提示 S2S 模式下需要上传 paymentMethod.type 选择具体的本地银行进行支付;收银台模式下会根据配置展示所有的本地银行卡,无法指定展示某个具体的本地银行卡支付 ::: --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/LinkAja/index.md description: >- LinkAja是一种由中国移动推出的支付方式,适用于中国移动用户在中国大陆进行线上及线下支付。其主要特点包括便捷的手机号绑定、快速支付流程以及广泛覆盖的商家支持。 --- # LinkAja --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/Magna/index.md description: >- Magna是智利Cencosud集团发行的支付卡品牌,主要用于集团旗下零售商店如Paris百货、Jumbo超市等。持卡人可享受专属折扣、积分奖励及灵活分期付款选项,并支持在线支付。近年来,Magna扩大了接受范围,与更多第三方商户合作,增加了卡片使用灵活性,适用于希望吸引智利本地消费者的零售商和电商 --- # Magna Magna是智利的支付卡品牌,由Cencosud集团发行。作为Cencosud旗下的私有标签信用卡,Magna主要用于集团旗下的零售商店,如Paris百货、Jumbo超市和Easy家居用品店。持卡人可享受专属折扣、积分奖励和灵活的分期付款选项。Magna卡还支持在线支付,方便用户在Cencosud的电商平台上购物。近年来,Magna扩大了其接受范围,与更多第三方商户合作,增加了卡片的使用灵活性。对于在智利市场运营的零售商和电商平台,支持Magna支付可以吸引大量本地消费者,提高销售转化率和客户忠诚度。 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/Mandiri/index.md description: >- Mandiri是一种在印度尼西亚广泛使用的支付方式,支持银行转账和电子钱包。适用于在线购物、账单支付及各类电子商务交易。主要特点包括实时到账、安全可靠以及用户界面友好。 --- # Mandiri --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/MBway/index.md description: >- MBway是一种即时支付方式,主要服务于法国地区的银行客户。用户通过手机应用或网上银行快速完成转账和支付,支持多种场景如在线购物、账单支付等。其特点是操作简便、安全性高且处理速度快。 --- # MBway --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/MCash/index.md description: >- MCash是一种便捷的移动支付方式,主要服务于东南亚地区。用户可通过手机应用完成快速安全的转账、充值和缴费等操作。支持多种货币结算,并提供实时交易通知与24/7客户服务。 --- # MCash --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/merPay/index.md description: >- merPay是一种电子支付方式,适用于日本市场,支持线上购物、账单支付及个人转账等功能。用户可通过手机应用轻松完成支付,具有操作简便、安全性高等特点,并提供多种优惠活动以吸引消费者使用。 --- # merPay --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/MobilePayments/index.md description: >- 移动支付是韩国广泛使用的支付方式,支持通过智能手机应用程序完成交易。适用于线上购物、线下零售及服务支付场景。主要特点包括便捷性、安全性以及与银行账户或信用卡的无缝连接。覆盖韩国全国,支持多种主流移动支付应用如KakaoPay和Naver Pay。 --- # Mobile Payments Korea --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/MobilePop/index.md description: >- Mobile Pop是一种移动支付方式,适用于在线购物和即时转账。主要特点包括快速便捷的支付体验、支持多种加密货币以及广泛覆盖亚洲地区。用户通过扫描二维码或输入支付码即可完成交易,无需携带实体钱包。 --- # Mobile Pop --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/Multibanco/index.md description: >- Multibanco是一种在葡萄牙广泛使用的支付方式,支持通过ATM、网上银行或移动应用进行支付。用户可以使用Multibanco生成的参考代码,在指定时间内完成支付。这种支付方法适用于电子商务交易,尤其受到没有信用卡用户的欢迎。 --- # Multibanco --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/Mybank/index.md description: >- Mybank是一种基于支付宝平台的支付方式,适用于中国地区。主要特点包括支持大额交易、快速到账以及与阿里巴巴生态系统的无缝集成。商家可以通过Mybank为消费者提供灵活多样的支付选项,增强用户体验。 --- # Mybank --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/Nativa/index.md description: >- Nativa是阿根廷国家银行发行的本土支付卡品牌,提供信用卡和借记卡服务,广泛应用于日常消费、网上购物及ATM取现。该卡在阿根廷全国范围内被高度信任并广泛接受,以其优惠利率和灵活支付选项著称。对于阿根廷境内的商户尤其是电子商务平台而言,支持Nativa支付有助于吸引更多本地消费者,提升销售转化率。 --- # Nativa Nativa是阿根廷的本土支付卡品牌,由Banco de la Nación Argentina(阿根廷国家银行)发行。作为国有银行的产品,Nativa卡在阿根廷拥有广泛的使用范围和高度的信任度。它提供信用卡和借记卡服务,适用于日常消费、网上购物和ATM取现。Nativa卡的特点包括全国范围内的广泛接受度、优惠的利率和灵活的支付选项。对于在阿根廷经营的商户,特别是电子商务平台,支持Nativa支付可以吸引大量本地客户,提高销售转化率。 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/Naverpay/index.md description: >- Naverpay是一种韩国主流的在线支付方式,支持用户通过Naver账户进行安全便捷的支付。适用于电子商务网站和移动应用,提供快速结账体验。主要特点包括支持多种支付手段如信用卡、银行转账等,并且覆盖全韩国地区。 --- # Naverpay --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/Naverpay/naverpayIntegration/index.md description: >- Naverpay是一种支付方式,适用于韩国市场。支持收银台和S2S两种集成模式。在收银台模式下,通过预下单获取accessToken或paymentUrl后渲染收银台;S2S模式则直接请求下单并支付,获取paymentUrl跳转至钱包支付页面。设备信息和访问模型需根据具体场景填写。 --- ::: note 提示 参数中的 device 设备信息,accessModel取值,需要根据具体场景填写对应的编号,不同的编号会展示不同支付形态,具体可以参考下单接口 ::: # 集成导航 ## 收银台 ### Step1 请求收银台预下单 在API收银台预下单的响应中,您可以获取`accessToken`或者`paymentUrl` ### Step2 渲染收银台 跳转收银台/内嵌JS-SDK 接入文档: * 内嵌JS-SDK * 跳转收银台 ## S2S ### Step1 请求S2S下单并支付 在APIS2S下单并支付的响应中,您可以获取`paymentUrl` 并跳转到对应的钱包支付页面 ## 请求参数 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/Octopus/index.md description: >- 八达通是一种非接触式智能卡支付方式,广泛应用于香港地区的公共交通、零售商店及公共服务。支持快速小额支付,无需签名,方便快捷。用户可在通过多种渠道进行充值,并享受部分商家的优惠折扣。 --- # 八达通 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/overview/index.md description: >- 支付方式介绍文档提供了多种支付手段的概览,包括信用卡、借记卡、电子钱包及银行转账等。每种支付方式均详细介绍其适用地区、交易流程、费用结构及安全特性。此文档适用于希望了解并集成不同支付解决方案至其服务中的商家和技术人员。 --- # Payment Methods PingPongCheckout 支持全球多种支付方式,包括信用卡、借记卡、电子钱包及银行转账等。使用下方筛选器按国家/地区或币种过滤,查看支持的支付方式详情。 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/OVO/index.md description: >- OVO是一种在印尼广泛使用的电子钱包,适用于线上购物、账单支付及线下交易等多种场景。用户通过绑定银行账户或直接充值来使用该服务,支持二维码支付和转账功能,为个人和商家提供便捷安全的支付解决方案。 --- # OVO --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/OXXO/index.md description: >- OXXO是一种在墨西哥广泛使用的现金支付方式。消费者可以在任何OXXO便利店通过提供生成的条形码或参考号完成付款。此支付方式适用于没有银行账户或信用卡的用户,具有高普及率和便利性。 --- # OXXO --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/P24/index.md description: >- P24是一种主要在波兰使用的在线银行转账支付方式,允许用户通过其银行账户直接进行安全快速的支付。适用于希望为波兰客户提供本地化支付体验的电商和在线服务提供商。支持的主要银行包括PKO Bank Polski, mBank等。 --- # P24 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/PagBank/index.md description: >- PagBank是一种巴西流行的数字银行支付方式,支持用户通过其账户进行在线支付。主要特点包括快速转账、账单支付及手机充值等服务。适用于电商平台、应用程序内购买等多种场景,为用户提供便捷安全的支付体验。 --- # PagBank --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/PagoEfectivo/index.md description: >- Pago Efectivo是一种主要在秘鲁使用的现金支付方式,允许消费者通过指定的实体点如银行、药店或便利店完成在线购物的付款。该支付方法特别适用于没有银行账户或信用卡的用户,提供了一种便捷且安全的交易手段。 --- # Pago Efectivo --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/Paidy/index.md description: >- Paidy是一种日本的信用支付方式,允许消费者在线购物时先购买后付款。适用于希望提高转化率并扩大客户基础的电子商务平台。无需信用卡,用户仅需提供电话号码和邮箱即可完成注册。主要特点包括快速结账流程、无额外费用以及广泛的商户接受度。 --- # Paidy --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/papara/index.md description: >- Papara是一种电子钱包支付方式,主要服务于土耳其市场。支持即时转账、账单支付及在线购物等多种支付场景。用户可通过手机应用轻松管理账户,享受便捷安全的支付体验。 --- # papara --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/Pay-easy/index.md description: >- Pay-easy是一种便捷的在线支付方式,适用于日本地区的银行转账。用户可以通过此服务轻松完成账单支付、学费缴纳等日常金融交易。其主要特点包括操作简便、支持多种银行以及实时到账,为用户提供安全可靠的支付体验。 --- # Pay-easy --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/Pay-easy/checkout/index.md description: >- 介绍如何通过集成收银台接受Pay-easy支付,适用于希望在日本市场提供便捷在线支付选项的商家。文档详细说明了从请求预下单到渲染收银台的具体步骤,并提供了最佳实践指南以确保顺利接入。 --- # Pay-easy 收银台集成 通过集成收银台,接受PayPay支付。 ## 集成导航 ### Step1 请求收银台预下单 在API收银台预下单的响应中,您可以获取`paymentUrl` ### Step2 渲染收银台 接入文档:跳转收银台 ## 收银台接入最佳实践 详见APM 接入方式实践 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/Pay-easy/s2s/index.md description: >- Pay-easy API集成文档提供了在日本地区使用Pay-easy进行支付的API集成指南。通过调用下单并支付API,商户可以获取支付重定向链接paymentRedirectUrl,并引导用户至该链接完成支付过程。适用于需要支持银行转账支付方式的在线商家。 --- # Pay-easy API集成 ## 集成导航 ## step1 请求下单并支付 请求API:下单并支付 ## 重定向 下单并支付响应中获取参数`paymentRedirectUrl`。并重定向到该地址,根据页面提示完成支付。 详见Non-hosted 本地支付 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/Pay-easy/sdk/index.md description: >- 介绍如何通过集成Pay-easy JSSDK在网站上接受PayPay支付。适用于希望在日本市场提供便捷支付选项的商家。文档详细说明了从请求收银台预下单到渲染收银台的具体步骤,包括获取accessToken及使用内嵌JS-SDK的最佳实践指南。 --- # Pay-easy JSSDK集成 通过集成收银台,接受PayPay支付。 ## 集成导航 ### Step1 请求收银台预下单 在API收银台预下单的响应中,您可以获取`accessToken` ### Step2 渲染收银台 接入文档:内嵌JS-SDK ## 收银台接入最佳实践 详见APM 接入方式实践 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/PayByBank/index.md description: >- Pay By Bank是一种直接银行转账支付方式,允许用户通过其银行账户安全快捷地完成在线支付。主要适用于欧洲地区,支持即时支付确认和高安全性标准。无需额外注册或存储敏感信息,适合各类电子商务平台及服务提供商使用。 --- # Pay By Bank --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/PayByBank/checkout/index.md description: >- 介绍如何通过集成收银台接受Pay By Bank支付方式。适用于希望在欧洲地区提供银行直接支付选项的商家,支持多种货币和语言。首先需请求收银台预下单以获取paymentUrl,随后根据接入文档指引渲染并跳转至收银台页面完成交易流程。 --- # Pay By Bank-收银台集成 通过集成收银台,接受 Pay By Bank 支付。 ## 集成导航 ### Step1 请求收银台预下单 在API收银台预下单的响应中,您可以获取`paymentUrl` ### Step2 渲染收银台 接入文档:跳转收银台 ## 收银台接入最佳实践 详见APM 接入方式实践 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/PayByBank/s2s/index.md description: >- Pay By Bank-API集成支持通过银行直接支付。适用于需要提供便捷、安全支付选项的在线商家。主要特点包括覆盖欧洲多个国家,通过API下单并支付,获取paymentRedirectUrl后重定向完成支付流程。 --- # Pay By Bank-API集成 ## 集成导航 ### step1 请求下单并支付 请求API:下单并支付 ### 重定向 下单并支付响应中获取参数`paymentRedirectUrl`。并重定向到该地址,根据页面提示完成支付。 详见Non-hosted 本地支付 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/PayByBank/sdk/index.md description: >- 介绍如何通过集成JSSDK接受Pay By Bank支付。适用于需要在网站或应用中直接嵌入银行支付选项的商家。主要步骤包括请求收银台预下单以获取accessToken,以及使用内嵌JS-SDK渲染收银台界面。此支付方式覆盖英国等地区,提供安全便捷的资金转移服务。 --- # Pay By Bank-JSSDK集成 通过集成收银台,接受 Pay By Bank 支付。 ## 集成导航 ### Step1 请求收银台预下单 在API收银台预下单的响应中,您可以获取`accessToken` ### Step2 渲染收银台 接入文档:内嵌JS-SDK ## 收银台接入最佳实践 详见APM 接入方式实践 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/PayCash/index.md description: >- PayCash是一种快速便捷的在线支付方式,适用于需要即时交易确认和个人间转账的场景。支持全球超过100个国家和地区使用,主要特点包括零手续费、实时到账以及高度安全性。 --- # PayCash --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/PAYCO/index.md description: >- PAYCO是一种在韩国广泛使用的移动支付方式,支持线上购物、账单支付及个人转账等功能。用户可以通过手机应用程序轻松完成支付操作,具有便捷性和安全性高的特点。商家集成PAYCO后,能够为消费者提供多样化的支付选择,提升用户体验。 --- # PAYCO --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/Payconiq/index.md description: >- Payconiq是一种便捷的移动支付方式,主要在比利时和卢森堡使用。用户可以通过手机应用程序快速安全地进行在线或面对面交易。其特点包括即时转账、账单支付及支持多种货币。适用于个人间转账、购物付款等多种场景,提供高效且安全的支付体验。 --- # Payconiq --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/Paymaya/index.md description: >- Paymaya是菲律宾领先的数字金融服务平台,提供电子钱包和在线支付解决方案。用户可以通过Paymaya进行快速便捷的线上线下支付、转账、账单缴费等服务。该平台支持多种充值方式,具有高安全性和广泛的商户接受度,是菲律宾市场重要的移动支付工具。 --- # Paymaya --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/Paynow/index.md description: >- Paynow是一种便捷的在线支付方式,适用于新加坡地区。支持个人与企业通过银行账户或参与银行的应用程序即时转账收款。其特点包括快速交易确认、高度安全性和用户友好界面。 --- # Paynow --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/PayPal/index.md description: >- PayPal 是一种全球广泛使用的在线支付方式,支持个人和商家进行快速、安全的交易。适用于电子商务网站、移动应用以及跨境支付等多种场景。主要特点包括用户账户体系完善、支持多种货币转换、提供买家卖家保护机制等。覆盖地区几乎遍布全球,尤其在北美和欧洲市场普及率极高。 --- # PayPal --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/PayPay/index.md description: >- PayPay是一种便捷的移动支付方式,主要在日本广泛使用。用户可以通过扫描二维码完成支付,支持线上及线下多种消费场景。该支付方式具有操作简单、交易速度快的特点,并且与多家银行和金融机构合作,确保了资金的安全性和服务的稳定性。 --- # PayPay --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/PayPay/checkout/index.md description: >- 介绍如何通过集成收银台接受PayPay支付,适用于日本市场。主要步骤包括请求收银台预下单以获取paymentUrl,以及渲染收银台完成支付流程。遵循最佳实践确保顺利接入。 --- # PayPay-收银台集成 通过集成收银台,接受PayPay支付。 ## 集成导航 ### Step1 请求收银台预下单 在API收银台预下单的响应中,您可以获取`paymentUrl` ### Step2 渲染收银台 接入文档:跳转收银台 ## 收银台接入最佳实践 详见APM 接入方式实践 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/PayPay/s2s/index.md description: >- PayPay-API集成文档介绍了如何通过API实现下单并支付功能。适用于希望在日本市场提供便捷移动支付选项的商家,支持从请求下单到用户完成支付的全流程。关键步骤包括调用下单并支付API及处理重定向以完成支付。 --- # PayPay-API集成 ## 集成导航 ## step1 请求下单并支付 请求API:下单并支付 ## 重定向 下单并支付响应中获取参数`paymentRedirectUrl`。并重定向到该地址,根据页面提示完成支付。 详见Non-hosted 本地支付 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/PayPay/sdk/index.md description: >- 介绍如何通过集成PayPay-JSSDK在日本地区接受PayPay支付。首先需要请求收银台预下单以获取accessToken,然后根据接入文档渲染内嵌JS-SDK的收银台界面。遵循最佳实践指南可以确保顺利完成集成。 --- # PayPay-JSSDK集成 通过集成收银台,接受PayPay支付。 ## 集成导航 ### Step1 请求收银台预下单 在API收银台预下单的响应中,您可以获取`accessToken` ### Step2 渲染收银台 接入文档:内嵌JS-SDK ## 收银台接入最佳实践 详见APM 接入方式实践 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/Paypo/index.md description: >- Paypo是波兰领先的先买后付(BNPL)支付解决方案,为消费者提供灵活的分期付款选择。支持30天免息延期付款,以及4-9期的分期付款服务。通过简化的在线支付流程,Paypo为波兰电子商务提供了便捷、安全的支付体验,帮助商家提升转化率并增强客户购物体验。交易金额范围为10 PLN至8,000 PLN。 --- # Paypo --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/Paysafecard/index.md description: >- Paysafecard是一种预付费在线支付方式,允许用户通过购买实体或电子卡进行安全的在线支付。适用于不愿意或无法使用银行账户或信用卡的消费者。主要在欧洲、北美及部分亚洲地区广泛使用,支持多种面额,提供匿名且方便快捷的支付体验。 --- # Paysafecard --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/Paysera/index.md description: >- Paysera是一种电子钱包支付方式,广泛应用于欧洲地区。用户可以方便地进行在线购物、转账和收款。支持多种货币,并提供安全便捷的支付体验。主要特点包括快速交易确认、低手续费以及易于集成的API接口。 --- # Paysera --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/Payso/index.md description: >- Payso是一种香港地区流行的移动支付解决方案,支持用户通过智能手机进行便捷的线上线下支付。主要特点包括快速支付、安全加密、多场景适用等功能。广泛应用于零售、餐饮、交通及在线电商等领域,为用户提供高效的数字支付体验。 --- # Payso --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/PayWithIyzico/index.md description: >- 介绍iyzico支付方式,一种广泛应用于土耳其及周边地区的在线支付解决方案。支持多种支付手段如信用卡、借记卡和分期付款等,具有高安全性与便捷性,适用于电子商务网站集成,帮助企业快速接入多样化的支付选项以提升用户体验。 --- # Pay with iyzico --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/Permata/index.md description: >- Permata是一种支持印尼地区的在线银行转账支付方式。适用于希望通过银行账户直接进行安全、快速支付的用户。主要特点包括实时交易确认、支持多种货币以及提供详细的交易记录,确保每一笔交易的安全性和透明度。 --- # Permata --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/PicPay/index.md description: >- PicPay是一种流行的巴西移动支付方式,支持个人和企业用户通过手机应用进行快速、安全的资金转账。该支付方式允许用户绑定银行卡或信用卡,并通过二维码扫描完成付款。PicPay还提供账单支付、手机充值等服务,覆盖全巴西地区,是线上购物及日常消费的理想选择。 --- # PicPay --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/PIX/index.md description: >- PIX是一种即时支付方式,主要在巴西使用。通过生成二维码或密钥实现个人、企业间的快速转账与支付。支持全天候操作,且交易成本低廉。适用于线上购物、账单支付等多种场景。 --- # PIX --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/Presto/index.md description: >- Presto是哥伦比亚的私有标签信用卡,由Grupo Éxito零售集团推出,主要用于旗下超市、百货商店及其他零售网点。持卡人可享受专属折扣、积分奖励和灵活分期付款,并支持在线支付。近年来,Presto扩展了使用范围,与更多商户合作,增加了卡片实用性。适用于哥伦比亚市场的零售商和电商平台,以吸引本地 --- # Presto Presto是哥伦比亚的支付卡品牌,由Grupo Éxito零售集团推出。作为一种私有标签信用卡,Presto主要用于Éxito集团旗下的超市、百货商店和其他零售outlets。持卡人可享受专属折扣、积分奖励和灵活的分期付款选项。Presto卡还支持在线支付,方便用户在Éxito的电商平台上购物。近年来,Presto扩展了其使用范围,与其他商户合作,增加了卡片的实用性。对于在哥伦比亚市场运营的零售商和电商平台,支持Presto支付可以吸引大量本地消费者,提高客户忠诚度。 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/PromptPay/index.md description: >- PromptPay是泰国的一种在线银行支付方式,由泰国银行开发和监管。商家通过展示二维码供顾客使用参与银行的应用程序扫描或上传二维码截图完成支付。PromptPay支持手机号码、国民身份证号码、企业注册号码及数字钱包号码作为用户识别方式,实现跨行转账。该支付方式简化了支付流程,提高了支付效率,并确保 --- # PromptPay PromptPay是泰国的一种在线银行支付方式,由泰国银行(Bank of Thailand,BoT)开发和监管。使用PromptPay时,商家会向顾客展示一个二维码,顾客可以使用参与银行的任何一款应用程序进行支付。顾客可以通过扫描二维码或上传二维码截图来完成支付。 为了实现银行间资金转账,PromptPay系统通过以下几种方式来识别用户: * 手机号码 * 国民身份证号码 * 企业注册号码 * 数字钱包号码 这些信息作为代理标识,使得用户可以方便快捷地进行跨行转账。PromptPay的设计旨在简化支付流程,提高支付效率,同时确保交易的安全性。 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/PSE/index.md description: >- PSE是一种针对哥伦比亚市场的在线支付方式,允许用户通过其银行账户直接进行支付。主要特点包括支持多家当地银行、实时交易确认以及高安全性。适用于电子商务平台和希望为哥伦比亚用户提供便捷支付选项的商家。 --- # PSE --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/QRIS/index.md description: >- Qris是一种基于二维码的支付方式,主要应用于印度尼西亚市场。支持多种电子钱包和银行应用,用户通过扫描商家提供的二维码完成支付。其特点包括便捷快速、广泛兼容以及增强的安全性措施。 --- # Qris --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/RabbitLINEPay/index.md description: >- RabbitLINEPay是一种结合了Rabbit Card和LINE Pay的支付方式,主要在日本和泰国使用。它支持线上购物、线下支付以及转账等功能,用户可以通过扫描二维码或条形码完成支付。此外,还提供了积分奖励机制,鼓励用户频繁使用。 --- # RabbitLINEPay --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/RapiPago/index.md description: >- Rapi Pago是一种阿根廷的在线支付方式,允许用户通过银行账户或预付卡进行快速安全的支付。适用于电商平台、公共服务缴费等场景。主要特点包括即时交易确认和广泛的银行网络支持。 --- # Rapi Pago --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/RCBCOnlinePayment/index.md description: >- RCBC(Rizal Commercial Banking Corporation)是菲律宾主要银行之一提供的在线银行支付方式。用户可以通过RCBC银行账户进行安全便捷的在线支付和转账服务。该支付方式具有高安全性、即时到账、操作简便等特点,广泛应用于电子商务、账单缴费等场景。 --- # RCBC --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/Rpay/index.md description: >- Rakuten Pay 是乐天集团推出的电子支付方式,适用于日本市场。支持线上购物、实体店铺支付及移动支付等多种场景。用户通过智能手机应用即可完成支付,享受便捷安全的支付体验。 --- # Rakuten Pay --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/RuPay/index.md description: >- RuPay是印度本土支付卡网络,提供信用卡、借记卡和预付卡服务,广泛应用于实体店支付、在线购物和ATM取现。其特点包括低手续费、广泛的商户网络和针对印度市场的特色服务,支持非接触支付和移动支付,并与多个数字钱包集成。对于面向印度市场的商家,特别是电子商务平台,支持RuPay支付有助于吸引本地客户,扩 --- # RuPay RuPay是印度本土的支付卡网络,由印度国家支付公司(NPCI)开发和运营。作为印度政府推动金融普惠的重要工具,RuPay提供信用卡、借记卡和预付卡服务。RuPay卡在印度广泛使用,支持实体店支付、在线购物和ATM取现。其特点包括低手续费、广泛的商户网络和针对印度市场的特色服务。RuPay还支持非接触支付和移动支付,与多个数字钱包集成。对于面向印度市场的商家,特别是电子商务平台,支持RuPay支付对吸引本地客户至关重要,有助于扩大市场份额和提高用户粘性。 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/SAMSUNGPAY/index.md description: >- SAMSUNGPAY 是一种便捷的移动支付方式,适用于三星手机用户在支持该服务的线上和线下商家进行支付。主要特点包括快速安全的交易处理、广泛的韩国市场覆盖率以及与三星设备生态系统的深度集成,提供指纹识别等生物认证方式确保交易安全。 --- # SAMSUNGPAY --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/Santander/index.md description: >- Santander是一种支付方式,主要服务于西班牙、巴西及部分欧洲和拉丁美洲国家。支持网银转账、信用卡等多种支付手段,适用于电商购物、公共服务缴费等场景。其特点是安全可靠、操作简便,能够为用户提供快速便捷的支付体验。 --- # Santander --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/Satispay/index.md description: >- Satispay是一种便捷的移动支付方式,主要服务于意大利市场。用户可以通过手机应用直接进行付款、收款及转账操作,支持多种消费场景如零售购物、公共服务缴费等。其特点包括即时到账、无需额外硬件以及提供安全的交易环境。 --- # Satispay --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/Sencillito/index.md description: >- Sencillito是一种便捷的在线支付方式,适用于拉丁美洲多个国家。用户可以通过银行转账或信用卡等多种方式进行快速支付。该支付方式支持一次性支付和订阅支付模式,提供安全、高效的交易体验。 --- # Sencillito --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/SEPADirectDebit/index.md description: >- SEPA是欧洲统一的支付体系,简化跨境欧元支付。主要包含SEPA直接借记(SDD)和SEPA信用转账(SCT)两种模式。SDD允许收款人在获得授权后直接扣款,适用于消费者和个人交易,支持8周内无理由退款及13个月未授权交易追溯。SCT由付款人发起,确认后不可撤销,需单独授权且无单方面退款机制。 --- # SEPA **SEPA支付系统概述** 单一欧元支付区(SEPA)是欧洲统一的支付体系,旨在简化跨境欧元支付,使其与国内支付一样高效便捷。SEPA主要包含两种核心支付模式:SEPA直接借记(SDD)和SEPA信用转账(SCT),这两种模式在交易机制、可逆性和适用场景上存在显著差异。 **SEPA直接借记(SDD)详解【SEPA Direct Debit】** **基本原理** SEPA直接借记是一种由收款方发起的支付机制,允许收款人在获得付款人预先授权后,直接从付款人账户扣款。 **类型划分** > * **消费者直接借记(Core SDD)**:面向个人消费者的标准模式 > * **企业直接借记(B2B SDD)**:专为企业间交易设计 **退款机制** > * 消费者可在付款后**8周内无理由申请退款** > * 对于未授权交易,退款期限可延长至**13个月** > * 退款流程自动执行,无需收款方批准 **SEPA信用转账(SCT)详解【SEPA Credit Transfer】** **基本原理** SEPA信用转账是由付款人主动发起的支付方式,付款人指示其银行将资金转移至收款人账户。 **交易特性** * 交易一旦执行即被确认,基本不可撤销 * 每笔交易需付款人单独授权 * 无单方面退款机制,退款需收款方同意并主动发起 **退款机制对比** | 退款特性 | SEPA直接借记 (SDD) | SEPA信用转账 (SCT) | |---------|-------------------|-------------------| | **消费者退款权** | 付款后8周内可无理由退款 | 无法单方面退款,需收款方同意 | | **未授权交易** | 最长可追溯13个月 | - | | **退款流程** | 自动执行,无需收款方批准 | 需收款方主动发起退款交易 | **合规要求** | 集成方式 | PCI DSS | 风控JS | 3DS组件 | |:-------------------|:--------|:-----|:-------------| | 内嵌收银台 | 无需 |无需 | 无需 | | 跳转收银台 | 无需 |无需 | 无需 | | Server To Server | 无需 |无需 | 无需 | --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/SEPADirectDebit/checkout/index.md description: >- 介绍如何通过集成收银台接受SEPA Direct Debit支付,适用于欧洲经济区内的银行账户直接扣款。首先需请求收银台预下单以获取paymentUrl,随后根据接入文档跳转至收银台完成支付流程。遵循APM接入方式实践可优化用户体验。 --- # SEPA Direct Debit-收银台集成 通过集成收银台,接受SEPA Direct Debit支付。 ## 集成导航 ### Step1 请求收银台预下单 在API收银台预下单的响应中,您可以获取`paymentUrl` ### Step2 渲染收银台 接入文档:跳转收银台 ## 收银台接入最佳实践 详见APM 接入方式实践 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/SEPADirectDebit/s2s/index.md description: >- SEPA Direct Debit-API集成提供了一种通过API实现下单并支付的支付方式。适用于欧洲经济区内的企业,支持直接借记付款。关键步骤包括请求API下单并支付,获取`paymentRedirectUrl`后重定向至该地址完成支付。 --- # SEPA Direct Debit-API集成 ## 集成导航 ### step1 请求下单并支付 请求API:下单并支付 ### 重定向 下单并支付响应中获取参数`paymentRedirectUrl`。并重定向到该地址,根据页面提示完成支付。 详见Non-hosted 本地支付 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/SEPADirectDebit/sdk/index.md description: >- 介绍如何通过集成JS-SDK接受SEPA Direct Debit支付。适用于欧洲单一欧元支付区内的商户,支持安全、便捷地处理银行直接扣款交易。文档详细说明了从请求收银台预下单到渲染收银台的步骤,包括获取accessToken和使用内嵌JS-SDK的最佳实践。 --- # SEPA Direct Debit-JSSDK集成 通过集成收银台,接受SEPA Direct Debit支付。 ## 集成导航 ### Step1 请求收银台预下单 在API收银台预下单的响应中,您可以获取`accessToken` ### Step2 渲染收银台 接入文档:内嵌JS-SDK ## 收银台接入最佳实践 详见APM 接入方式实践 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/Servipag/index.md description: >- ServiPag是一种在智利广泛使用的支付方式,允许用户通过在线平台或实体网点完成账单支付。支持多种支付类型如公共服务费、信用卡还款等,为个人和企业提供便捷的支付解决方案。 --- # ServiPag --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/ShopeePay/index.md description: >- ShopeePay 是一种电子钱包支付方式,主要应用于Shopee电商平台及其合作伙伴。支持地区包括印度尼西亚、马来西亚、菲律宾等东南亚国家。用户可以享受快速便捷的支付体验,并参与各种促销活动和优惠。 --- # ShopeePay --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/Skrill/index.md description: >- Skrill是一种全球性的在线支付方式,支持100多个国家和地区,提供快速、安全的在线转账服务。用户可以通过电子邮件地址进行收付款,支持多种货币,并可链接信用卡、借记卡和银行账户。主要特点包括即时支付确认、低手续费及多语言客户服务,适用于电子商务和个人转账等多种场景。 --- # Skrill --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/SPEI/index.md description: >- SPEI是墨西哥的一种即时银行转账支付方式。适用于希望在墨西哥境内实现快速安全转账的个人和企业用户。主要特点包括实时到账、支持多种货币以及广泛的银行网络覆盖,确保资金流转高效便捷。 --- # SPEI --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/TarjetaNaranja/index.md description: >- Tarjeta Naranja是阿根廷的领先信用卡品牌,提供创新信贷解决方案和广泛的商户网络。支持分期付款、零利率融资及虚拟卡选项,适用于在线和移动支付。其移动应用方便用户管理账户与支付。接受该支付方式有助于吸引阿根廷消费者,尤其在电商领域。 --- # Tarjeta Naranja Tarjeta Naranja是阿根廷领先的信用卡品牌,1985年创立于科尔多瓦。作为本土金融科技先驱,它以创新的信贷解决方案和广泛的商户网络闻名。Tarjeta Naranja提供多种支付选项,包括分期付款和零利率融资,深受欢迎。除实体卡外,还有虚拟卡选项,支持在线和移动支付。其移动应用让用户轻松管理账户和支付。对商家而言,接受Tarjeta Naranja有助于吸引阿根廷消费者,尤其在电商领域。该公司还致力于促进金融教育和普惠金融。 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/TarjetaShopping/index.md description: >- Tarjeta Shopping是阿根廷知名信用卡品牌,由Tarshop S.A.发行,专为购物消费设计。该卡提供灵活的分期付款选项,在阿根廷零售商店、超市和在线商城广泛接受。持卡人可享受多种优惠和折扣,包括特定商户的专属优惠。此外,Tarjeta Shopping还推出了移动应用,方便用户管理账户 --- # Tarjeta Shopping Tarjeta Shopping是阿根廷知名的信用卡品牌,由Tarshop S.A.发行。作为一种专门针对购物消费的信用卡,它在阿根廷的零售市场中占有重要地位。Tarjeta Shopping提供灵活的分期付款选项,让消费者能够更轻松地进行大额购物。该卡在众多零售商店、超市和在线商城中被广泛接受。持卡人可以享受各种优惠和折扣,包括特定商户的专属优惠。近年来,Tarjeta Shopping也推出了移动应用,方便用户管理账户、查看交易和支付账单。 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/TeenCash/index.md description: >- Teen Cash是一种专为青少年设计的预付卡支付方式,主要在北美地区使用。该支付方法允许家长为孩子设置消费限额和查看交易记录,以帮助管理孩子的财务行为。支持在线购物及部分实体店铺消费,特别适合希望培养孩子理财意识的家庭。 --- # Teen Cash --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/ThailandBanks/index.md description: >- KrungsriBank是泰国主要银行之一,提供包括二维码支付、P2P转账及账单支付在内的多种数字支付服务。通过SCB EASY移动应用,该行在泰国境内广泛支持电子商务与跨境支付需求,致力于推动无现金社会发展,同时兼顾传统银行业务。 --- # KrungsriBank Siam Commercial Bank是泰国最古老的银行,提供创新的数字支付解决方案。其移动银行app SCB EASY在泰国广泛使用,支持二维码支付、P2P转账和账单支付。为电子商务和跨境支付提供全面解决方案。作为泰国金融科技的领导者,Siam Commercial Bank不断推出新的数字服务,助力泰国向无现金社会转型,同时保持传统银行业务的稳健发展。 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/Tmoney/index.md description: >- T money是一种电子钱包支付方式,广泛应用于日本的公共交通、零售商店和在线购物。用户可通过手机应用或实体卡进行充值和支付,支持NFC技术实现快速交易。主要特点包括便捷性高、安全性好以及普及度广,适用于日常小额支付场景。 --- # T money --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/TNGeWallet/index.md description: >- TNGeWallet是一种电子钱包支付方式,主要在马来西亚地区使用。支持用户通过手机应用完成在线购物、转账及账单支付等功能。该支付方式具备安全便捷的特点,适用于各类线上交易场景。 --- # TNGeWallet --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/TOSS/index.md description: >- TOSS是一种韩国流行的在线支付方式,支持多种支付手段如信用卡、银行转账等。适用于电商网站和移动应用,提供便捷的支付体验。覆盖韩国主要银行与金融机构,支持即时支付确认及退款功能。 --- # TOSS --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/Troy/index.md description: >- Troy是一种主要在土耳其使用的支付方式,支持借记卡和信用卡交易。适用于在线购物、账单支付等多种场景。具有快速结算、安全可靠的特点。商家接入后可以吸引更多土耳其本地消费者。 --- # Troy --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/TrueMoneyWallet/index.md description: >- TrueMoney Wallet 是一种电子钱包支付方式,主要在泰国及部分东南亚国家使用。支持用户通过手机应用完成在线购物、账单支付以及转账等操作。该支付方式具有便捷快速的特点,适用于电商平台、移动应用内购等多种场景,并提供多种语言版本以满足不同用户需求。 --- # TrueMoney Wallet --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/Trustly/index.md description: >- Trustly是一种即时在线银行转账支付方式,允许消费者直接从其银行账户进行支付。主要特点包括无需注册、快速安全以及支持多种货币。适用于希望提供无缝支付体验的电子商务平台。覆盖欧洲及北美地区,特别适合需要高效处理交易的商家。 --- # Trustly --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/Twint/index.md description: >- Twint是一种瑞士流行的移动支付方式,允许用户通过智能手机应用进行快速安全的转账和支付。适用于线上购物、实体店付款及个人间转账等多种场景。支持实时交易确认,无需携带现金或银行卡,并提供多种语言服务,覆盖全瑞士地区。 --- # Twint --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/UnionBankOnlinePayment/index.md description: >- UnionBank是菲律宾领先的数字化银行之一,提供便捷的在线银行支付服务。用户可通过UnionBank账户进行快速安全的网上支付、转账和账单缴费。该支付方式以其创新的数字银行解决方案、高安全标准和用户友好的界面著称,广泛应用于电子商务和在线交易场景。 --- # UnionBank --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/UnionPaySecurePay/index.md description: >- UnionPaySecurePay是中国银联提供的安全支付解决方案,适用于中国境内线上及移动支付场景。支持多种银行卡类型,通过加密技术保障交易安全,简化支付流程,提高支付成功率。商家可轻松集成此支付方式以覆盖广泛的中国消费者。 --- # UnionPaySecurePay --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/UPI/index.md description: >- UPI是一种即时支付系统,用于印度境内的银行间资金转账。支持通过手机号码或虚拟支付地址进行快速、安全的交易,无需提供敏感银行信息。广泛应用于个人对个人转账、在线购物及账单支付等多种场景。 --- # UPI --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/Venmo/index.md description: >- Venmo是一种便捷的移动支付服务,允许用户通过手机应用向朋友或商家付款。主要在美国使用,支持即时转账、账单拆分及在线购物。其特点是操作简便、社交性强,用户可以轻松添加好友并查看交易记录。 --- # Venmo --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/VirtualAccount/index.md description: >- DOKU VA 是一种虚拟账户支付方式,适用于印度尼西亚市场。支持用户通过银行转账至指定虚拟账户完成支付,提供便捷的在线支付体验。主要特点包括实时交易确认、支持多种本地银行以及易于集成到商户系统中。 --- # DOKU VA Qris(Quick Response Code Indonesian Standard)是印度尼西亚的统一二维码支付标准。 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/virtualAccountKorea/index.md description: >- 虚拟账户支付是韩国常用的一种在线支付方式,允许用户通过银行转账完成付款。主要特点包括即时到账通知、支持多家韩国本地银行、适用于电商平台和各类线上服务场景。此支付方式提供便捷安全的交易体验,特别适合需要频繁小额支付的业务。 --- # Virtual Account Korea --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/VNMQR/index.md description: 'VNM QR是一种基于二维码的支付方式,适用于越南市场。用户通过扫描商家提供的二维码完成支付,支持多种电子钱包和银行应用,为消费者提供便捷安全的支付体验。' --- # VNM QR --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/WechatPay/index.md description: >- WechatPay是微信支付方式,适用于中国地区的PC端和移动端支付。主要特点包括:显示微信支付二维码、支持用户扫码支付、实时更新支付状态。在PC端,用户通过扫描二维码完成支付;在移动端,根据浏览器环境调起微信支付或显示二维码。使用时需确保域名已加入微信H5支付授权,并设置Referer请求头。 --- # WechatPay ## 支付域名授权 根据微信要求,需要将商户的域名加入微信的 H5 支付授权域名中。并且需设置 Referer 请求头。 我们默认将您的申请开户申报的域名加入微信的 H5 支付授权域名中。 如果您需要添加其他域名, 请您将相关申请信息发送到`acquire-risk@pingpongx.com`并抄送`acquire-ts@pingpongx.com`。 **申请材料:** 1. 商户Client ID 2. 商户授权域名 ## 支付场景说明 ### PC端支付 * 显示微信支付二维码 * 用户使用微信扫码完成支付 * 页面实时显示支付状态更新 ### 移动端支付 1. **微信内浏览器**:暂不支持直接调起微信支付,根据微信要求需要JSAPI调用。 2. **微信外浏览器**: * iOS:跳转到微信客户端 * Android:显示二维码或尝试调起微信 * 其他情况:显示二维码供扫码支付 :::danger 提示 * 您的域名必须加入微信 H5 支付授权域名。 * 微信对Referer 的要求严格,请务必设置 Referer 请求头。 * 确保用户通过页面跳转进入支付页面,而非直接访问支付链接 ::: ## 常见问题 ### 错误提示:"商家参数格式有误,请联系商家解决" **问题原因:** * Referer 请求头为空或缺失 * 用户直接访问支付链接,未通过页面跳转 **解决方案:** 1. 确保用户通过页面跳转进入支付页面,而非直接访问支付链接 2. App 内 WebView 需手动设置 Referer 请求头: ```java Map extraHeaders = new HashMap<>(); extraHeaders.put("Referer", "https://你的授权域名"); ``` ### 错误提示:"商家存在未配置的参数,请联系商家解决" **问题原因:** * 当前网页域名与微信后台配置的 H5 支付授权域名不一致 **解决方案:** 1. 联系我们确认授权域名是否正确 2. 修改或添加正确的授权域名 ### 错误提示:"支付请求已失效,请重新发起支付" **问题原因:** * 支付链接超过 5 分钟有效期 **解决方案:** * 重新调用支付接口生成新的支付链接 ### 错误提示:"请在微信外打开订单,进行支付" **问题原因:** * 在微信客户端内使用了 H5 支付方式 **解决方案:** * 微信内环境应使用 JSAPI 支付 * 引导用户在外部浏览器中打开支付页面 ### 错误提示:"签名验证失败"或"系统繁忙" **问题原因:** 1. 多个微信账号访问同一支付链接 2. 回调 URL 编码不正确 **解决方案:** 1. 为每个用户生成独立的支付链接 2. 确保回调 URL 参数正确编码 ### 错误提示:"由于商家传入的H5交易参数有误" **问题原因:** * 客户端 IP 地址错误(如使用 127.0.0.1) **解决方案:** * 使用真实的客户端 IP 地址 ### Referer 相关配置说明 微信 H5 支付对 Referer(HTTP 请求头中的来源域名)有严格要求: **Referer 作用:** 微信服务器通过 Referer 头部判断当前网页的来源域名,是否与微信商户平台中配置的 H5 支付授权域名一致。 **常见 Referer 问题解决方案:** | 问题类型 | 具体表现 | 解决方案 | |----------------|-------------------------------|---------------------------------| | **Referer 为空** | 直接访问支付链接或 WebView 未设置 Referer | 确保通过页面跳转访问;WebView 手动设置 Referer | | **域名不匹配** | 当前域名与授权域名不一致 | 在微信商户平台添加或修改授权域名 | | **WebView 配置** | App 内 H5 无法调起支付 | 手动添加 Referer Header | --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/WechatPay/hosted/index.md description: >- 介绍WeChat Pay跳转收银台集成方法,适用于中国大陆地区。通过API预下单获取支付链接,用户跳转至微信支付页面完成支付。支持48小时内未支付订单重新发起支付。 --- # WeChat Pay 跳转收银台集成 ## WeChat Pay-跳转收银台交互流程 ```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' } }}%% sequenceDiagram participant User as 👤 用户 participant Frontend as 💻 商户前端 participant Merchant as 🏪 商户后端 participant PP as 🔄 PingPong服务端 participant Hosted as 🌐 PingPong收银台 participant WeChat as 💬 WeChat Pay Note over User, WeChat: 🚀 WeChat Pay跳转收银台集成流程 Note over Merchant, Frontend: 📋 准备阶段:• 获取收银台链接 Merchant->>+PP: 1️⃣ 调用收银台预下单接口 Note right of PP: 生成支付链接(paymentUrl) PP-->>-Merchant: 返回paymentUrl Merchant->>Frontend: 2️⃣ 传递paymentUrl到前端 User->>Frontend: 点击支付按钮 Frontend->>+Hosted: 3️⃣ 直接跳转到PingPong收银台 Note right of Frontend: 使用paymentUrl直接跳转 Hosted->>Hosted: 4️⃣ 初始化收银台界面 Note right of Hosted: • 显示可用的支付方式列表 Hosted-->>-Frontend: 收银台加载完成 User->>Hosted: 5️⃣ 选择WeChat Pay支付 alt PC端支付流程 Hosted->>+WeChat: 6️⃣a 生成微信支付二维码 WeChat-->>-Hosted: 返回支付二维码 Hosted-->>User: 展示支付二维码 User->>User: 使用手机扫描二维码 User->>WeChat: 在手机微信中确认支付 else 手机端支付流程 Hosted->>+WeChat: 6️⃣b 请求拉起微信App支付 WeChat-->>-Hosted: 返回拉起参数 Hosted-->>User: 调起微信App User->>WeChat: 在微信App中确认支付 end WeChat->>PP: 支付结果通知 PP->>PP: 7️⃣ 处理支付 alt ✅ 支付成功 PP-->>Hosted: 🎉 支付成功 Hosted->>Hosted: 显示成功页面 Hosted-->>Frontend: 页面回调(payResultUrl) Frontend-->>User: 展示支付成功页面 else ❌ 支付失败 PP-->>Hosted: ❌ 支付失败 Hosted->>Hosted: 显示错误页面 Hosted-->>Frontend: 错误回调 Frontend-->>User: 展示支付失败信息 end PP-->>Merchant: 异步通知支付结果 Note right of Merchant: 接收并处理支付结果通知 Note over User, WeChat: 🎯 WeChat Pay跳转收银台流程完成 ``` ## 集成导航 ### Step1 请求收银台预下单 在API收银台预下单的响应中,您可以获取`paymentUrl`用于跳转收银台 ### Step2 渲染收银台 使用Step1获取的`paymentUrl`跳转收银台,接入文档:跳转收银台 ## 重新支付 收银台若未支付成功,可以手动打开URL再次发起支付,一个收银台URL有效时长为48小时 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/WechatPay/miniProgram/index.md description: >- 微信小程序支付集成通过统一下单API实现,支持在小程序内完成支付。适用于中国大陆地区,主要特点包括无需跳转、基于微信小程序安全机制、标准化API调用流程及流畅快速的支付体验。关键参数包括用户openid、小程序AppID和订单终端标识。 --- # WeChat Pay 微信小程序支付集成 ## 🚀 快速开始 **核心特点**: * ✅ 无需跳转,小程序内完成支付 * 🛡️ 基于微信小程序安全机制 * 🔌 标准化API调用流程 * ⚡ 支付体验流畅快速 ## 微信小程序支付交互流程 ```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' } }}%% sequenceDiagram participant User as 👤 用户 participant MiniApp as 📱 小程序前端 participant Merchant as 🏪 商户后端 participant PP as 🔄 PingPongCheckout服务端 participant WeChat as 💬 微信支付平台 Note over User, WeChat: 🚀 微信小程序支付流程 Note over User, MiniApp: 📋 准备阶段:用户在小程序内发起支付 User->>MiniApp: 1️⃣ 用户点击支付按钮 MiniApp->>MiniApp: 2️⃣ 获取用户openid Note right of MiniApp: 调用wx.getUserProfile()或使用授权登录 MiniApp->>+Merchant: 3️⃣ 发送支付请求 Note right of Merchant: 包含商品信息、金额和用户openid Merchant->>Merchant: 4️⃣ 业务验证 Note right of Merchant: 订单验证、库存检查风控校验等 Merchant->>+PP: 5️⃣ 调用统一下单API Note right of PP: 包含小程序特有参数:wxOpenId、wxAppIddevice.orderTerminal=06 PP->>+WeChat: 6️⃣ 调用微信统一下单 Note right of WeChat: PSP调用微信机构平台API WeChat-->>-PP: 7️⃣ 返回prepay_id等参数 PP-->>-Merchant: 8️⃣ 返回支付参数 Note right of PP: 包含extraParam.wxPrepayId和其他必要参数 Merchant->>Merchant: 9️⃣ 构造小程序支付参数 Note right of Merchant: 生成支付签名准备wx.requestPayment参数 Merchant-->>-MiniApp: 🔟 返回支付参数到小程序 MiniApp->>MiniApp: 1️⃣1️⃣ 调用wx.requestPayment() Note right of MiniApp: 使用返回的参数调起微信支付 MiniApp->>+WeChat: 1️⃣2️⃣ 唤起微信支付界面 User->>WeChat: 1️⃣3️⃣ 用户完成支付认证 WeChat-->>-MiniApp: 1️⃣4️⃣ 支付结果回调 alt ✅ [支付成功] WeChat->>+PP: 1️⃣5️⃣ 异步支付结果通知 PP->>PP: 处理支付结果 PP->>+Merchant: 1️⃣6️⃣ 异步通知商户 Merchant-->>-PP: 确认接收通知 PP-->>-WeChat: 确认处理完成 MiniApp->>+Merchant: 1️⃣7️⃣ 查询支付结果 Merchant-->>-MiniApp: 返回支付成功状态 MiniApp-->>User: 1️⃣8️⃣ 显示支付成功页面 else ❌ [支付失败/取消] MiniApp-->>User: 显示支付失败信息 Note right of MiniApp: 用户可重试支付 end Note over User, PP: 🎯 微信小程序支付流程完成 ``` ## 集成导航 ::: note 提示 1. 微信小程序支付仅在微信小程序环境内可用,需要获取用户openid。 2. 您需要提前完成微信小程序的基础配置和支付权限申请。 3. 建议在沙箱环境充分测试后再上线生产环境。 ::: ### 前置条件 #### 🔧 微信小程序配置 **必要条件**: * ✅ 已开通微信小程序并通过认证 * ✅ 已获得微信支付商户号 * ✅ 已在微信支付商户平台开通JSAPI支付权限 * ✅ 已配置支付授权目录 ### 请求下单并支付 使用下单并支付接口创建微信小程序支付订单。 在API下单并支付的响应中: * status 为 `SUCCESS` 时,订单已支付成功 * status 为 `PROCESSING` 时,订单已创建,返回`extraParam.wxPrepayId`供小程序调用 * status 为 `FAILED` 时,订单创建失败 **关键参数:** | 参数 | 类型 | 必传 | 说明 | |--------------------------|--------|-----|-----------------------------| | `paymentMethod.wxOpenId` | String | 是 | 用户在小程序内的唯一标识,通过wx.login()获取 | | `paymentMethod.wxAppId` | String | 是 | 微信小程序的AppID,在小程序后台获取 | | `device.orderTerminal` | String | 是 | 固定传 `06`(微信小程序标识) | | `paymentMethod.type` | String | 是 | 固定传 `WeChat Pay` | **参数示例:** ### 小程序前端调用微信支付 获取API返回的`extraParam.wxPrepayId`后,在小程序中调用[`wx.requestPayment()`](https://developers.weixin.qq.com/miniprogram/dev/api/payment/wx.requestPayment.html)完成支付。 ::: steps 1. **获取用户openid** 使用[`wx.login()`](https://developers.weixin.qq.com/miniprogram/dev/api/open-api/login/wx.login.html)获取code,后端换取openid ```javascript wx.login({ success: (res) => { // 发送code到后端换取openid this.getOpenIdFromBackend(res.code); } }); ``` 2. **发起支付请求** 将openid等参数传给商户服务端,商户服务端调用统一下单API ```javascript wx.request({ url: 'https://yourapi.com/payment/create', method: 'POST', data: { openid: this.data.openid, amount: this.data.amount, // 其他订单信息 } }); ``` 3. **调起微信支付** 使用返回的prepayId调用[`wx.requestPayment()`](https://developers.weixin.qq.com/miniprogram/dev/api/payment/wx.requestPayment.html) ```javascript wx.requestPayment({ timeStamp: paymentData.timeStamp, nonceStr: paymentData.nonceStr, package: `prepay_id=${prepayId}`, signType: 'RSA', paySign: paymentData.paySign, success: (res) => { // 支付成功,查询支付状态 this.queryPaymentResult(); }, fail: (err) => { // 支付失败处理 console.log('支付失败', err); } }); ``` 4. **处理支付结果** 监听支付回调,查询支付状态 ```javascript onPaymentSuccess() { // 向后端查询最终支付结果 wx.request({ url: 'https://yourapi.com/payment/query', success: (res) => { if (res.data.status === 'SUCCESS') { wx.redirectTo({ url: '/pages/success/success' }); } } }); } ``` ::: ## 完整代码示例 ### 📱 小程序前端实现 ```javascript // pages/payment/payment.js Page({ data: { orderInfo: {}, loading: false }, onLoad(options) { this.setData({ orderInfo: { amount: options.amount || '100', productName: options.productName || '测试商品' } }); }, // 获取用户openid async getOpenId() { return new Promise((resolve, reject) => { wx.login({ success: (res) => { wx.request({ url: 'https://yourapi.com/wechat/auth', method: 'POST', data: { code: res.code }, success: (result) => resolve(result.data.openid), fail: reject }); } }); }); }, // 发起支付 async requestPayment() { try { this.setData({ loading: true }); wx.showLoading({ title: '支付中...' }); const openid = await this.getOpenId(); const paymentRes = await this.createPaymentOrder(openid); if (paymentRes.code === '000000') { const paymentData = JSON.parse(paymentRes.bizContent); const prepayId = paymentData.extraParam.wxPrepayId; // 获取支付签名并调起支付 const signData = await this.getPaymentSign(prepayId); this.callWechatPay(signData, prepayId); } } catch (error) { console.error('支付请求异常', error); wx.showToast({ title: '支付请求失败', icon: 'error' }); } finally { this.setData({ loading: false }); wx.hideLoading(); } }, // 调起微信支付 callWechatPay(signData, prepayId) { wx.requestPayment({ timeStamp: signData.timeStamp, nonceStr: signData.nonceStr, package: `prepay_id=${prepayId}`, signType: 'RSA', paySign: signData.paySign, success: () => this.onPaymentSuccess(), fail: (err) => this.onPaymentFail(err) }); }, // 支付成功处理 onPaymentSuccess() { wx.showToast({ title: '支付成功', icon: 'success' }); setTimeout(() => { wx.navigateBack(); }, 1500); }, // 支付失败处理 onPaymentFail(error) { if (error.errMsg.includes('cancel')) { wx.showToast({ title: '支付已取消', icon: 'none' }); } else { wx.showToast({ title: '支付失败', icon: 'error' }); } } }); ``` ## 常见问题与解决方案 ### ⚠️ openid获取失败 **常见原因**: * 🔥 小程序登录流程不正确 * ⏰ code超过\*\*有效期(5分钟)\*\*使用 * 🔑 小程序AppID和AppSecret配置错误 **解决方案**: ```javascript // ✅ 正确的openid获取流程 wx.login({ success: (res) => { if (res.code) { // 🔥 立即发送到后端,不要延迟 this.getOpenIdFromServer(res.code); } else { console.log('登录失败!' + res.errMsg); } } }); ``` ::: tip 重要提醒 **code的有效期只有5分钟**,获取后应立即使用,避免缓存或延迟处理。 ::: ### ⏱️ prepayId无效或过期 **原因分析**: * 🔗 API调用未成功返回 * ⏰ prepayId**有效期为2小时**,已过期 * 🌐 网络延迟影响使用时效 ::: tip 最佳实践 获取prepayId后应**立即调起支付**,避免因延迟导致过期。建议在前端设置合理的超时提醒。 ::: ### 🔐 支付权限问题 **小程序支付权限未开通**: * ✅ 确认已开通**JSAPI支付权限** * 🔗 检查小程序与商户号的绑定关系 **支付目录配置错误**: * ⚙️ 在微信支付商户平台配置支付授权目录 * 🌐 确保支付页面的域名在授权目录范围内 ## 技术支持 ### 📚 参考文档 * **微信官方文档**: [小程序支付接入指南](https://pay.weixin.qq.com/doc/v3/merchant/4012791911) * **微信小程序API**: [wx.login() 登录接口](https://developers.weixin.qq.com/miniprogram/dev/api/open-api/login/wx.login.html) * **微信支付API**: [wx.requestPayment() 支付接口](https://developers.weixin.qq.com/miniprogram/dev/api/payment/wx.requestPayment.html) ### 🛠️ 推荐工具 * **微信开发者工具**: 小程序开发和调试的官方工具 *** ::: important 上线前检查清单 在生产环境上线前,请确保完成以下检查: * 验证所有错误场景的处理逻辑 * 确认异步通知处理的正确性和==幂等性== * 检查支付金额、订单信息的准确性 * 配置生产环境的==HTTPS证书==和域名 * 设置合适的日志记录和==监控告警== ::: --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/WechatPay/s2s/index.md description: >- WeChat Pay Server To Server集成文档介绍了如何通过S2S方式实现微信支付。适用于PC、移动端浏览器及Webview内支付场景,覆盖中国大陆地区。关键参数包括`device.orderTerminal`和`shopperIP`。支持直接拉起微信支付或通过中间页处理支付流程,确 --- # WeChat Pay Server To Server 集成 ## WeChat Pay-Server To Server交互流程 ```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' } }}%% sequenceDiagram participant User as 👤 用户 participant Frontend as 💻 商户前端 participant Merchant as 🏪 商户后端 participant PP as 🔄 PingPong服务端 participant WeChat as 💬 WeChat Pay Note over User, WeChat: 🚀 WeChat Pay Server To Server集成流程 Note over User, Frontend: 📋 准备阶段:• 用户选择支付• 商户自建收银台 User->>Frontend: 1️⃣ 用户进入商户收银台页面 User->>Frontend: 2️⃣ 选择WeChat Pay支付方式 Frontend->>+Merchant: 3️⃣ 提交订单信息 Note right of Merchant: 订单验证金额计算 Merchant->>+PP: 4️⃣ 调用下单并支付API Note right of PP: 创建支付订单获取微信支付参数 PP-->>-Merchant: 返回支付参数(二维码/调起参数) Merchant->>-Frontend: 5️⃣ 返回支付参数到前端 Note over Frontend, WeChat: 💳 微信支付交互 alt 🖥️ [PC端支付] Frontend->>Frontend: 6a️⃣ 显示微信支付二维码 User->>WeChat: 7a️⃣ 用户扫码支付 WeChat->>WeChat: 用户完成支付授权 else 📱 [移动端支付] Frontend->>+WeChat: 6b️⃣ 调起微信客户端 Note right of WeChat: H5跳转微信支付或微信内直接支付 User->>WeChat: 7b️⃣ 用户完成支付授权 WeChat-->>-Frontend: 支付结果页面跳转 end WeChat->>+PP: 8️⃣ 微信支付结果通知 PP->>PP: 9️⃣ 处理支付结果 Note right of PP: • 验证支付结果• 更新订单状态• 风控检查 PP->>+Merchant: 🔟 异步通知支付结果 Note right of Merchant: 订单状态更新业务逻辑处理 Merchant-->>-PP: 确认通知接收 alt ✅ [支付成功] PP-->>WeChat: 支付处理完成 Note over Frontend, Merchant: 🔄 状态轮询(可选) Frontend->>+Merchant: 1️⃣1️⃣ 轮询支付状态 Merchant-->>-Frontend: 返回最新状态 Frontend->>Frontend: 1️⃣2️⃣ 显示支付成功页面 Note over Frontend: 商户自定义逻辑支付完成处理 else ❌ [支付失败] PP-->>WeChat: 支付失败处理 Frontend->>Frontend: 显示支付失败页面 Note right of Frontend: 错误处理用户提示 end Note over User, PP: 🎯 WeChat Pay Server To Server流程完成 ``` ## 集成导航 ### Step1 调用下单并支付 使用下单并支付接口直接发起微信支付 ### Step2 处理支付响应 根据不同支付场景处理返回的支付参数: **关键参数说明:** 1. `device.orderTerminal` * 02-PC端浏览器(pc) * 04-SDK(ios) * 05-SDK(Android) 2. `shopperIP` * 用户的公网IP地址,微信支付要求必须传递,否则会报错 * 请获取真实的消费者IP地址,不能使用localhost、127.0.0.1等回环地址 ## PC端支付 `device.orderTerminal` = `02` 下单并支付接口返回参数: * `qrCode` : 微信的`qrCode`,需要商户自行处理二维码展示 * `paymentRedirectUrl` : PingPongCheckout包装的二维码页面,只需要重定向到该页面 ## 移动端浏览器支付 `device.orderTerminal` = `04` 或 `05` 下单并支付接口返回参数: * `paymentRedirectUrl` : 对应微信的`mwebUrl`参数 ## Webview内支付 `device.orderTerminal` = `04` 或 `05` 下单并支付接口返回参数: * `paymentRedirectUrl` : 对应微信的`mwebUrl`参数 ### 方案1:Webview直接拉起微信支付 ::: steps 1. **请求下单并支付接口,获取`paymentRedirectUrl`。** 2. **设置 Referer** **Android:在 loadUrl 时添加 Referer** ```kotlin val headers = mutableMapOf() headers["Referer"] = "https://your-domain.com" // 必须与授权域名一致 webView.loadUrl(mwebUrl, headers) ``` **iOS:在 request 头中设置 Referer(WKWebView)** ```swift guard let url = URL(string: mwebUrl) else { return } var request = URLRequest(url: url) request.setValue("https://your-domain.com", forHTTPHeaderField: "Referer") webView.load(request) ``` 3. 拉起微信并支付 ::: ### 方案2:通过中间页拉起为微信支付 ::: steps 1. **请求下单并支付接口,获取`paymentRedirectUrl`。** 2. **创建 pay-proxy 中间页** ```html ``` 3. **创建 back 回调页** ```html ``` 4. **App WebView 加载中间页** ```kotlin webView.loadUrl("https://中间页域名/pay-proxy?orderId=123") ``` 5. **拦截并拉起微信** ```kotlin override fun shouldOverrideUrlLoading(view: WebView?, request: WebResourceRequest?): Boolean { val url = request?.url?.toString() ?: return false if (url.startsWith("weixin://")) { startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(url))) return true } if (url.startsWith("yourapp://")) { handlePayResult(url) return true } return false } ``` 6. **接收回跳并刷新订单**\ 在 `handlePayResult(url)` 中解析参数,关闭 WebView,查询后端订单状态。 ::: --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/paymentMethods/WechatPay/sdk/index.md description: >- 介绍WeChat Pay内嵌收银台集成流程,适用于希望在应用内部直接完成支付的中国地区商户。主要步骤包括请求预下单获取accessToken及集成SDK组件以实现无缝支付体验。 --- # WeChat Pay 内嵌收银台集成 ## WeChat Pay-内嵌收银台交互流程 ```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' } }}%% sequenceDiagram participant User as 👤 用户 participant Frontend as 💻 商户前端 participant Merchant as 🏪 商户后端 participant PP as 🔄 PingPong服务端 participant SDK as 🛠️ PingPong SDK participant WeChat as 💬 WeChat Pay Note over User, WeChat: 🚀 WeChat Pay内嵌收银台集成流程 Note over Merchant, Frontend: 📋 准备阶段:• 获取访问令牌• 初始化SDK Merchant->>+PP: 1️⃣ 获取accessToken Note right of PP: 调用收银台预下单接口生成访问令牌 PP-->>-Merchant: 返回accessToken Merchant->>Frontend: 2️⃣ 传递accessToken到前端 Frontend->>Frontend: 3️⃣ 加载PingPong JavaScript SDK Note right of Frontend: 引入CDN资源初始化SDK环境 Frontend->>+SDK: 4️⃣ 初始化收银台组件 Note right of SDK: 使用accessToken渲染内嵌收银台UI SDK->>+PP: 5️⃣ 验证accessToken并获取配置 PP-->>-SDK: 返回收银台配置信息 SDK-->>-Frontend: 收银台组件加载完成 User->>Frontend: 6️⃣ 用户选择WeChat Pay支付 Frontend->>+SDK: 7️⃣ 触发支付事件 alt PC端支付流程 SDK->>+WeChat: 8️⃣a 请求生成支付二维码 WeChat-->>-SDK: 返回支付二维码 SDK-->>Frontend: 展示支付二维码 Frontend-->>User: 向用户展示二维码 User->>User: 使用手机扫描二维码 User->>WeChat: 在手机微信中确认支付 else 手机端支付流程 SDK->>+WeChat: 8️⃣b 请求拉起微信App支付 WeChat-->>-SDK: 返回拉起参数 SDK-->>Frontend: 传递拉起参数 Frontend-->>User: 调起微信App User->>WeChat: 在微信App中确认支付 end WeChat->>PP: 支付结果通知 PP->>PP: 9️⃣ 处理支付 Note right of PP: • 验证支付信息• 风控检查• 支付路由处理 alt ✅ 支付成功 PP-->>SDK: 🎉 支付成功 SDK->>SDK: 显示成功状态 SDK-->>Frontend: 支付成功回调 Frontend-->>User: 展示支付成功信息 Note over Frontend: 商户自定义逻辑支付完成处理 PP->>Merchant: 🔟 异步通知支付结果 Note right of Merchant: 订单状态更新业务逻辑处理 else ❌ 支付失败 PP-->>SDK: ❌ 支付失败 SDK->>SDK: 显示错误状态 SDK-->>Frontend: 支付失败回调 Frontend-->>User: 展示支付失败信息 Note right of Frontend: 错误处理用户提示 end Note over User, WeChat: 🎯 WeChat Pay内嵌收银台流程完成 ``` ## 集成导航 ### Step1 请求收银台预下单 在API收银台预下单的响应中,您可以获取`accessToken` ### Step2 集成SDK组件 接入文档:内嵌SDK(预下单) --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/reconciliation/settlementCycle/index.md description: >- 结算周期和对账单定义了PingPongCheckout的结算规则及对账方式。支持T+(N)、指定日期和周结三种结算模式,具体周期依合同而定。对账单按结算周期分为每日、每周或每月生成,数据区间对应不同结算类型,确保准确反映交易状态。 --- # 结算周期 ## 结算周期规则 目前有如下的两种可配置的结算周期规则: 1. T+(N) 【自交易发生日后+N日结算】 2. 指定日期 【如每月的26日】 3. 周结 【如每周五】 ::: note 提示 具体结算周期以合同为准 ::: ## 对账单 | 结算周期 | 对账单类型 | 建议取数据时间 | 数据区间 | 说明 | |---------|-----------|--------------|---------|------| | CYCLE (D+N) | 依赖对账单 | 每日 | \[T, T+1) | T日的交易在T+N日结算,需等待对账 | | WEEKLY | 依赖对账单 | 每周指定日+1 | \[T-7, T) | 本周指定日结算前7天的订单,T为当前日期 | | MONTHLY | 依赖对账单 | 每月指定日+1 | \[上月指定日, 本月指定日) | 本月指定日结算前一个月的订单 | ::: note 提示 上述表格中的时间UTC+0时间,如果在当前数据区间没有已结算的交易,账单文件不会生成 ::: --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/reconciliation/settlementFilePath/index.md description: >- 对账文件在SFTP的路径规则用于指导商户在SFTP服务器上查找账单文件。每个商户的账单文件存放在以`clientId\登录名`命名的目录下,每天、每周、每月分别以`YYYYMMDD`、`YYYYMMDD-YYYYMMDD`、`YYYYMM`格式生成新的子目录存放相应周期的账单压缩文件。 --- # 对账文件在SFTP的路径规则 SFTP服务器存在多个账单文件,您需要根据下列的规则找到您的账单文件。 ## SFTP地址 ::: code-tabs @tab 测试环境 ```http test-ppsftp.pingpongx.com:22222 ``` @tab 生产环境 ```http ppsftp.pingpongx.com:22222 ``` ::: ## 文件路径约定 每个商户的账单文件都将归集到以约定的规则命名文件夹下,定时每天以 `YYYYMMDD` 命名新增文件夹。文件夹内的zip文件为商户的账单文件。 ### 特定商户目录 ::: warning 提示 使用给定的用户名登录后会自动进入 约定的clientId\登录名目录中clientId这一层 ::: 在找到您的账单压缩文件前,您首先需要找到自己的目录所在 在SFTP上使用特定的文件路径标识指定商户存放账单的文件夹,规则为`clientId\登录名`。这部分 `path` 是固定的 ::: theorem 示例: `clientId`=`2023052907161543393`,`登录名`=`worldready`的商户存放的文件目录如下: `2023052907161543393/worldready` ::: ### 日账单目录 `2023-10-25`这一天的账单 `path`: ::: tip 示例 1. 商户的目录 2023052907161543393/worldready 2. 根据 YYYYMMDD目录命名规则,`20231025`是这一天账单目录 ::: ### 周账单目录 `20231016-20231022` 这一周的账单 `path`: ::: tip 示例 1. 商户的目录 2023052907161543393/worldready 2. 根据 YYYYMMDD-YYYYMMDD目录命名规则,`20231016-20231022`是这一周账单目录 ::: ### 月账单目录 `202309` 这一月的账单 `path`: ::: tip 示例 1. 商户的目录 2023052907161543393/worldready 2. 根据 YYYYMM目录命名规则,`202309`是这一月账单目录 ::: --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/reconciliation/settlementFileSheet/index.md description: >- 对账单sheet说明文档介绍了PingPongCheckout的账单模板及各sheet用途,包括结算报告、交易流水、退款、拒付费用等关键数据,帮助商户进行财务核对与管理。 --- # 对账单sheet说明 ## 账单模板 获取 PingPongCheckout 账单模板 ## 对账单sheet | sheet | 说明 | |:------------------|:-----------------| | Settlement Report | 结算报告,总览当前账期数据 | | Purchase | 已交易结算流水数据和交易费用数据 | | Refund | 退款和退款费用流水数据 | | Chargeback | 拒付费用数据 | | Reserve | 循环保证金 | | Deposit | 固定保证金 | | Withdrawal | 提现明细 | | Other Fee | 其他费用 | | Adjustment | 调账明细 | ## 对账单字段明细 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/reconciliation/transactionStatementDownload/index.md description: >- SFTP对账服务用于下载交易报表,所有报告将上传至SFTP服务器并以zip格式提供。申请前需提交商户服务器IP、RSA公钥及ClientId至指定邮箱。PingPongCheckout会将IP加入白名单,公钥配置于SFTP服务中,并用ClientId生成对账单。 --- # SFTP服务申请 PingPongCheckout 提供SFTP对账服务,所有报告将会上传到 SFTP务器中,您可以通过访问SFTP 服务器中的特定目录下载对账报告。通过 SFTP 服务器所下载对账报告为zip 压缩文件。 在使用对账服务前,您需要提交以下申请材料,申请SFTP访问权限。 ## SFTP服务申请 请将`申请材料` 通过邮件发送到 `acq-tech-mc@pingpongx.com`并抄送 `acq-ts@pingpongx.com`。 ### 申请材料 1. 商户服务器IP; * PingPongCheckout 将会把商户服务器 `IP` 加入 `IP 白名单`,未加入白名单的 `IP` 不可访问 PingPongCheckout SFTP 服务 2. 商户RSA公钥; * PingPongCheckout 将会把商户 RSA 公钥加入 SFTP 服务,之后商户可以凭此公钥对应的私钥访问 `SFTP` 服务。 3. 商户ClientId; * PingPongCheckout 将会把商户 ClientId 加入 SFTP对账单生成服务,以便于生成数据。 ## 商户RSA公钥获取 ### 从服务器上导出RSA公钥 如果您知道服务器公钥文件所在,可以尝试导出公钥,使用`cat /path/to/public_key.pub`命令可以查看公钥内容,例如: ```bash cat .ssh/id_rsa.pub ``` ### 生成秘钥 如果您不清楚公钥文件所在路径,可以生成一对RSA秘钥。 ```bash ssh-keygen -t rsa ``` :::danger 注意 1. 请确保密钥对的私钥(private\_key.pem 或 id\_rsa)存储在安全的位置,并且不能被他人访问。如果您担心私钥的安全性,可以设置一个密码来加密私钥文件。 2. 对账周期:按照合同约定。 ::: --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/recurring/recurring/index.md description: >- 订阅支付API支持定期自动扣款功能,适用于需要长期向用户收取费用的场景。提供两种接入模式:Hosted和Non-hosted。关键步骤包括持卡人授权及计划扣款,通过设置`bizType`为`Recurring`标记交易类型,并在计划扣款时使用首次交易的`primaryMerchantTransact --- # 订阅支付 ## 接入前提 需要接入下列其中一种模式,以便于完成支付和授权流程 Hosted Non-hosted ## 交互过程 ### 持卡人授权事件交互流程 ### 计划扣款事件交互流程 ## API清单 ## 服务端接入 ### 持卡人授权 | 字段名称 | 类型 | 必填 | 描述 | |:-----------------------------|:-----------|:----|:------------------------------------| | bizType | String(64) | M | Recurring交易标识,固定值`Recurring` | 在请求下单并支付 时候新增参数`bizType`=`Recurring`,标记当前交易为recurring交易 ### 计划扣款 | 字段名称 | 类型 | 必填 | 描述 | |:-----------------------------|:-----------|:----|:------------------------------------| | primaryMerchantTransactionId | String(64) | M | 首次成功下单时候异步通知中的merchantTransactionId | | bizType | String(64) | M | Recurring交易标识,固定值`Recurring` | 商户服务端请求下单并支付,发起计划扣款 * 新增参数`bizType`=`Recurring`,标记当前交易为recurring交易 * 新增参数`primaryMerchantTransactionId`,值为首次扣款时候的`merchantTransactionId` * 参数`cardInfo`由`primaryMerchantTransactionId`代替,不用传送 --- --- url: 'https://acquirer-api-docs-v4.pingpongx.com/notes/zh/risk/3ds/index.md' description: >- Dynamic 3D Secure是一种安全协议,用于在线交易验证及防欺诈。适用于支持PingPongCheckout的网站或移动应用,在支付过程中增加额外的安全层。根据风险评估,系统自动决定是否启用3D认证。认证流程包括无需用户交互的Frictionless和需额外验证的Challenge两种方式 --- # Dynamic 3D Secure 3D Secure是一种安全协议,用于验证在线交易并防止电子商务中的欺诈活动。它要求持卡人在完成交易前输入密码或一次性代码,从而为支付过程增加了额外的安全层。 当您的网站或移动应用程序支持3D Secure时,发送支付的请求PingPongCheckout将确定是否通过3D 安全认证支付。 ## 3D Secure 认证流程 ### Frictionless 在Frictionless 流程中,购买者、发行者和卡方案通过使用购物者的设备指纹的被动认证在后台交换所有必要的信息。事务在没有进一步的购物者交互的情况下完成。 ### Challenge 在Challenge 流程中,银行或支付处理机构会自动为持卡人创建一个3D挑战页,购物者需要进行额外的交互。发卡行通过生物特征识别、双因素身份验证,或者基于 SCA 身份验证因素等类似方法确保交易的安全性。 一旦卡片持有人完成了3D挑战页上的身份验证步骤,他们的身份将被验证,并且银行或支付处理机构可以决定是否批准该交易。 ## 默认的3D 安全规则 一般的,PingPongCheckout提供默认的3D 安全规则,PingPongCheckout风控引擎将决定当前交易是否需要启用3DS认证。 | 策略 | 描述 | 3DS 组件集成 | 额外要求 | |:----:|:--------------:|:------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:|:--------------:| | 笔笔3D | 3D Secure 始终启用 | | | | 智能决策 | 根据持卡人行为特征智能决策 | Hosted: Non-Hosted: | customer.email | ## 商户自主决策 如果PingPong提供的默认规则不能满足您自定义需求,PingPongCheckout提供了商户自主决策的能力。 您可以根据自己的业务场景,在API中通过`executeThreeD`参数决定是否启用3DS认证。 ::: danger 注意 是否能开通需根据商户风险情况和拒付表现进行评估,需要的话可以联系技术支持开通配置。 ::: | executeThreeD | 收银台支持 | 端到端模式支持 | 描述 | |:--------------|:--------------------------------------------------------------------------------:|:-----------------------------------------------------------------------------|:------------------------------------------------| | Y | | | 强制进行3ds验证,并且使用PingPongCheckout的3ds。 | | depends | | | 是否进行3ds验证交由PingPongCheckout的风控决策决定 | | external | | | 需要进行3ds验证,在商户执行3ds,并把3ds结果交由PingPongCheckout执行。 | ## 3DS集成方案 ### 3DS服务集成 如果您尚未接入3DS服务,可以使用PingPongCheckout提供的3DS服务。PingPongCheckout提供了以下集成方案: | 集成方案 | Hosted是否需要集成 | Non-Hosted是否需要集成 | 风控 | 3DS | 备注 | |:-----------------|:--------------------------------------------------------------------------------:|:-----------------------------------------------------------------------------|:---------------------------------------------------------------------------------|:-----------------------------------------------------------------------------|-----------| | SafePayGuardJs组件 | | | | | 可集成 | | RiskDefense组件 | | | | | 不推荐,方案已移除 | | SecureShieldJs组件 | | | | | 可集成 | | Server To Server | | | | | 可集成 | ### 商户自行上送 3DS 结果 如果您已经接入3DS服务,并且能够自主产生3DS结果,您可以选择商户自行上送3DS结果。 详见 3DS external --- --- url: 'https://acquirer-api-docs-v4.pingpongx.com/notes/zh/risk/dispute/index.md' description: >- 争议处理功能在持卡人对付款提出异议并发起拒付时启用。通过Disputes API,可以自动化管理争议流程,包括调单、拒付通知处理及抗辩材料提交等步骤。使用eventCode判断拒付阶段,并根据需要上传或删除相关辩护材料以进行有效抗辩。 --- # dispute 当持卡人对付款提出异议并联系其发卡行发起拒付时,就会发生争议。我们的dispute api可让您自动执行争议处理流程,以便您可以在争议发起后立即做出回应。 ## dispute API 处理流程 ### 调单 调单发生时候,发卡行要求提供有关交易的更多信息。在这个阶段,您的账户中不会提取款项,建议您积极处理。 ### 拒付 使用 Disputes API 时,您需要执行以下操作: * 处理拒付通知。使用eventCode来确定拒付处于哪个阶段。 * 检索拒付信息以了解如何为争议辩护,比如调用查询拒付抗辩材料。 * 如果您想为争议辩护,请继续执行第 3 步。 - 提交材料并进行抗辩 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/risk/disputeNotify/index.md description: >- 拒付通知接入说明提供了商户如何接收并处理拒付相关事件的指南。适用于需要实时了解和响应拒付情况的商户,通过配置技术支持提供的回调地址,接收PingPongCheckOut以HTTP POST方式发送的JSON格式异步通知。关键特性包括支持特定eventCode识别拒付阶段,以及通过返回200 Http --- # 拒付通知接入说明 ## 异步通知概述 * 如需开通拒付通知,可以联系技术支持同学进行配置。 * 每当,拒付相关事件发生时(如调单发生时),PingPongCheckOut 通知服务将会创建一个JSON对象,其中包含事件相关的数据等信息。 * 然后,PingPongCheckOut 通知服务通过 HTTP POST 请求将JSON对象发送到已配置的通知地址中。 商户侧在收到回调通知后,可根据异步通知报文做下一步的业务处理。 ## 接收异步通知 ### 准备一个支持 HTTP POST 的web服务 PingPongCheckOut 通知服务将以 HTTP POST 方式推送 JSON 格式的数据,因此开发者所提供的 Web 服务需要能够接收并解析来自HTTP POST 请求的 JSON 数据并能够返回相应 HTTP 状态码。 ### 技术支持配置回调通知地址 * 通知地址需要提供商户自己系统的真实地址,不能填写接口文档或demo上的示例地址。 * 必须是以https://或http://开头的完整全路径地址,并且确保URL中的域名和IP是外网可以访问的,不能填写localhost、127.0.0.1、192.168.x.x等本地或内网IP。 * 地址不能携带参数。 ### 处理拒付通知 使用eventCode来确定拒付处于哪个阶段。商户在成功收到异步处理结果后,响应 HttpCode 为 200,表示商户已经成功收到异步结果通知,否则,会当作通知失败处理,触发重试机制 重试 3 次,3 次后还是失败则不再继续通知,商户可通过查询接口查询拒付状态。 | eventCode | 描述 | |-----------------------------------------------------------|-------------| | NOTIFICATION\_OF\_PREDISPUTE | 未升级争议 | | REQUEST\_FOR\_INFORMATION | 调单通知 | | NOTIFICATION\_OF\_FRAUD | 欺诈提醒通知 | | NOTIFICATION\_OF\_CHARGEBACK | 拒付通知 | | CHARGEBACK\_RETURN | 拒付驳回通知 | | PREARBITRATION | 预仲裁通知 | | CHARGEBACK\_REVERSED | 拒付撤销通知 | | PREARBITRATION\_WON | 仲裁成功的结果通知 | | PREARBITRATION\_LOST | 仲裁失败的结果通知 | | DISPUTE\_DEFENSE\_PERIOD\_ENDED | 拒付抗辩时间已截止通知 | | ARBITRATION | 进入仲裁阶段通知 | --- --- url: 'https://acquirer-api-docs-v4.pingpongx.com/notes/zh/risk/disputesAPI/index.md' description: >- dispute API 用于自动化处理支付争议,支持主动获取调单和拒付明细、查询与上传抗辩材料等功能。适用于在争议发起后迅速响应并管理整个流程,包括提交或放弃申诉。通过该API,商家能够更高效地应对发卡行的调单要求及拒付情况。 --- # 概览 ## dispute API 为了让您快速管理发生的争议,我们提供了dispute api。我们的dispute api可让您自动执行争议处理流程,以便您可以在争议发起后立即做出回应。 * 主动获取调单明细 * 主动获取拒付明细 * 查询拒付抗辩材料 * 上传文件 * 上传拒付材料 * 删除拒付材料 * 提交材料并进行抗辩 * 放弃申诉 ## dispute API 处理流程 ### 拒付流程 调单发生时候,发卡行要求提供有关交易的更多信息。在这个阶段,您的账户中不会提取款项,建议您积极处理。 使用 Disputes API 时,您需要执行以下操作: * 处理拒付通知。使用eventCode来确定拒付处于哪个阶段。 * 检索拒付信息以了解如何为争议辩护,比如调用查询拒付抗辩材料。 * 如果您想为争议辩护,请继续执行第 3 步。 - 提交材料并进行抗辩 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/risk/listManagement/index.md description: >- 名单管理功能支持通过API维护黑名单与白名单,依据邮箱、邮箱域名、卡号、手机号及收货地址等信息维度对用户进行分类。加入黑名单将阻止相关用户的付款请求;而白名单中的用户则可绕过常规风控检查。此外,还提供新增、查询以及批量删除名单条目的接口服务。 --- # 名单管理 PingPongCheckout提供名单库管理API,按照信息维度维护名单库。 * 加入黑名单后,匹配到用户的付款将会被阻断。 * 加入白名单后,匹配到用户的付款将会被跳过风控引擎的规则扫描。 ## 自定义名单的信息维度 * Email-邮箱 * Email\_Domain-邮箱域名 * Card\_No-卡号 * Phone-手机号 * Shipping\_Address-收货地址街道 ## API列表 * 新增黑/白名单 * 分页查询黑/白名单 * 批量删除黑/白名单 --- --- url: 'https://acquirer-api-docs-v4.pingpongx.com/notes/zh/risk/overview/index.md' description: >- 概述支付和银行业中的'争议'与'拒付'概念及处理流程。适用于商户理解如何应对客户发起的交易质疑,包括调单、拒付通知、预仲裁及正式仲裁等步骤。快速争议解决(RDR)机制亦被介绍,旨在通过自动化手段简化争议解决过程。 --- # 概览 在支付和银行业中,"Disputes"(争议)和"Chargebacks"(拒付)是两个常见的术语,它们虽然有联系,但具体含义和处理流程有所不同。 详见: * Disputes-争议 * Chargebacks-拒付 disputes(争议)一般通过一个默认的工作流解决,还有另一个过程称为快速纠纷解决(Rapid Dispute Resolution)工作流程。这个过程是独立的,不能与默认的收费工作流组合在一起。 ## 默认的工作流 ### 调单 调单(Request For Information RFI)是在持卡人不认可某笔交易时,由持卡人向银行请求更多信息的一种流程。 对于RFI,您应上传能够帮助持卡人识别该笔交易的信息,或支持您立场的证据,证明该笔交易是有效的。 ### 拒付通知 当Disputes(争议)升级到Chargebacks(拒付)时,您将会收到拒付通知,您可以在商户后台收到相关的拒付信息,如果您开通了API,您的服务端将会收到一个拒付异步通知。 与此同时,将会扣除您该笔交易的等额本金。 在您了解了所有信息后,您可以选择: * 放弃申诉 交易金额会强制退回到持卡人账户中 * 进行申诉 为此您需要在规定时间内提供相关证明材料为此次拒付进行辩护,您可以在商户后台提交申诉,或者通过API进行申诉。进入预仲裁程序。 ### 预仲裁 如果您对预仲裁结果不满意,您可以支付仲裁费用(500USD左右,该费用是在拒付金额之上收取的),再次发起申诉,争议将进入正式仲裁阶段。 ### 仲裁 正式仲裁由信用卡组织(如Visa或Mastercard)进行裁决,裁决结果具有最终约束力。 ## RDR 快速争议解决流程(Rapid Dispute Resolution,简称 RDR)是信用卡机构推出的一种简化和加速处理交易争议的机制。RDR的目的是在争议发生初期,通过自动化和预设规则快速解决争议,从而减少商户和持卡人的负担。 如果争议符合RDR的处理标准,系统会根据预设规则自动退款。 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/riskManger/overview/index.md description: >- PingPongCheckout的风险管理模块提供全面的解决方案,旨在帮助商家有效识别与控制交易风险。此模块涵盖了从实时监控到智能预警等一系列服务,适用于需要加强在线支付安全性的各类电子商务平台。通过集成先进的风控技术,支持自定义规则设置,确保业务健康稳定发展。 --- # 概览 ## 风险管理 PingPongCheckout提供了一套完整的风险管理解决方案,包含多种服务,帮助您在您的业务中进行风险的管理。 --- --- url: 'https://acquirer-api-docs-v4.pingpongx.com/notes/zh/riskManger/risk/index.md' description: >- 风控决策模块提供实时欺诈保护,无需额外部署。基于自适应机器学习系统,评估每笔付款风险并预测欺诈可能性。支持Hosted和Non-Hosted两种接入模式,提供riskDefense和SafePayGuardJs两种JS组件。根据综合因素对交易打分,判断高风险、低风险、请求3DS验证或人工审核,并通过 --- # 风控决策 PingPongCheckout提供实时欺诈保护,而且不要求额外的部署。核心是一个自适应机器学习系统,可以实时评估每笔付款的风险水平。它使用与每笔付款关联数据,并利用我们支付网络中的数据来预测付款是否有可能是欺诈性的。 我们的机器学习系统灵活且响应性强,不断学习新的客户购买模式和交易特征,并且在发现付款存在欺诈时会纳入您的反馈。 ## 如何集成风控 * Hosted接入模式: 您无需做任何额外的集成,一切包含在PingPongCheckout提供的`JS-SDK`中。 * Non-Hosted接入模式: 您需要将PingPongCheckout的提供的额外的JS组件集成到您的交易表单中。 ### 风险控制JS组件 PingPongCheckout提供的风险管理两种JS组件,可以帮助您快速集成风控功能。 | 组件 | 风控 | 3DS | 描述 | |:----------------------------------------------------------------------------|:-----------------------------------------------------------------|:---------------------------------------------------------------------|:------------------------------| | riskDefense | | | 同时集成PingPongCheckout的风控和3DS | | SafePayGuardJs | | | 如果您不想集成3DS,可以选择SafePayGuardJs | | ## 风控结果 根据持卡人的综合因素(持卡人的历史交易行为、本次交易操作的行为、3D验证是否通过、IP地址等是否命中欺诈)对交易做出打分,判断结果可能的情况为: * 高风险:交易存在欺诈,将会中断当前交易,并提示交易拒绝(如:`Transaction reject(high risk)`)。 * 低风险:交易将被放行。 * 请求3DS验证:交易可能存在风险,需要持卡人完成3DS认证。 * 人工审核:需要人工审核。 ## 人工审核 对于部分无法自动判断的交易,交易将被挂起,并进入`PROCESSING`。一般来说,审核由PingPongCheckout风控专家进行,人工审核的时间正常不会超过1个自然日。不对商户开放审核权限。对于有风控经验的商户, 可以向PingPongCheckout的商务经理申请放开审核权限,自行审核。 ### 人工审核的结果 审核结果可能的情况为:SUCCESS | 操作 | 交易状态 | 描述 | |:---------:|:-----------------------------------------------------------------:|:----------------------:| | `APPROVE` | SUCCESS | 交易将被放行,并再次通过异步通知回调交易状态 | | `REJECT` | FAILED | 交易将被拒绝,并再次通过异步通知回调交易状态 | --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/riskManger/riskDefense/index.md description: >- riskDefense组件用于集成3DS验证及风控功能,适用于提升支付安全性。初始化时需加载JS并配置环境参数如env、accId等。通过获取generatedData来准备必要的风控信息,并在下单支付时传递browserInfo以完成交易安全检查。 --- # 3DS riskDefense组件集成指南 ## 初始化 ### load JS ::: code-tabs @tab URL ``` https://pay-cdn.pingpongx.com/production-fra/static/riskDefense/pingpongRiskDefense.min.js ``` ::: ### initialize JS ::: danger 沙箱联调请填入`env`=`SANDBOX`, 生产环境请填入`env`=`PRODUCTION`。 ::: ::: code-tabs @tab JavaScript ```js const pp = new PingPongRiskDefense({ env: 'SANDBOX'|'PRODUCTION', accId: string, clientId: string, requestId: string, merchantUserId: string, merchantTransactionId: string }) ``` ::: | 属性 | 类型 | 必填 | 描述 | |-----------------------|--------|-----|---------------------------------------| | env | string | M | 当前调用服务环境SANDBOXPRODUCTION | | accId | string | M | PingPong店铺号 | | requestId | string | C | 端到端接入时候传送 | | merchantUserId | string | C | 持卡人在商户网站的会员标识 | | merchantTransactionId | string | C | 收银台应传 `merchantTransactionId` | ## 获取3DS 和风控参数 ### 获取generatedData 在向PingPongCheckout发起支付请求前, 执行该步骤获取`generatedData`, 并在支付时将其传递给支付接口。 ::: code-tabs @tab JavaScript ```js const generatedData = pp.getGeneratedData() ``` ::: 返回的generatedData结构如下: ::: code-tabs @tab JavaScript ```js { browserInfo: { acceptHeader: string, colorDepth: number, language: string, screenHeight: number screenWidth: number timeZoneOffset: number userAgent: string javaEnabled: boolean javaScriptEnabled: boolean }, jsGeneratedData: { fingerPrint: string, forterSiteId: string, forterTokenCookie: string | null } } ``` ::: ## 下单并支付接口报文组装 ### 填充browserInfo 请求PingPongCheckout 下单并支付接口。在参数 `browserInfo`中传送`generatedData`里面获取的`broswerInfo`参数。 | 属性 | 类型 | 描述 | |-------------------|--------|-----------------------------------------------------------------------------------------------------------------------------------------| | language | string | 购物者浏览器的navigator.language值(如IETF BCP 47中所定义)。 | | screenWidth | int | 持卡人终端屏幕宽度(单位:像素) | | javaEnabled | bool | 持卡人终端是否能够执行Java。 | | javaScriptEnabled | bool | 指示购物者的浏览器是否能够执行JavaScript。如果字段不存在,则假定为默认的`true`值。 | | acceptHeader | string | http响应头信息, 示例值: text/html, application/xhtml+xml, application/xml;q=0.9, image/webp, image/apng, \*;q=0.8 | | colorDepth | string | | | screenHeight | int | 持卡人终端屏幕高度(单位:像素) | | jetLag | int | UTC时间和持卡人浏览器本地时间之间的时差,以分钟为单位。 | | userAgent | string | 浏览器用户代理信息 示例值: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 | ### jsGeneratedData 填充 | 属性 | 类型 | 描述 | |-------------------|--------|------| | fingerPrint | string | 设备指纹 | | forterSiteId | string | 站点标识 | | forterTokenCookie | string | | ### 请求支付 完成上述额外的参数填充之后,还需要填充下单并支付接口必要的业务参数。成功发起支付之后,响应报文中会携带参数 `threeDUnionParams` 请求报文示例: ::: code-tabs @tab JSON ```json { "accId":"2090020315464510103001", "clientId":"2090020315464510103", "signType":"SHA256", "sign":"{{Sign}}", "version":"1.0", "bizContent":{ "captureDelayHours":"0", "amount":"3", "currency":"USD", "merchantTransactionId":"{{merchantTransactionId}}", "payResultUrl":"https://test-acquirerpay.pingpongx.com/qa/result.html", "payCancelUrl":"https://test-acquirerpay.pingpongx.com/qa/result.html", "notificationUrl":"https://test-acquirerpay.pingpongx.com/qa/result.html", "language":"en", "requestId":"{{requestId}}", "tradeCountry":"US", "shopperIP":"222.126.52.23", "paymentMethod":{ "type":"scheme", "cardInfo":{ "expireMonth":"12", "expireYear":"2024", "holderFirstName":"w", "holderLastName":"w", "number":"5200000000001096", "cvv":"103" } }, "customer":{ "firstName":"Jamesbb", "lastName":"LeBronbb", "email":"test@pingpongx.com", "phone":"9157030054" }, "goods":[ { "name":"商品名称mepsking1", "description":"商品描述", "sku":"产品SKU111", "unitPrice":"1000", "number":"1", "imgUrl":"https://xiu.mepsking.top/material/1/16606169805015585.png", "virtualProduct":"Y" } ], "shippingAddress":{ "firstName":"Jamesbb", "lastName":"LeBronbb", "phone":"9157030054", "email":"3ds@pingpongx.com", "street":"3888 Austin Secret Lane", "postcode":"84723", "city":"Circleville", "state":"UT", "country":"US" }, "billingAddress":{ "firstName":"Jamesbb", "lastName":"LeBronbb", "phone":"9157030054", "email":"3ds@pingpongx.com", "street":"3888 Austin Secret Lane", "postcode":"84723", "city":"Circleville", "state":"UT", "country":"US" }, "browserInfo":{ "acceptHeader":"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8", "colorDepth":"24", "jetLag":"480", "language":"nl-NL", "javaEnabled":"true", "screenHeight":"723", "screenWidth":"1536", "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" }, "device":{ "orderTerminal":"02" } } } ``` ::: ## 是否需要3DS验证 ### threeDContinue * `threeDUnionParams.threeDContinue`为`true`时候需要触发3d验证。 * `threeDUnionParams.threeDContinue`为`false`时候将会跳转到商户的支付结果页`shopperResultUrl`。 ## 3DS挑战页 ### 使用JS的trigger方法触发3DS挑战页 将支付接口返回的 `threeDUnionParams` 作为入参调用 `trigger` 函数,风控JS会引导浏览器到3D挑战页,持卡人需要正确的完成3D验证,才能成功交易 ::: code-tabs @tab JavaScript ```js pp.trigger(threeDUnionParams) ``` ::: ### 使用PingPongChekout提供的中间页触发3DS挑战页 从下单并支付接口的响应报文中获取`threeDUnionParams.threeDRedirectUrl`参数,通过GET方式跳转,随后PingPongChekout提供的中间页将会自动重定向到3DS挑战页。 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/riskManger/safePayGuardJs/index.md description: >- SafePayGuardJs是支付过程中的风险控制插件,用于预防欺诈、保障资金安全及优化用户体验。适用于需要加强在线交易安全性的场景。初始化时需设定环境参数(SANDBOX或PRODUCTION),并调用getGeneratedData方法获取设备指纹等风控信息,以增强支付请求的安全性。 --- # safePayGuardJs **SafePayGuardJs**是一个用于支付过程中的风险控制插件,包括预防欺诈行为、保护资金安全,提升用户体验。 ## 安装 ```javascript ``` ## 初始化 ### 定义初始化参数 ::: danger 沙箱联调请填入`env`=`SANDBOX`, 生产环境请填入`env`=`PRODUCTION`。 ::: ```javascript const options = { env: 'DEV', // 'SANDBOX'|'PRODUCTION' accId: accId, clientId: clientId, requestId: requestId, merchantUserId: merchantUserId, } ``` ### 初始化 ```javascript SafePayGuardJs.init(options) ``` ## 获取generatedData 在完成初始化后,该插件会自行收集设备指纹和风控所需参数,真正发起支付请求前, 你只需要调用插件提供的 `getGeneratedData` 方法进行获取(以下均称其为 generatedData),并在后续支付中传入。 示例: ```javascript const generatedData = SafePayGuardJs.getGeneratedData() // generatedData: { fingerPrint: string; forterSiteId: string; forterTokenCookie: string | null; riskExtendInfos: [{ channelCode: "1xxxxx0x", metadata: "xxx5xxxd5dxxxxxeaxxxxxxxdxfxx" }] } ``` --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/riskManger/SecureShieldJs/index.md description: >- SecureShieldJs是用于在线支付的安全插件,旨在提高信用卡交易安全性并降低欺诈风险。适用于需要增强支付安全性的网站。支持通过初始化参数配置环境(SANDBOX/PRODUCTION),并提供3DS验证功能,默认开启但可关闭。关键方法包括初始化、触发3DS验证及获取生成的数据,其中`trig --- # SecureShieldJs组件 **SecureShieldJs** 一个用于在线安全支付的插件,旨在提高信用卡交易的安全性,降低欺诈交易的风险。 ## 安装 ::: code-tabs @tab JavaScript ```javascript // window.SecureShieldJs ``` ::: ## 初始化 ### 定义初始化参数 ::: danger 沙箱联调请填入`env`=`SANDBOX`, 生产环境请填入`env`=`PRODUCTION`。 ::: ::: code-tabs @tab JavaScript ```javascript const options = { env: 'SANDBOX', // 'SANDBOX'|'PRODUCTION' accId: accId, clientId: clientId, requestId: requestId, merchantUserId: merchantUserId, merchantTransactionId: merchantTransactionId, } ``` ::: * `requestId`为S2S对接时传入的,pingpong收银台应传`merchantTransactionId`。 ### 完成初始化 ::: code-tabs @tab JavaScript ```javascript const secureShieldJs = SecureShieldJs.init(options, [avoidThreeDs=false]) ``` ::: ::: warning 你可以在 init 时传入第二个参数true来关闭 3Ds功能,关闭后,插件将不进行 3D 信息的采集, 只保留 browser 信息的采集。为保证支付安全性, 需要你自行实现 3D 逻辑。 ::: ## 3DS init 以下方法仅在开启 3Ds功能时生效(默认开启) 在完成插件的初始化后,现在你可以在合适的时机调用 `triggerThreeDsInit`方法来进行 3DS init。 ::: code-tabs @tab JavaScript ```javascript secureShieldJs.triggerThreeDsInit(params) ``` ::: 何时调用? ### 场景一 为了收集完整正确的卡号,你可以在 卡号 和 卡有效期 input 失焦后调用,插件将自行进行3DS init操作 此时,调用 triggerThreeDsInit 方法需传入 cardInfo 相关参数: | 属性 | 类型 | 必填 | 描述 | |------------------------|------------|-----|------------| | params.cardNumber | String(12) | C | 国际信用卡卡号 | | params.cardExpireMonth | String(32) | C | 有效期-月,2位数字 | | params.cardExpireYear | String(64) | C | 有效期-年,4位数字 | 示例: ::: code-tabs @tab JavaScript ```javascript const cardNumberElement = document.querySelector('#cardNumber'); const expireDateElement = document.querySelector('#expireDate'); const triggerThreeDs = { threeDsParams: { cardNumber: cardNumberElement.value, expireDate: expireDateElement.value }, // 代理函数, 在 3Ds init 前对参数进行校验 proxyThreeDsParams() { const proxyHandle = { get: (target, key) => { // 简单校验: 卡号位数 <= 15 时返回空字符 if (key === 'cardNumber') { return target[key].length <= 15 ? '' : target[key].replace(/\s+/g, '') } // 卡号有效期参数处理: 不满足条件返回空字符, 反之为处理好的参数格式 if (key === 'expireDate') { const expireDate = target[key].replace(/\s+/g, '') if (expireDate.length === 5 && expireDate.indexOf('/') > -1) { const [cardExpireMonth, cardExpireYear] = expireDate.split('/') return { cardExpireMonth, cardExpireYear: `20${cardExpireYear}` } } return '' } return ''; } } return new Proxy(this.threeDsParams, proxyHandle) }, getThreeDsInitParams(threeDsParams) { const { cardNumber, expireDate } = threeDsParams if (!cardNumber) return null; if (typeof expireDate === 'string') return null; const { cardExpireMonth, cardExpireYear } = expireDate return { cardNumber, cardExpireMonth, cardExpireYear } } } const _proxyThreeDsParams = triggerThreeDs.proxyThreeDsParams() const handleBlur = (name) => { const { value } = event.target triggerThreeDs.threeDsParams[name] = value const params = triggerThreeDs.getThreeDsInitParams(_proxyThreeDsParams) // 当校验不通过时, 你不需要调用 triggerThreeDsInit 方法 params && secureShieldJs.triggerThreeDsInit(params).then((data) => {}) } cardNumberElement.addEventListener('blur', handleBlur.bind(this, 'cardNumber'), true) expireDateElement.addEventListener('blur', handleBlur.bind(this, 'expireDate'), true) ``` ::: 以上为原生 Js 实现方式,如果你使用 Vue,可以使用 watchEffect 对卡号、卡有效期进行监听,校验、整合参数完成后调用 3Ds init 方法即可; ### 场景二 当你的支付场景中存在绑卡的场景时,你可以直接传入cardToken来进行 3Ds init | 属性 | 类型 | 必填 | 描述 | |------------------|------------|-----|----------------| | params.cardToken | String(32) | C | 可以用来替代cardInfo | 示例: ::: code-tabs @tab JavaScript ```javascript // 选择某个已绑定的卡时: document.querySelector('selectId').addEventListener('change', (event) => { const { value: card } = event.target const params = { cardToken: card.cardToken } secureShieldJs.triggerThreeDsInit(params) }) ``` ::: ## 获取generatedData 在完成 3Ds init 后,真正发起支付请求前, 需要将 3Ds 参数 和 browserInfo (以下均称其为 generatedData)传递给支付接口。 关闭 3Ds 时,`getGeneratedData` 方法只会返回 browserInfo。 ### 如何获取 * 通过 triggerThreeDsInit: 在进行 3Ds init 时调用了 triggerThreeDsInit,该方法将返回一个Promise,你可以在 Promise Fulfilled 时获取 generatedData。 示例: ::: code-tabs @tab JavaScript ```javascript const threeDsPromise = secureShieldJs.triggerThreeDsInit(params) threeDsPromise.then(jsGeneratedData => { // 可以赋值给外部变量,支付时传递 this.myGeneratedData = jsGeneratedData }) ``` ::: * 调用插件提供的 getGeneratedData 方法(推荐) 示例: ::: code-tabs @tab JavaScript ```javascript const generatedData = secureShieldJs.getGeneratedData() // generatedData: { browserInfo: { acceptHeader: string colorDepth: number language: string screenHeight: number screenWidth: number jetLag: number userAgent: string javaEnabled: boolean javaScriptEnabled: boolean } jsGeneratedData: { channel: string version: string correlationId: string threeDInitTransId: string threeDSecureReferenceId: string } } ``` ::: --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/saas/Shopify/Afterpay/index.md description: >- Afterpay 是一种适用于 Shopify 平台的分期付款解决方案,支持以美元结算。商户需首先确认店铺货币为 USD,然后通过指定链接安装 Afterpay 应用。安装成功后,该支付选项将自动出现在 Shopify 后台的 Payments 部分及结账页面上,方便消费者选择使用。 --- # Afterpay ## Afterpay 支付方式安装步骤 ### Step 1. 币种检查 检查安装条件,币种必须是 **USD**。 币种检查路径:【**Store details**】-->【**store currency**】-->【**USD**】 ### Step 2. 搜索 APP 点击此链接 () 安装 APP。 ::: warning 注意 请通过指定链接安装,不要在 Shopify 应用市场直接搜索。若涉及多个网站/店铺,需在**右上角**切换网站/店铺后绑定。 ::: ### Step 3. 安装 APP 点击【**Install**】-->【**关联 SHOPIFY 和 PingPong Checkout**】-->选择【**注册主体**】-->【**确认**】 ::: warning 注意 请务必按照在 **PingPong Checkout 注册的公司主体**选择**主体地区**,**否则会影响绑定**。其他主体指除美国主体之外的其他主体可选择,如 HK/SG 等。 ::: 请使用您注册时的管理员邮箱及密码进行登录。 登录名默认:**admin** ### Step 4. 选择绑定网站 选择您要绑定的网站-->点击【**同意并授权**】,会自动跳转到 Shopify 页面。 ::: warning 注意 * 目前系统不支持批量绑定多个网站,需要逐个进行操作 * 此页面仅展示**已审核通过的网站** ::: ### Step 5. 安装成功 安装成功后,在 Shopify 后台【**Payments**】里面会出现这个 APP,收银台也会出现该支付方式。 ::: warning 注意 Test mode 不勾选,否则会提交测试环境。 ::: ### Step 6. 设置必填项 Email 和 name 设置为必填项,不然会影响交易成功,需要根据以下截图设置勾选。 --- --- url: 'https://acquirer-api-docs-v4.pingpongx.com/notes/zh/saas/Shopify/apm/index.md' description: >- 本地支付聚合收银台安装指南,适用于 Shopify 平台商家集成本地支付方式。通过搜索并安装 PingPong Local Payment APP,商家可在其店铺中添加本地支付选项,覆盖地区广泛,支持多种本地支付手段。安装成功后需提供一个产品链接供 PingPong 团队测试,确保支付流程顺畅后即可正式使用。 --- # 本地支付 - 聚合收银台 ## 本地支付聚合收银台安装指南 ::: note 提示 如未开通本地支付方式,此步骤可忽略。 ::: ### Step 1. 搜索 APP 点击此链接 () 安装 APP。 ::: warning 注意 请通过指定链接安装,不要在 Shopify 应用市场直接搜索。 ::: ### Step 2. 安装 APP 点击【**Install**】-->【**关联 SHOPIFY 和 PingPong Checkout**】-->选择【**注册主体**】-->【**确认**】 ::: warning 注意 请务必按照在 **PingPong Checkout 注册的公司主体**选择**主体地区**,**否则会影响绑定**。其他主体指除美国主体之外的其他主体可选择,如 HK/SG 等。 ::: 请使用您注册时的管理员邮箱及密码进行登录。 登录名默认:**admin** ### Step 3. 选择绑定网站 选择您要绑定的网站-->点击【**同意并授权**】,会自动跳转到 Shopify 页面。 ::: warning 注意 * 目前系统不支持批量绑定多个网站,需要逐个进行操作 * 此页面仅展示**已审核通过的网站** ::: ### Step 4. 激活支付方式 完成绑定并跳转回 Shopify 管理后台,【**Payments**】会出现 "PingPong Local Payment" 的 APP,勾选需要的支付方式,并单击【**Activate**】-->【**Save**】。 ::: warning 注意 Test mode 不勾选,否则会提交测试环境。 ::: ### Step 5. 设置必填项 Email 和 name 设置为必填项,不然会影响交易成功,需要根据以下截图设置勾选。 ### Step 6. 安装成功 安装成功后,您的商户后台和收银台会显示对应的支付图标/入口。 ### Step 7. 测试验证 APP 安装成功后,请设置一个金额为 **1 美元**的商品链接给运营团队进行测试,或商户侧可自行测试一笔。收银台跳转及展示没问题即可正常上线使用。 --- --- url: 'https://acquirer-api-docs-v4.pingpongx.com/notes/zh/saas/Shopify/Blik/index.md' description: >- Blik 是一种专为波兰地区设计的支付方式,支持 PLN 货币。适用于 Shopify 平台,确保店铺货币设置为 PLN 且发货地与目的地均为波兰。安装相应 APP 后,商户可在后台 Payments 部分启用此支付选项,同时在收银台显示该支付方式。 --- # Blik ## Blik 支付方式安装步骤 ### Step 1. 币种检查 Blik 支付币种只能是 **PLN**,包含发往波兰地区的商品。 币种检查路径:【**Store details**】-->【**store currency**】-->【**PLN**】 ### Step 2. 地区检查 地区检查路径:【**Shipping and delivery**】-->【**Shipping from**】-->【**shipping to Poland**】 ### Step 3. 搜索 APP 点击此链接 () 安装 APP。 ::: warning 注意 请通过指定链接安装,不要在 Shopify 应用市场直接搜索。若涉及多个网站/店铺,需在**右上角**切换网站/店铺后绑定。 ::: ### Step 4. 安装 APP 点击【**Install**】-->【**关联 SHOPIFY 和 PingPong Checkout**】-->选择【**注册主体**】-->【**确认**】 ::: warning 注意 请务必按照在 **PingPong Checkout 注册的公司主体**选择**主体地区**,**否则会影响绑定**。其他主体指除美国主体之外的其他主体可选择,如 HK/SG 等。 ::: 请使用您注册时的管理员邮箱及密码进行登录。 登录名默认:**admin** ### Step 5. 选择绑定网站 选择您要绑定的网站-->点击【**同意并授权**】,会自动跳转到 Shopify 页面。 ::: warning 注意 * 目前系统不支持批量绑定多个网站,需要逐个进行操作 * 此页面仅展示**已审核通过的网站** ::: ### Step 6. 安装成功 安装成功后,在 Shopify 后台【**Payments**】里面会出现这个 APP,收银台也会出现该支付方式。 ::: warning 注意 Test mode 不勾选,否则会提交测试环境。 ::: ### Step 7. 设置必填项 Email 和 name 设置为必填项,不然会影响交易成功,需要根据以下截图设置勾选。 ### Step 8. 安装成功 安装成功后,您的商户后台和收银台会显示对应的支付图标/入口。 --- --- url: 'https://acquirer-api-docs-v4.pingpongx.com/notes/zh/saas/Shopify/card/index.md' description: >- Shopify x PingPong Checkout 国际卡内嵌安装指南,适用于希望在 Shopify 商店中集成 PingPong 支付解决方案的商户。该指南涵盖了从搜索并安装 APP 到完成测试及关闭原有收银台的全过程,确保商户能够顺利接入国际信用卡支付功能,支持全球范围内的交易处理。 --- # Shopify x PingPong Checkout 信用卡内嵌安装指南(国际卡) ## 国际卡内嵌安装指南 ### Step 1. 搜索 APP 点击此链接 () 安装 APP。 ::: warning 注意 请通过指定链接安装,不要在 Shopify 应用市场直接搜索。 ::: ### Step 2. 安装 APP 点击【**Install**】-->【**关联 SHOPIFY 和 PingPong Checkout**】-->选择【**注册主体**】-->【**确认**】 ::: warning 注意 请务必按照在 **PingPong Checkout 注册的公司主体**选择**主体地区**,**否则会影响绑定**。其他主体指除美国主体之外的其他主体可选择,如 HK/SG 等。 ::: 请使用您注册时的管理员邮箱及密码进行登录。 登录名默认:**admin** ### Step 3. 选择绑定网站 选择您要绑定的网站-->点击【**同意并授权**】,会自动跳转到 Shopify 页面。 ::: warning 注意 * 目前系统不支持批量绑定多个网站,需要逐个进行操作 * 此页面仅展示**已审核通过的网站** ::: ### Step 4. 激活支付方式 完成绑定并跳转回 Shopify 管理后台,勾选需要的支付方式,并单击【**Activate**】-->【**Save**】。 ::: warning 注意 Test mode 不勾选,否则会提交测试环境。 ::: ### Step 5. 设置必填项 Email 和 name 设置为必填项,不然会影响交易成功,需要根据以下截图设置勾选。 ### Step 6. 安装成功 安装成功后,您的商户后台和收银台会显示对应的支付图标/入口。 ### Step 7. 测试验证 APP 安装成功后,请设置一个金额为 **1 美元**的商品链接给运营团队进行测试,或商户侧可自行测试一笔。测试通过后,即可正式上线使用。 ### Step 8. 关闭或卸载原有收银台 ::: note 提示 新商户接入,可忽略此步骤。 ::: PingPong Checkout 内嵌收银台测试成功后,可将原来的集合收银台关闭,具体操作如下: #### 若只对接了 PingPong Checkout 的国际卡 进入 Shopify 管理后台,选择【**Settings**】-【**Payments**】,点击【**PingPong Checkout**】进入,往下拉直接点击【**Deactivate**】即可。 #### 若同时接入了 PingPong Checkout 的国际卡和本地支付方式 可按照[本地支付收银台模式集成](/notes/zh/saas/Shopify/apm/)安装本地支付收银台,部分本地支付方式已支持平铺,可按照对应链接将已支持平铺的支付方式进行平铺安装。 ::: warning 注意 若之前安装过其他合作商的信用卡内嵌 APP,需将其卸载后才能安装 PingPong Checkout 的信用卡内嵌。 ::: --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/saas/Shopify/checkoutCustomize/index.md description: >- 自定义收银台功能适用于电商及虚拟类商户,特别是对品牌整体风格有要求的中小型商户。通过统一商品浏览、下单和支付流程的交互风格,显著提升用户体验并提高转化率。支持根据不同网站设置不同风格,包括色彩、样式和字体大小等。不支持已使用API或已定制个性化收银台样式的商户。 --- # 自定义收银台 ## 自定义收银台 适用场景:电商/虚拟类商户,对有品牌整体风格要求的;或者其他对于收银台页面/内嵌收银台有风格要求的中小型商户。 效果:显著提升用户体验,从商品浏览-下单-支付 统一整体流程都交互风格,一定程度上提高转化率。 限制:不支持已使用API定义收银台样式的商户,不支持已定制个性化收银台的商户。不支持shopify内嵌收银台修改样式。 时效:实时生效 优势:可以根据不同网站,设置不同风格的收银台。色彩,样式,字体大小等粒度丰富。 ## 操作流程 ### Step 2.1 打开顶部导航栏 打开顶部导航栏 网站管理---网站管理  ### Step 2.2 选择网站 定位到已完成审核的网站,点击右侧"更多"按钮------"编辑收银台样式"  ### Step 2.3 编辑网页标签(可选)  ### Step 2.4 设置样式(可选) 选择外观风格和上传品牌logo底色  ### Step 2.5 选择标签栏底色(可选)  ### Step 2.6 选择标签栏底色(可选) 建议不修改。  --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/saas/Shopify/ideal/index.md description: >- iDEAL 是适用于 Shopify 平台的荷兰本地支付方式,支持欧元交易。通过指定路径安装后,商家可在后台 Payments 部分启用此支付选项,并在收银台提供给消费者。主要步骤包括确认店铺货币为 EUR、搜索并安装对应 APP,成功后即可在前台展示新的支付方式。 --- # iDEAL ## iDEAL 支付方式安装步骤 ### Step 1. 币种检查 检查安装条件,币种必须是 **EUR**。 币种检查路径:【**Store details**】-->【**store currency**】-->【**EUR**】 ### Step 2. 搜索 APP 点击此链接 () 安装 APP。 ::: warning 注意 请通过指定链接安装,不要在 Shopify 应用市场直接搜索。 ::: ### Step 3. 安装 APP 点击【**Install**】-->【**关联 SHOPIFY 和 PingPong Checkout**】-->选择【**注册主体**】-->【**确认**】 ::: warning 注意 请务必按照在 **PingPong Checkout 注册的公司主体**选择**主体地区**,**否则会影响绑定**。其他主体指除美国主体之外的其他主体可选择,如 HK/SG 等。 ::: 请使用您注册时的管理员邮箱及密码进行登录。 登录名默认:**admin** ### Step 4. 选择绑定网站 选择您要绑定的网站-->点击【**同意并授权**】,会自动跳转到 Shopify 页面。 ::: warning 注意 * 目前系统不支持批量绑定多个网站,需要逐个进行操作 * 此页面仅展示**已审核通过的网站** ::: ### Step 5. 安装成功 安装成功后,在 Shopify 后台【**Payments**】里面会出现这个 APP,收银台也会出现该支付方式。 ::: warning 注意 Test mode 不勾选,否则会提交测试环境。 ::: ### Step 6. 设置必填项 Email 和 name 设置为必填项,不然会影响交易成功,需要根据以下截图设置勾选。 ### Step 7. 安装成功 安装成功后,您的商户后台和收银台会显示对应的支付图标/入口。 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/saas/Shopify/Klarna/Klarna/index.md description: >- Klarna是一种适用于Shopify平台的支付方式,支持包括奥地利、加拿大、丹麦等在内的多个国家和对应的交易货币。通过安装Klarna PingPong应用,商家可以在其Shopify店铺中提供灵活的支付选项。安装步骤包括验证店铺货币与目标国家是否匹配,从Shopify应用商店安装Klarna P --- # Klarna ## APM平铺安装步骤 ### Step 1. 币种检查 交易国家和交易币种对照表(只要其中一条的交易国家与交易币种可以对照上,即可安装此APP) *** ``` **Shipping Country** **Transaction Currency** Austria EUR Canada CAD Denmark DKK Finland EUR Germany EUR Netherlands EUR Norway NOK Sweden SEK Switzerland CHF United Kingdom GBP Belgium EUR Spain EUR Italy EUR Czech Republic CZK France EUR Greece EUR Ireland (Republic of Ireland) EUR Poland PLN Portugal EUR United States USD ``` *** 币种检查:【 Store details】-- >【 store currency】 ### Step 2. 安装APP * 安装地址:https://apps.shopify.com/klarna-pingpong (1)登陆 PingPong Checkout (2)选择需要绑定的网站,并单击【同意并授权】,完成绑定并跳转回 Shopify 管理后台,勾选需要的支付方式,并单击【Activate PingPong Checkout】;注:Test mode 不勾选,否则会提交测试环境; (3)name设置,Klarna对于姓名强校验,会影响交易成功,需要根据以下截图设置勾选; ### Step 3. 安装成功(您的商户后台和收银台会显示Klarna的支付图标/入口) --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/saas/Shopify/Klarna/OSM/index.md description: >- Klarna的OSM插件安装配置指南,适用于Shopify商店,帮助商家通过站内消息提升客户支付体验。文档详细介绍了如何从Shopify应用商店安装Klarna OSM App,并在Shopify 2.0主题中集成该插件,包括添加Klarna OSM位置、访问应用程序区块及配置显示位置等步骤。支持自 --- # 如何为您的Shopify商店安装和配置Klarna的OSM(站内消息) ## 安装Klarna OSM App 您可以通过以下步骤在Shopify应用程序商店安装Klarna OSM App: 1. 进入Shopify后台,路径为:Settings > Apps & Sales Channels > Shopify App Store。 2. 搜索Klarna,并选择Klarna On-Site Messaging进行安装。  如果您的商店已经与Klarna集成了支付功能,应用程序将自动连接。如果没有,系统会要求您输入Klarna商户ID并手动连接账户。 ## Shopify 2.0主题集成 随着Shopify在线商店2.0的推出,您可以通过Shopify主题定制器与OSM App一起添加Klarna OSM位置。这可以通过在页面上直接添加Klarna App Block来实现。  ## 访问应用程序区块 对于能够使用Klarna现场消息应用程序块的商店,打开Klarna应用程序时会出现一个弹出窗口,让您知道已检测到Shopify 2.0主题。  ## 添加Klarna OSM 使用预览窗口导航到要添加Klarna OSM的页面。如果您希望将其添加为一个单独的部分,请单击"Add block",然后从应用程序列表中选择"Klarna On-Site Messaging"。  ## 配置位置 通过Klarna On Site Messaging应用程序配置位置,有三种安装选项:自动选择最佳位置、拖动预览框选择位置、CSS定位。  ## 常见问题 * **Q:采用传统模式设置了CSS,保存后页面上并未出现klarna的OSM怎么回事?** * 可能是因为CSS选择器不正确或未正确应用。 * **Q:我的网站是用Pagely搭建的,请问对于以上的方法适用吗?** * Pagely可能有其特定的集成方式,上述方法可能不适用。 * **Q:为什么有些商品页可以显示,有些却不行,都是同样的设置?** * 可能是因为CSS选择器不够通用,需要调整以匹配所有产品。 详见: Klarna 的 OSM 插件安装配置指南 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/saas/Shopify/Logistics/index.md description: >- Shopify物流绑定文档指导用户如何在Shopify平台上安装并配置物流应用,以自动抓取订单的物流信息。此过程包括创建自定义App、配置权限、保存Token及店铺二级域名,并在PingPong Checkout后台完成最终绑定。确保物流信息的及时上传有助于满足合规要求,避免影响提现审核和结汇额度。 --- # Shopify物流绑定 ## 背景 根据相关合规要求,订单需上传物流信息,为避免影响提现审核时效及人民币结汇额度,需按照此方式绑定物流app,以便后续自动抓取物流。 ## shopify物流绑定操作步骤 ### Step 1. 前往物流APP安装页面 点击【Settings】->【Apps and sales channels】->【develop apps for your store】或点击右上角的【Develop apps】 ### Step 2. Allow custom app development 点击【Develop apps】进入【APP development】->【Allow custom app development】 ### Step 3. Create an app 选择【Create an app】 ### Step 4. 设置App name 自定义App name->Create app ### Step 5. configure App 选择configuration->configure ### Step 6. 保存 勾选reader\_orders,save保存 ### Step 7. Install app 点击Install app ### Step 8. 复制Token并保存 * Token信息只能复制一次,请妥善保存,如有丢失,点Uninstall app 之后再Install app,会有新的Token ### Step 9. 获取店铺二级域名 获取店铺二级域名([xxx.myshopify.com](http://xxx.myshopify.com/))并保存 ### Step 10. 物流绑定 登陆pingpong checkout后台【**网站管理**】->【**提交网站审核**】->【**选择对应店铺**】->【**物流绑定**】 ### Step 11. 完成绑定 输入在shopify获取的域名和token,完成绑定即可。 * 绑定成功后,DEFAULT 下店铺的“ ”由灰色变成蓝色” ” ::: note 提示 1. 物流app绑定后会自动去抓取存量最近两月的订单,后续订单会自动抓取,但两个月之前的订单需要人工登录【**pingpongcheckout后台**】->【**订单管理**】->筛选状态【**未上传**】->【**导出当前结果**】,将物流信息(查询网址、物流单号、物流公司)、商品名称等补充完整后批量上传即可; 2. 物流app安装后,约24小时内会完成物流信息的抓取,届时可关注物流抓取情况;超过时间未抓取,可联系pingpong收单运营确认; 3. 确认店铺是否为关闭状态,若是关闭状态需提前联系pingpong收单运营处理,否则物流会抓取失败。 ::: --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/saas/Shopify/Multibanco/index.md description: >- Multibanco 是适用于 Shopify 平台的葡萄牙本地支付方式,支持欧元交易。安装步骤包括检查商店货币是否为 EUR,在 Shopify 应用商店搜索并安装对应 APP。成功安装后,这种支付方式将出现在商户后台的 Payments 选项及收银台中。 --- # Multibanco ## Multibanco 支付方式安装步骤 ### Step 1. 币种检查 检查安装条件,币种必须是 **EUR**。 币种检查路径:【**Store details**】-->【**store currency**】-->【**EUR**】 ### Step 2. 搜索 APP 点击此链接 () 安装 APP。 ::: warning 注意 请通过指定链接安装,不要在 Shopify 应用市场直接搜索。 ::: ### Step 3. 安装 APP 点击【**Install**】-->【**关联 SHOPIFY 和 PingPong Checkout**】-->选择【**注册主体**】-->【**确认**】 ::: warning 注意 请务必按照在 **PingPong Checkout 注册的公司主体**选择**主体地区**,**否则会影响绑定**。其他主体指除美国主体之外的其他主体可选择,如 HK/SG 等。 ::: 请使用您注册时的管理员邮箱及密码进行登录。 登录名默认:**admin** ### Step 4. 选择绑定网站 选择您要绑定的网站-->点击【**同意并授权**】,会自动跳转到 Shopify 页面。 ::: warning 注意 * 目前系统不支持批量绑定多个网站,需要逐个进行操作 * 此页面仅展示**已审核通过的网站** ::: ### Step 5. 安装成功 安装成功后,在 Shopify 后台【**Payments**】里面会出现这个 APP,收银台也会出现该支付方式。 ::: warning 注意 Test mode 不勾选,否则会提交测试环境。 ::: ### Step 6. 设置必填项 Email 和 name 设置为必填项,不然会影响交易成功,需要根据以下截图设置勾选。 ### Step 7. 安装成功 安装成功后,您的商户后台和收银台会显示对应的支付图标/入口。 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/saas/Shopify/Mybank/index.md description: >- MyBank 是适用于 Shopify 平台的欧洲本地支付方式,支持欧元交易。通过指定路径安装后,商家可在后台 Payments 部分启用此支付选项,并在收银台提供给消费者。主要步骤包括确认店铺货币为 EUR、搜索并安装对应 APP,成功后即可在前台展示新的支付方式。 --- # MyBank ## MyBank 支付方式安装步骤 ### Step 1. 币种检查 检查安装条件,币种必须是 **EUR**。 币种检查路径:【**Store details**】-->【**store currency**】-->【**EUR**】 ### Step 2. 搜索 APP 点击此链接 () 安装 APP。 ::: warning 注意 请通过指定链接安装,不要在 Shopify 应用市场直接搜索。 ::: ### Step 3. 安装 APP 点击【**Install**】-->【**关联 SHOPIFY 和 PingPong Checkout**】-->选择【**注册主体**】-->【**确认**】 ::: warning 注意 请务必按照在 **PingPong Checkout 注册的公司主体**选择**主体地区**,**否则会影响绑定**。其他主体指除美国主体之外的其他主体可选择,如 HK/SG 等。 ::: 请使用您注册时的管理员邮箱及密码进行登录。 登录名默认:**admin** ### Step 4. 选择绑定网站 选择您要绑定的网站-->点击【**同意并授权**】,会自动跳转到 Shopify 页面。 ::: warning 注意 * 目前系统不支持批量绑定多个网站,需要逐个进行操作 * 此页面仅展示**已审核通过的网站** ::: ### Step 5. 安装成功 安装成功后,在 Shopify 后台【**Payments**】里面会出现这个 APP,收银台也会出现该支付方式。 ::: warning 注意 Test mode 不勾选,否则会提交测试环境。 ::: ### Step 6. 设置必填项 Email 和 name 设置为必填项,不然会影响交易成功,需要根据以下截图设置勾选。 ### Step 7. 安装成功 安装成功后,您的商户后台和收银台会显示对应的支付图标/入口。 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/saas/Shopify/overview/index.md description: >- Shopify x PingPong Checkout 集成指南,提供信用卡内嵌、本地支付聚合收银台及本地支付平铺三种集成方式。支持多种本地支付方式如 Sofort、Trustly、iDEAL、MyBank、Multibanco、Blik、Afterpay、Klarna 等在页面直接展示,让消费者清晰了解商户支持的支付选项。 --- # Shopify ## Shopify 集成概览 ::: tip 支付方式详细信息 查看完整的支付方式介绍,请访问 [支付方式详细信息](/notes/zh/paymentMethods/overview/) ::: ### 集成方式 Shopify x PingPong Checkout 提供以下三种集成方式: | 集成方式 | 说明 | 安装文档 | |:---------|:-----|:---------| | 信用卡内嵌 | 国际信用卡支付,直接嵌入 Shopify 收银台 | [前往安装](/notes/zh/saas/Shopify/card/) | | 本地支付聚合收银台 | 所有本地支付方式通过 PingPong Checkout 收银台展示 | [前往安装](/notes/zh/saas/Shopify/apm/) | | 本地支付平铺 | 支持的本地支付方式直接在页面平铺展示 | 见下方列表 | ### 本地支付平铺 本地支付方式现可在收银台以平铺形式展示,使消费者能够清晰识别商户所支持的支付选项,便于支付。 | 支付方式 | 支持币种 | 是否支持 | 安装文档 | |:---------|:---------|:---------|:---------| | Sofort | EUR | Y | [前往安装](/notes/zh/saas/Shopify/sofort/) | | Trustly | EUR | Y | [前往安装](/notes/zh/saas/Shopify/Trustly/) | | iDEAL | EUR | Y | [前往安装](/notes/zh/saas/Shopify/ideal/) | | MyBank | EUR | Y | [前往安装](/notes/zh/saas/Shopify/Mybank/) | | Multibanco | EUR | Y | [前往安装](/notes/zh/saas/Shopify/Multibanco/) | | Blik | PLN | Y | [前往安装](/notes/zh/saas/Shopify/Blik/) | | Afterpay | USD | Y | [前往安装](/notes/zh/saas/Shopify/Afterpay/) | | Klarna | - | Y | [前往安装](/notes/zh/saas/Shopify/Klarna/Klarna/) | ### 其他功能 | 功能 | 说明 | 文档 | |:-----|:-----|:-----| | 自定义收银台 | 自定义 Shopify 收银台样式 | [前往配置](/notes/zh/saas/Shopify/checkoutCustomize/) | | 物流绑定 | 绑定物流信息 | [前往配置](/notes/zh/saas/Shopify/Logistics/) | ::: note 提示 尚未支持平铺的本地支付方式,可以通过 [本地支付聚合收银台](/notes/zh/saas/Shopify/apm/) 方式集成。 ::: --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/saas/Shopify/sofort/index.md description: >- Sofort 是一种适用于欧洲地区的在线支付方式,主要支持欧元交易。通过 Shopify 商店安装该应用后,商家可以在其后台的 Payments 部分找到此选项,并在结账时为顾客提供这种便捷的支付手段。安装前需确认店铺货币设置为 EUR。 --- # Sofort ## Sofort 支付方式安装步骤 ### Step 1. 币种检查 检查安装条件,币种必须是 **EUR**。 币种检查路径:【**Store details**】-->【**store currency**】-->【**EUR**】 ### Step 2. 搜索 APP 点击此链接 () 安装 APP。 ::: warning 注意 请通过指定链接安装,不要在 Shopify 应用市场直接搜索。 ::: ### Step 3. 安装 APP 点击【**Install**】-->【**关联 SHOPIFY 和 PingPong Checkout**】-->选择【**注册主体**】-->【**确认**】 ::: warning 注意 请务必按照在 **PingPong Checkout 注册的公司主体**选择**主体地区**,**否则会影响绑定**。其他主体指除美国主体之外的其他主体可选择,如 HK/SG 等。 ::: 请使用您注册时的管理员邮箱及密码进行登录。 登录名默认:**admin** ### Step 4. 选择绑定网站 选择您要绑定的网站-->点击【**同意并授权**】,会自动跳转到 Shopify 页面。 ::: warning 注意 目前系统不支持批量绑定多个网站,需要逐个进行操作。 ::: ### Step 5. 安装成功 安装成功后,在 Shopify 后台【**Payments**】里面会出现这个 APP,收银台也会出现该支付方式。 ::: warning 注意 Test mode 不勾选,否则会提交测试环境。 ::: ### Step 6. 设置必填项 Email 和 name 设置为必填项,不然会影响交易成功,需要根据以下截图设置勾选。 ### Step 7. 安装成功 安装成功后,您的商户后台和收银台会显示对应的支付图标/入口。 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/saas/Shopify/Trustly/index.md description: >- Trustly 是一种支持欧元支付的在线银行转账服务。适用于 Shopify 商户,提供安全便捷的支付解决方案。安装步骤包括检查店铺货币设置为 EUR、通过指定链接搜索并安装 Trustly 应用。安装成功后,可在 Shopify 后台的 Payments 部分找到该应用,并在收银台显示此支付选项。 --- # Trustly ## Trustly 支付方式安装步骤 ### Step 1. 币种检查 检查安装条件,币种必须是 **EUR**。 币种检查路径:【**Store details**】-->【**store currency**】-->【**EUR**】 ### Step 2. 搜索 APP 点击此链接 () 安装 APP。 ::: warning 注意 请通过指定链接安装,不要在 Shopify 应用市场直接搜索。若涉及多个网站/店铺,需在**右上角**切换网站/店铺后绑定。 ::: ### Step 3. 安装 APP 点击【**Install**】-->【**关联 SHOPIFY 和 PingPong Checkout**】-->选择【**注册主体**】-->【**确认**】 ::: warning 注意 请务必按照在 **PingPong Checkout 注册的公司主体**选择**主体地区**,**否则会影响绑定**。其他主体指除美国主体之外的其他主体可选择,如 HK/SG 等。 ::: 请使用您注册时的管理员邮箱及密码进行登录。 登录名默认:**admin** ### Step 4. 选择绑定网站 选择您要绑定的网站-->点击【**同意并授权**】,会自动跳转到 Shopify 页面。 ::: warning 注意 * 目前系统不支持批量绑定多个网站,需要逐个进行操作 * 此页面仅展示**已审核通过的网站** ::: ### Step 5. 安装成功 安装成功后,在 Shopify 后台【**Payments**】里面会出现这个 APP,收银台也会出现该支付方式。 ::: warning 注意 Test mode 不勾选,否则会提交测试环境。 ::: ### Step 6. 设置必填项 Email 和 name 设置为必填项,不然会影响交易成功,需要根据以下截图设置勾选。 ### Step 7. 安装成功 安装成功后,您的商户后台和收银台会显示对应的支付图标/入口。 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/services/blackWhiteList/add/index.md description: >- 新增黑/白名单API允许用户通过指定维度(如邮箱、卡号等)添加黑白名单条目,支持按国家、省份和城市进一步细化筛选条件。关键参数包括subjectType定义名单类型,dataType指定数据维度,dataValue为具体值。适用于需要精细化管理支付风险的场景。 --- # 新增黑/白名单 ## 请求地址 ```bash POST https://sandbox-acquirer-payment.pingpongx.com/merchant/acquirer/blackWhiteList/api/v4/add ``` ```bash POST https://acquirer-payment.pingpongx.com/merchant/acquirer/blackWhiteList/api/v4/add ``` ## 请求参数 ### 业务参数 | 字段名 | 是否必填 | 字段类型 | 字段描述 | |-------------|------|--------|----------------------------------------------------------------------------------------------------------------------------------| | subjectType | M | String | White/Black | | dataType | M | String | 维度,枚举值:Email-邮箱Email\_Domain-邮箱域名Card\_No-卡号Phone-手机号Shipping\_Address-收货地址街道 | | dataValue | M | String | 数据 | | country | O | String | 国家 | | state | O | String | 省份 | | city | O | String | 城市 | ::: note 提示 接口加签使用的`salt`非 accId 对应`salt`,如需获取请联系 PingPongCheckout 技术支持。 ::: ### 请求示例 ```json { "sign": "4DDD6A0A03D15D1DEF86C6DC3090F440845024E487F2017094A3C8F76EC488F9", "signType": "SHA256", "clientId": "2022110717083010293", "accId": "2022110717083010293542", "bizContent": "{\"dataType\":\"Shipping_Address\",\"dataValue\":\"滨江678\",\"subjectType\":\"White\",,\"country\":\"中国\",,\"state\":\"浙江\",,\"city\":\"杭州\"}" } ``` ## 响应参数 ### 业务响应参数 | 参数字段 | 参数属性 | 参数说明 | |------|------|-------| | code | M | 结果状态码 | | msg | M | 返回结果 | ### 响应示例 ```json { "accId": "2022110717083010293542", "bizContent": "{\"code\":200,\"msg\":\"SUCCESS\"}", "clientId": "2022110717083010293", "sign": "5A3ED75E7C8B51D72D497101C4D15F259CE7949C8B90DECD15F345575FB1269C", "signType": "SHA256" } ``` --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/services/blackWhiteList/batchDelete/index.md description: >- 批量删除黑/白名单API允许用户通过指定subjectType(White/Black)及blackWhiteIds数组来移除特定的黑白名单条目。该接口位于services模块下,路径为/notes/zh/services/blackWhiteList/batchDelete/。请求需使用POST方 --- # 批量删除黑/白名单 ## 请求地址 ```bash POST https://sandbox-acquirer-payment.pingpongx.com/merchant/acquirer/blackWhiteList/api/v4/batchDelete ``` ```bash POST https://acquirer-payment.pingpongx.com/merchant/acquirer/blackWhiteList/api/v4/batchDelete ``` ## 请求参数 ### 业务参数 | 字段名 | 是否必填 | 字段类型 | 字段描述 | |---------------|------|--------|-------------| | subjectType | M | String | White/Black | | blackWhiteIds | M | Array | 查询获取的ID集合 | ### 请求示例 ```json { "sign": "AF7BA0AA2F37B29A37AA6EFE217E78073DF31B9FBD210015CC55CA4B14229770", "signType": "SHA256", "clientId": "2022110717083010293", "accId": "2022110717083010293542", "bizContent": "{\"subjectType\":\"Black\",\"blackWhiteIds\":[2197,2199]}" } ``` ## 响应参数 ### 业务响应参数 | 参数字段 | 参数属性 | 参数说明 | |------|------|--------------------| | code | M | 返回状态码,示例值:200 | | msg | M | 返回结果,示例值:SUCCESS | | data | M | 删除成功/失败,true/false | ### 响应示例 ```json { "accId": "2022110717083010293542", "bizContent": "{\"code\":200,\"data\":true,\"msg\":\"SUCCESS\"}", "clientId": "2022110717083010293", "sign": "7214AD954935C7F70A0E30FCAF65E9F9353908FC0AD91932C6A959F27874DC47", "signType": "SHA256" } ``` --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/services/blackWhiteList/queryPage/index.md description: >- 分页查询黑/白名单API允许用户根据指定条件查询黑名单或白名单中的条目。支持通过邮箱、邮箱域名、卡号、手机号及收货地址街道等多种维度进行筛选,并可设置状态和分页参数以获取所需数据。适用于需要精细化管理交易安全性的场景。 --- # 分页查询黑/白名单 ## 请求地址 ```bash POST https://sandbox-acquirer-payment.pingpongx.com/merchant/acquirer/blackWhiteList/api/v4/queryPage ``` ```bash POST https://acquirer-payment.pingpongx.com/merchant/acquirer/blackWhiteList/api/v4/queryPage ``` ## 请求参数 ### 业务参数 | 字段名 | 是否必填 | 字段类型 | 字段描述 | |--------------|------|---------|----------------------------------------------------------------------------------------------------------------------------------| | subjectType | M | String | White/Black | | dataType | O | String | 维度,枚举值:Email-邮箱Email\_Domain-邮箱域名Card\_No-卡号Phone-手机号Shipping\_Address-收货地址街道 | | dataValue | O | String | 数据 | | reviewStatus | O | String | 状态 | | pageIndex | M | Integer | 页数 | | pageSize | M | Integer | 每页条数 | ### 请求示例 ```json { "sign": "8620BF9DD3D197F77BD822E25A51C390D76A6E138A1E3A70D523DFDB73166DF8", "signType": "SHA256", "blackWhiteApiVO": { "dataType": "Phone", "dataValue": "18888887777", "subjectType": "Black", "pageIndex": "1", "pageSize": "30", "clientId": "2022110717083010293" } } ``` ## 响应参数 ### 业务响应参数 ### 响应示例 ```json { "code": 200, "data": [ { "accId": "2022110717083010293542", "city": "", "country": "", "created": 1697598667000, "dataType": "Phone", "dataValue": "18888887777", "groupId": "202211071708301029301", "groupName": "DEFAULT", "id": 2221, "modified": 1697598667000, "operator": "api_admin", "rejectReason": "", "reviewStatus": "Effective", "state": "", "storeName": "www.chenxuan.com", "storeUrl": "www.chenxuan.com" }, { "accId": "2022110717083010293546", "city": "", "country": "", "created": 1697598667000, "dataType": "Phone", "dataValue": "18888887777", "groupId": "202211071708301029301", "groupName": "DEFAULT", "id": 2222, "modified": 1697598667000, "operator": "api_admin", "rejectReason": "", "reviewStatus": "Effective", "state": "", "storeName": "xxx.com", "storeUrl": "www.xxx.com" } ], "msg": "SUCCESS", "total": 2 } ``` --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/services/buildingTools/funPinPin/index.md description: >- FunPinPin与PingPongCheckout配置文档,用于指导用户在店铺管理后台设置中绑定并激活PingPong支付。适用于需要为在线商店添加信用卡收款功能的商户。通过填写账号信息和支持的信用卡类型,点击激活按钮完成设置,支持全球主要信用卡,确保交易安全便捷。 --- # FunPinPin\&PingPongCheckout配置 绑定路径:【店铺管理后台】-【设置】-【收款设置】- 【信用卡收款】选择PingPong 支付 选择PingPong 支付后,进入绑定页面,填入对应账号信息,选择支持的信用卡,点右下角激活按钮,即可激活成功。 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/services/buildingTools/huaweiyun/index.md description: >- Huawei Cloud API文档介绍了华为云服务的关键功能和参数,适用于开发者集成云计算、存储及网络资源。提供详尽的API调用示例与错误码说明,帮助用户快速上手并高效利用华为云平台的各项服务。 --- # huaweiyun --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/services/buildingTools/leadongshop/index.md description: >- 领动·领售与PingPongCheckout集成配置指南,用于实现全球多币种在线支付。适用于跨境电商平台,支持多种支付方式如信用卡、本地支付等,并提供安全的交易环境和便捷的结算服务。关键参数包括商户ID、密钥及支付接口设置。 --- # 领动·领售&PingPongCheckout配置 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/services/buildingTools/shopify/index.md description: >- Shopify集成指南,用于将PingPongCheckout支付解决方案嵌入到Shopify商店中。支持全球多个地区,提供安全便捷的支付处理服务。关键特性包括多币种结算、快速接入及高度定制化选项。 --- # shopify --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/services/buildingTools/shoplus/index.md description: >- Shoplus PingPongPay配置文档介绍了如何在Shoplus平台中设置PingPongPay作为信用卡收款方式。适用于需要集成国际支付解决方案的商家,覆盖全球主要市场。关键步骤包括进入支付设置、选择并激活PingPongPay,输入必要参数如ClientID、AccId和Salt,并启用 --- # Shoplus PingPongPay配置文档 PingPongPay路径:设置-支付设置-信用卡收款-PingPongPay(Direct) 1、首页选择“设置”,进入设置界面,再选择“支付设置”,进入支付设置列表。 2、支付设置列表第一项则为“信用卡收款”,点击“新增收款方式”,进入信用卡收款列表,可以找到“PingPongPay”。 3、PingPongPay激活:点击对应的激活按钮,输入ClientID、AccId、Salt后点击确认。 4、完成配置后,需要点击启用,若当前已启用其他信用卡收款方式,则需先停止使用已经开启的收款方式,再启用PingPangPay。 5、再回到设置列表确认信用卡收款是否已经开启,若未开启,需要点击开启,即可完成配置。 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/services/buildingTools/xorder/index.md description: >- 该文档介绍Xorder与PingPongCheckout的配置流程,包括登录xorder商户后台、设置PingPong支付渠道及国内商户接入的具体步骤。适用于需要集成PingPong支付解决方案的中国地区商户,确保顺畅完成支付功能的配置与使用。 --- # Xorder&PingPongCheckout配置 1、登录xorder 商户后台配置 2、PingPong支付渠道配置 3、国内商户渠道接入配置 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/services/checkout/apm/apmList/index.md description: >- 本地支付支持列表提供了中国和韩国的多种本地支付方式及其交易币种。在中国支持支付宝和微信支付,覆盖多种国际货币;韩国则列出了包括KBCard、HANACard等在内的广泛银行和信用卡选项。此信息帮助商家了解并选择适合的支付方式以满足不同地区客户的需求。 --- # 本地支付支持列表 ### 中国 | 支付方式 | 交易币种 | 最小金额(INR) | 备注 | |:-------|:----------------------------------|:----------|:----| | Alipay | AUD, CAD, EUR, GBP, HKD, SGD, USD ||| | WeChat | CNY,EUR,GBP ||| ### 韩国 | 支付方式 | 交易币种 | 最小金额(INR) | 备注 | |:-----------------|:-----|:----------|:----| | KBCard | | | | | HANACard | | | | | SAMSUNGCard | | | | | SHINHANCard | | | | | HYUNDAICard | | | | | LOTTECard | | | | | NONGHYUPCard | | | | | HANACard | | | | | CITYCard | | | | | WOORICard | | | | | SUHYUPCard | | | | | JEJUCard | | | | | JEONBUKCard | | | | | KWANGJUCard | | | | | KAKAOBank | | | | | KBank | | | | | MireaAssetDaewoo | | | | | KonaCard | | | | | IBK | | | | | SC | | | | | Suhyup | | | | | Shinhan | | | | | KB Kookmin | | | | | KEB Hana | | | | | Woori | | | | | Busan | | | | | Koreapost | | | | | Gwangju | | | | | Citi | | | | | KDB | | | | | Kyongnam | | | | | Daegu | | | | | Sinhyup | | | | | KFCC | | | | | Jeonbuk | | | | | Jeju | | | | | NCFC | | | | | Miraeasset | | | | | Shinhaninvest | | | | | HMC | | | | | Hanhwa | | | | | Samsung | | | | | Tongyang | | | | | SK | | | | | Daewoo | | | | | Hyundai | | | | | Wooriinvest | | | | | Daishin | | | | | Dongbu | | | | | Hanadaetoo | | | | | Koreaninvest | | | | | Hiinvest | | | | | Meritz | | | | | Shinyoung | | | | | Eugeneinvest | | | | | Kakaopay | | | | | TOSS | | | | | PAYCO | | | | ### 印度 | 支付方式 | 交易币种 | 最小金额(INR) | 备注 | |:-----|:-----|:----------|:----| | UPI || ### 泰国 | 支付方式 | 交易币种 | 最小金额(INR) | 备注 | |:---------------------|:-----|:----------|:----| | BangKok Bank | THB ||| | Krung Tha Bank | THB ||| | Krungsri | THB ||| | Siam Commercial Bank | THB ||| | Tesco Lotus | THB ||| ### 新加坡 | 支付方式 | 交易币种 | 最小金额(INR) | 备注 | |:---------------------|:-----|:----------|:----| | eNETS | SGD ||| | GrabPay | SGD ||| ### 印度尼西亚 | 支付方式 | 交易币种 | 最小金额(INR) | 备注 | |:-----|:-----|:----------|:----| | Doku | IDR ||| ### 巴西 | 支付方式 | 交易币种 | 最小金额(INR) | 备注 | |:--------------|:-----|:----------|:----| | Itau | BRL | | | | Bradesco | BRL | | | | Banco Brasil | BRL | | | | Caixa | BRL | | | | Santander | BRL | | | | boleto | BRL | | | | PIX | BRL | | | | Bank Transfer | BRL | | | ### 墨西哥 | 支付方式 | 交易币种 | 最小金额(INR) | 备注 | |:--------------|:-----|:----------|:----| | OXXO | MXN | | | | SPEI | MXN | | | | Bank Transfer | MXN | | | | BBVA Bancomer | MXN | | | | Banorte | MXN | | | | Santander | MXN | | | ### 智利 | 支付方式 | 交易币种 | 最小金额(INR) | 备注 | |:-----------|:-----|:----------|:----| | Multicaja | CLP | | | | Sencillito | CLP | | | | ServiPag | CLP | | | | WebPay | CLP | | | ### 阿根廷 | 支付方式 | 交易币种 | 最小金额(INR) | 备注 | |:-----------|:-----|:----------|:----| | Pago Fácil | ARS | | | | Rapi Pago | ARS | | | ### 哥伦比亚 | 支付方式 | 交易币种 | 最小金额(INR) | 备注 | |:---------|:-----|:----------|:----| | ServiPag | COP | | | | PSE | COP | | | ### 巴西 | 支付方式 | 交易币种 | 最小金额(INR) | 备注 | |:-----------|:-----|:----------|:----| | ServiPag | COP | | | ### 菲律宾 | 支付方式 | 交易币种 | 最小金额(INR) | 备注 | |:----------|:-----|:----------|:----| | Dragonpay | COP | | | ## 欧洲 ### 奥地利(AT) | 支付方式 | 交易币种 | 最小金额(INR) | 备注 | |:-----------------|:-----|:----------|:----| | Trustly | EUR | | | | Klarna Pay later | EUR | | | ### 丹麦 | 支付方式 | 交易币种 | 最小金额(INR) | 备注 | |:-----------------|:--------|:----------|:----| | Trustly | EUR/DKK | | | | Klarna Pay later | DKK | | | ### 爱沙尼亚(EE) | 支付方式 | 交易币种 | 最小金额(INR) | 备注 | |:--------|:-------|:----------|:----| | Trustly | EUR | | | | Paysera | EUR | | | ### 芬兰(FI) | 支付方式 | 交易币种 | 最小金额(INR) | 备注 | |:-----------------|:-----|:----------|:----| | Trustly | EUR | | | | Klarna Pay later | EUR | | | ### 俄罗斯(RU) | 支付方式 | 交易币种 | 最小金额(INR) | 备注 | |:--------|:-----|:----------|:----| | Paysera | EUR | | | ### 德国(DE) | 支付方式 | 交易币种 | 最小金额(INR) | 备注 | |:-----------------|:-----|:----------|:----| | Trustly | EUR | | | | Klarna Pay later | EUR | | | ### 拉脱维亚(LV) | 支付方式 | 交易币种 | 最小金额(INR) | 备注 | |:--------|:-----|:----------|:----| | Trustly | EUR | | | | Paysera | EUR | | | ### 立陶宛(LT) | 支付方式 | 交易币种 | 最小金额(INR) | 备注 | |:--------|:-----|:----------|:----| | Trustly | EUR | | | | Paysera | EUR | | | ### 荷兰(NL) | 支付方式 | 交易币种 | 最小金额(INR) | 备注 | |:--------|:-----|:----------|:----| | Trustly | EUR | | | | Klarna Pay later | EUR | | | ### 挪威(NO) | 支付方式 | 交易币种 | 最小金额(INR) | 备注 | |:-----------------|:--------|:----------|:----| | Trustly | EUR/NOK | | | | Klarna Pay later | EUR | | | ### 波兰(PL) | 支付方式 | 交易币种 | 最小金额(INR) | 备注 | |:--------|:--------|:----------|:----| | Trustly | EUR/PLN | | | | BLIK | PLN | | | ### 瑞典(SE) | 支付方式 | 交易币种 | 最小金额(INR) | 备注 | |:--------|:-----|:----------|:----| | Trustly | EUR | | | ### 英国 | 支付方式 | 交易币种 | 最小金额(INR) | 备注 | |:--------|:-----|:----------|:----| | Trustly | GBP | | | --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/services/checkout/hosted/hosted/index.md description: >- Hosted模式提供了一种将PingPongCheckout收银台嵌入商户网站的解决方案。适用于需要快速集成支付功能的场景,支持JS-SDK初始化和重定向两种方式渲染收银台。主要流程包括订单提交、收银台初始化、买家支付信息填写及确认等步骤。此外,还提供了3DS验证选项以增强交易安全性。 --- # Hosted ## Hosted支持的收银台渲染方式 ## Hosted模式系统交互流程 ```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' } }}%% sequenceDiagram participant Client as 💻 客户端 participant Merchant as 🏪 商户服务端 participant PP as 🔄 PingPong服务端 participant Checkout as 🛒 PingPong收银台 participant Bank as 🏦 发卡行 Note over Client, Bank: 🛒 Hosted收银台交互流程 Note over Client, Merchant: 📦 订单提交阶段:• 用户购物车结算• 选择支付方式 Client->>+Merchant: 1️⃣ 客户端提交订单 Note right of Merchant: 订单信息:• 商品详情• 金额币种• 收货地址 Merchant->>+PP: 2️⃣ 请求创建收银台会话 Note right of PP: API调用:• 下单接口• 收银台配置• 回调URLs PP->>PP: 3️⃣ 生成收银台会话 Note right of PP: • 验证商户信息• 生成会话token• 准备收银台要素 PP-->>-Merchant: 返回收银台构建要素 Note right of Merchant: 响应包含:• paymentUrl• sessionToken• 配置参数 Merchant-->>-Client: 收银台访问信息 alt 🔗 [Hosted-Redirect模式] Note over Client, Checkout: 🔄 重定向到收银台 Client->>+Checkout: 4️⃣ 跳转到paymentUrl Checkout->>+PP: 5️⃣ 初始化收银台会话 PP-->>-Checkout: 返回收银台配置和支付方式 Checkout-->>-Client: 渲染PingPong收银台界面 else 📦 [Hosted-JS-SDK模式] Note over Client, Checkout: 📱 内嵌收银台初始化 Client->>+Client: 4️⃣ 初始化Hosted-JS-SDK Client->>+PP: 5️⃣ SDK与服务端交互 PP-->>-Client: 返回收银台配置 Client-->>Client: 渲染内嵌收银台组件 end Note over Client, Bank: 💳 支付处理阶段 Client->>+Checkout: 6️⃣ 买家填写支付信息 Note right of Checkout: 用户输入:• 卡号、CVV• 账单地址• 其他必要信息 Checkout->>+PP: 7️⃣ 持卡人确认支付 Note right of PP: 支付请求:• 支付方式验证• 风控检查• 路由选择 PP->>PP: 处理支付请求 Note right of PP: • PCI合规处理• 风险评估• 3DS决策 alt 🟢 [无需3D验证] PP->>PP: 直接处理支付 PP-->>Checkout: 🎉 支付结果 Checkout-->>-Client: 展示交易结果页面 else 🔐 [需要3D验证] PP->>+Bank: 8️⃣ 发起3D验证 Note right of Bank: 3D Secure流程:• 挑战验证• OTP/生物识别 Bank->>Client: 重定向到3D验证页面 Client->>+Bank: 用户完成3D验证 Bank->>Bank: 验证3D信息 Bank-->>-PP: 返回3D验证结果 PP->>PP: 处理3D验证结果 PP-->>Checkout: 最终支付结果 Checkout-->>-Client: 展示交易结果页面 end Note over Merchant, PP: 📡 结果通知阶段 PP->>+Merchant: 9️⃣ 异步通知支付结果 Note right of Merchant: Webhook通知:• 最终支付状态• 交易详情• 签名验证 Merchant->>Merchant: 处理订单状态 Note right of Merchant: • 订单状态更新• 业务逻辑处理• 用户通知 Merchant-->>-PP: 10 HTTP 200响应确认 Note right of PP: 确认商户已接收异步通知 Note over Client, Bank: 🎯 Hosted收银台流程完成 ``` :::: steps 1. 步骤 1 客户端提交订单给商户服务端处理 2. 步骤 2 商户服务端请求PingPongCheckout服务端,提交订单信息和其他必要参数 3. 步骤 3 PingPongCheckout服务端响应收银台构建要素 4. 步骤 4 客户端初始化收银台 * Hosted-JS-SDK:初始化SDK * Hosted-Redirect:跳转到PaymentUrl 5. 步骤 5 收银台与PingPongCheckout服务端交互,成功之后将会渲染PingPongCheckout收银台 6. 步骤 6 买家填写卡号和cvv等支付信息,提交支付信息 7. 步骤 7 持卡人确认支付 8. 步骤 8 如果是3D交易,还需要3D验证,否则直接展示交易结果 9. 步骤 9 如何获取异步通知报文详见[异步通知](/pages/d4421e/) 10. 步骤 10 收到异步通知需要响应`http code200`给PingPongCheckout :::: ## 订单状态处理 ::: note 建议 payResultUrl 依据异步通知/订单查询返回的 status 进行处理, 订单状态流程图 ::: ## API清单 ## 服务端接入 持卡人客户端在请求商户服务端下单之后,需要提交必要参数给PingPongCheckout服务端进行下单。 详见 下单接口 ## 客户端接入 服务端请求下单接口响应成功后,可以在客户端渲染Hosted接入模式的收银台页面。 ## 3DS 收银台模式下,商户可以在调用下单接口的时候,通过上送3DS参数executeThreeD来控制是强制进行3DS校验,还是交由PingPongCheckOut的风控决策决定是否要进行3DS校验。 详见 3DS集成指南 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/services/checkout/hosted/sdk/index.md description: >- 通过JS-SDK嵌入PingPongCheckout收银台,适用于需要在网页中集成支付功能的场景。支持自定义主题色和多语言配置。主要参数包括innerJsUrl和token,用于加载和初始化SDK。创建支付时需传入订单对象,并设置mode为sandbox或production。收银台支持48小时内重 --- # Hosted-通过JS-SDK嵌入收银台 ## 渲染收银台 从下单中取到下列关键响应参数 | 参数名称 | 描述 | |:-----------|:--------------| | innerJsUrl | JS-SDK的加载地址 | | token | 初始化SDK时,需要的参数 | ### 引入JS-SDK PingPongCheckout 提供两种方式来引入SDK * 提前引入JS,复制以下代码,通过CDN地址引入PingPongCheckout JS-SDK ```javascript ``` * 在下单完成之后,使用innerJsUrl字段的值引入 #### SDK-config示意图 ::: note 在上图中,您可以对字体样式、间距等进行更细致的配置。然而,如果您只想更改主题色,请使用以下参数: * themeColor:收银台的主题色,将应用于加载动画、字体、按钮、表单聚焦后边框颜色等。 * themeLightColor:收银台的浅色主题色,将应用于部分阴影、浅背景色等。 如果您不传递这些参数,则默认使用 Pingpong 主题色。 ::: #### JS-SDK收银台语种支持 ::: note 在SDK`lang`参数中配置,默认英语 更多语言详见Locale ::: #### 初始化SDK示例代码 客户端点击下单按钮,提交订单之后,从服务端获取订单相关参数(order 对象),在初始化PingPongCheckout JS-SDK之后,传入order对象 到createPayment方法中,开始和PingPongCheckout交互,成功之后将会渲染出PingPongCheckout收银台 ```javascript window.addEventListener('load', loadHandle); function loadHandle() { const conf = { mode: 'sandbox', //sandbox/production (必填参数) lang: 'en', // 语言,不传默认英语 - de德语 en英语 es西班牙语 fr法语 it意大利语 ru俄语 zh中文 jp日语 root: '#payment-wrap', // PingPong收银台在哪个元素上渲染 须为id (必填) manul: false, // 手动模式。 即:支付按钮需要自己渲染,开启后可使用client.actionPayment()方法调用支付 showPrice: true, // 是否展示价格 bill: true, // 是否显示bill located: true, // 是否显示located(默认为true) menu: true, //是否显示支付方式按钮 base: { width: '100%', // 收银台宽度 height: '800px', // 收银台高度 backgroundColor: '#fff', // 收银台整体背景色 // 顶部价格及币种 priceBgColor: '#fff', // 顶部价格区域背景色 priceFontColor: '#1fa0e8', // 顶部价格字体颜色 priceFontSize: '32px', // 顶部价格字体大小 priceMB: '10px', // 顶部价格区域距底部间距 // 引导标题: “How would you like to pay” showHeaderLabel: true, // 是否显示引导标题 headerMB: '24px', // 引导标题距底部间距 headerSize: '20px', // 引导标题字体大小 headerColor: 'rgba(0, 0, 0, 0.85)', // 引导标题字体颜色 headerfontWeight: 700, // 引导标题加粗 // 支付方式 payMethodsWidth: '240px', // 支付方式按钮宽度 payMethodsHeight: '48px', // 支付方式按钮高度 payMethodsColor: 'rgba(0, 0, 0, 0.85)', // 支付方式按钮字体颜色 payMethodsActiveColor: '#1fa0e8', // 支付方式按钮点击后字体颜色 payMethodsFontsize: '14px', // 支付方式按钮字体大小 payMethodsActiveBorderColor: '#1fa0e8', // 支付方式按钮点击后边框颜色 payMethodsActiveBorderShadow: '0 2px 8px 0 rgb(31 160 232 / 20%)', // 支付方式按钮点击后阴影 showIcons: true, // 是否显示卡图标 showHeaderAmount: true, // 是否显示头部支付金额 // 表单相关 formItemMargin: '16px', // 表单距底部间距 formItemBorderColor: 'rgba(0, 0, 0, 0.08)', // 表单边框颜色 formItemFocusColor: '#1fa0e8', // 表单聚焦时提示文案和边框颜色 // 支付按钮 btnSize: '100%', // 按钮宽度百分比或者px btnColor: '#fff', // 按钮字体颜色 btnFontSize: '14px', // 按钮字体大小 btnMarginTop: '10px', // button 距顶部距离 btnMarginBottom: "24px", // button 距底部距离 btnBackgroundColor: '#1fa0e8', // 按钮背景色 btnBorderRadius: '8px', // 按钮圆角 btnBorderColor: '#1fa0e8', // 可单独配置btn边框颜色覆盖btnBorder中设置的颜色 } } let client = new ppPay(conf); // 在这里传入 从接口中获取到的token let token ="EU:Dt10Deb05qeI0HFWg0DU1NPcLE-dxCDiU40wyKBxHw1w1RDULBtXXtI2dsgSX8L7"; //使用此方法将会创建收银台 client.createPayment(token); // manul 模式 使用此方法将不会出现支付按钮,支付时机将会取决于持卡人的调用 // client.actionPayment(callback) } ``` ::: danger 1. 参数mode必须正确填写,开发测试填sandbox,上线之后使用production,上线前请检查参数mode; 2. 收银台不支持禁用cookies。 ::: ### 完成付款 正确如上设置之后,应正常渲染出收银台,正确输入卡号,过期时间和CVV信息,即可完成交易。 沙箱模式下的收银台如下所示 ## 重新支付 收银台若未支付成功,可以手动打开URL再次发起支付,一个收银台URL有效是时长为48小时 --- --- url: 'https://acquirer-api-docs-v4.pingpongx.com/notes/zh/start/acceptance/index.md' description: >- 验收测试场景文档详细列出了收单验收的关键注意事项,包括沙箱环境特性、幂等性处理要求及信用卡3D验证测试方法。适用于准备上线前的最终测试阶段,确保支付流程安全可靠。 --- # 验收标准 ## 收单验收注意事项 ::: danger 注意 1. 沙箱环境不会校验参数是否已经传送。 2. 请务必完成对于支付场景验收后再进行线上交易。 3. 确认对于订单幂等特性(失败非终态/失败终态)已了解,并且对不同幂等下 processing/failed 的订单有不同的处理方式! 4. S2S模式下,需要根据对应的业务场景接入对应的风控插件。 5. 信用卡支付需要完成 3D 场景测试,测试参数为订单金额设置 3USD,email为 3ds@pingpongx.com,测试信用卡信息可以咨询对应技术支持人员。\ ::: ## 获取测试报告填写模板 获取PingPongCheckout 商户接入技术测试报告模板 ## 具体验收场景 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/start/limitSandbox/index.md description: >- 沙箱环境为开发者提供了一个安全低门槛的测试平台,支持大部分核心链路和对接逻辑。但请注意,沙箱非100%保真生产环境,存在功能限制,如部分支付方式无法完全测试或仅能模拟成功状态。此外,沙箱与生产环境数据隔离,切勿混淆使用。 --- # 沙箱约束限制说明 ## 沙箱约束限制说明 沙箱环境是 PingPong 为开发者提供的安全低门槛的测试环境。沙箱为开放的产品提供 有限功能范围 的支持,可以覆盖产品的绝大部分核心链路和对接逻辑,便于开发者开发和调试。所以在使用过程中,会存在一些功能限制约束。 * 非100%保真:需意识到沙箱环境并非 100% 与生产环境一致,接口的实际响应逻辑请以生产环境为准,沙箱环境开发调试完成后,仍然需要在生产环境进行测试验收。 * 数据隔离,勿混淆:沙箱环境拥有完全独立的数据体系,沙箱环境下返回的数据(例如订单号)仅限于沙箱环境使用,开发者不可将沙箱环境返回的数据与生产环境中的数据混淆。 * 功能有限:不是所有支付方式都能测试成功场景,比如 Mybank,NeverPay;还有部分支付方式mock调用会跳转渠道挡板页面,比如 Trustly,Bancontact,Boost等,可以模拟成功状态。 ::: note 备注 沙箱模拟环境用于开发者进行接口开发、调试,为保障沙箱环境服务稳定性,请您不要随意进行压力测试及安全攻击。如需,请先联系PP工作人员进行报备申请,否则PP运维及安全团队有权禁用异常应用或IP的请求来保障服务稳定性。 ::: --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/start/registerSandbox/index.md description: >- 沙箱准入说明提供了进入PingPong支付系统测试环境的步骤。适用于开发人员在正式上线前进行功能测试和集成调试。流程包括通过指定网站注册账号,选择商户类型并提交信息,以及获取必要的测试参数如accId、clientId和salt。确保所有准备工作完成后,联系技术支持以配置环境。 --- # 沙箱准入说明 ## 沙箱准入说明 1. 网站地址:`https://sandbox-checkout.pingpongx.com/`,未注册过需要点击右上角注册按钮进入注册页面,如下图: 2. 类型选择独立商户或者机构都可以,填写完信息之后,点击"注册"即可。 ::: note 提示 如果获取不到验证码,可以检查一下手机号是否准确,或者可以联系技术支持核实。 ::: 3. 注册完成之后需要提供登录账号给到pp技术支持,技术支持同学配置完成之后,会提供测试所需的 accId,clientId(去除accId后三位),salt参数。至此,前期沙箱环境的准备工作已完成。 --- --- url: 'https://acquirer-api-docs-v4.pingpongx.com/notes/zh/start/step/index.md' description: >- 准备工作文档介绍了使用PingPongCheckout前的必要步骤,包括获取沙箱账户、确定对接方案、API授权配置及生产环境验证。覆盖了从测试到正式上线的全流程,适用于希望集成支付解决方案的开发者。 --- # 准备工作 在开始开发使用PingPongCheckout产品和解决方案之前,请先熟悉我们的最新文档,包括开发人员指南、API参考、代码示例等。对接过程都是在对接群内进行沟通。 ### 沙箱账户开通 开始对接之前,需要先获取一个沙箱账户用于接口测试,为了方便对接,我们会提供一个公用的沙箱账户进行测试。当然,您这边也可以选择自己登录到PingPong的 沙箱商户后台 注册获取一个新的沙箱账户。 ::: note 备注 如果是商户自己注册的沙箱账户,需要提供账户信息给到PingPong的技术支持做一些配置之后才可以使用。 ::: ### 确定对接方案 在对接之前需要先确定您的对接方案,我们提供了多种方式集成我们的API接口。这些范围从使用预构建的集成,到构建您的收银台界面以完全控制您的结账体验。我们建议您根据您的需求和能力做出选择。比如说Hosted模式,提供了JS SDK渲染收银台和托管付款界面两种模式,如果是Non-Hosted模式则需要先提供PCI证书,并且要求您这边具备独立开发收银台的能力。 ### API授权和配置 沙箱测试完成之后,需要联系PingPong的技术支持进行API授权和配置,在未完成授权之前,生产账号都是不可用的。API授权完成之后,可以登录到商户后台获取accId和秘钥,并替换掉所有沙箱环境的配置。 ### 生产环境对接 在沙箱环境测试完成之后将进入网站资料审查和进入生产前必要的账户配置阶段,通过之后,会发放生产环境参数。 获取到生产环境参数之后,请完成以下事项: ### 生产环境验证 1. 发送截图和商品链接,并通知技术支持,将由客户/技术支持对该商品链接发起真实交易测试,以验证结果; 2. 完成真实交易测试之后,需要商户发起退款,以便于验证退款流程; 3. 完成以上流程,网站对接结束,支付通道正式上线,支付可用。 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/technicalterm/accId/index.md description: >- accId是PingPong商户店铺号,作为商户在PingPongCheckout平台上的唯一标识。完成PingPong商户注册后可获取该标识,已注册用户可登录商户后台查看。 --- # accId ## accId的含义 accId是PingPong 商户店铺号,商户店铺在PingPongCheckout的唯一标识 ## accId的获取 需要完成pingPong的商户注册之后才可以获取,可以参考注册流程。 已完成注册的可以直接登陆到商户后台进行获取,获取位置见如下截图: --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/technicalterm/Authorization/index.md description: >- Authorization(预授权)是信用卡支付处理的第一步,用于验证信用卡有效性并暂时冻结账户中一定金额。适用于电子商务、应用内及销售点支付场景。通过API调用实现,关键步骤包括交易发起、发送授权请求至发卡行、处理请求和返回授权响应。预授权有效期通常为7天,过期自动VOID。 --- # Authorization 国际信用卡支付中的`Authorization`(预授权)是一个非常重要的环节,它是信用卡交易处理过程中的第一步。发卡机构(如 Visa 或 Mastercard)验证支付细节并保留资金以便以后获取的过程。 在电子商务、应用内支付和销售点支付中,授权是通过对支付网关进行API调用来实现的。网关和支付处理器随后进行必要的验证和风险检查,并请求相应的卡网络从发行方授权支付到收单方。 当支付已经被授权但尚未被捕获时,商家也可以因某些原因(如高风险的欺诈)决定取消它。 ::: danger 注意 授权只在有限的时间(一般为7天)内有效。如果授权的支付没有被捕获或取消,一旦错过预定的截止日期,它将过期,并且将会自动`VOID`。 ::: ## 预授权的主要目的: * * 验证信用卡:确保信用卡是有效的并且没有被报失或盗。 * 保留资金:暂时冻结账户中的一定金额,以确保未来的支付。 ## 授权过程的主要步骤包括: 1. **交易发起**: * 当持卡人在商家处进行信用卡支付时,商家会收集持卡人的信用卡信息,包括卡号、有效期、CVV等。 2. **发送授权请求**: * 收集到的信用卡信息将通过商家的支付网关发送到支付处理网络。具体表现为请求下单接口或者下单并支付时候`captureDelayHours`的取值: |captureDelayHours| 备注 | |-----------------|----------------------------------| |`0`| 下单之后立即自动capture,无需手动调用CAPTURE-预授权权确认 | |`1`| 手动capture,成功之后还需要调用下CAPTURE-预授权权确认,本地支付不支持 | * 支付处理网络将请求转发给发卡银行进行验证。 3. **发卡行处理请求**: * 发卡银行会检查卡片的有效性、账户余额或信用额度、以及交易的合法性。 * 如果一切正常,发卡银行会批准这笔交易,并返回一个授权码;如果有问题,则会拒绝授权。 4. **授权响应**: * 授权的结果(批准或拒绝)将被发送回支付网关,然后传递给商家。 * 如果授权被批准,商家可以继续进行交易。 ## API列表 * CAPTURE-预授权权确认 * VOID-预授权撤销 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/technicalterm/Capture/index.md description: >- Capture(捕获)指将已授权的资金从购物者账户正式转移到商家账户。默认情况下,支付授权后立即自动完成捕获。许多支付方式支持分开的授权和捕获,允许设置捕获延时、手动捕获或部分捕获,并可取消授权。捕获与取消、退款一起归类为修改支付状态的操作。 --- # Capture Capture(捕获)是指将预留的资金从购物者转移到商家的行为,商家从客户的银行账户中正式扣除(即收取)这笔已授权资金。 默认情况下,支付在授权后立即自动捕获。 许多支付方式支持分开的授权和捕获。这意味着你可以设置捕获延时;手动捕获支付(使用API调用),执行部分捕获;或取消授权。 捕获、取消和退款一起被称为修改支付,因为它们修改了已授权支付请求的状态。 ## API列表 * CAPTURE-预授权权确认 * VOID-预授权撤销 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/technicalterm/cardHolder/index.md description: >- 持卡人指使用银行发行的卡进行无现金支付的购物者。该术语适用于描述在各类支付场景中,通过银行卡完成交易的个人或企业用户。理解此概念有助于更好地设计和优化支付流程及相关服务。 --- # 持卡人 ## CardHolder 指的是使用银行发行的卡进行无现金支付的购物者 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/technicalterm/CardNetworks/index.md description: >- 支付网络定义了卡片发行与交易处理的标准,确保发卡方和收单方在同一系统内运作。全球主要的支付网络如Visa、Mastercard、American Express及银联等,不仅提供必要的技术支持,还决定了包括互换费在内的各种交易成本。 --- # Card networks (or Card schemes) ## 支付网络 支付网络设定规则并提供发行卡片和处理卡片支付的基础设施。要完成支付,发卡方和收单方必须是同一网络的成员。一些知名的卡网络包括Visa、Mastercard、American Express和银联。 卡组织收取处理支付的费用,并且还规定了互换费的价值,这取决于每笔特定支付的多个因素。 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/technicalterm/CardNumber/index.md description: >- CardNumber(PAN)是指支付卡上的唯一号码,用于识别每张卡并在交易中引用。前六位或八位数字构成银行识别号(BIN),帮助识别发卡机构。卡片还可能包含安全码以支持非现场交易的安全性。 --- # CardNumber(PAN) ## 支付卡 每张支付卡(无论是借记卡、信用卡、礼品卡还是类似的卡)都有一个独特的号码与之关联。这个号码通常印在卡上,用于唯一识别这张卡,并在每笔交易中引用。 整个卡号被称为主账号(Primary Account Number,简称PAN),它的前六位或八位数字也被称为银行识别号(Bank Identification Number,简称BIN)。 此外,卡片可能包含一个卡安全码,该安全码与卡号一起可以用于非现场交易(即卡不在场的交易)。 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/technicalterm/CardOnFile/index.md description: >- CardOnFile (CoF) 是一种将卡片详情存储以简化回头客结账过程的技术,适用于一键支付、按使用付费服务或不固定时间表的定期支付。若商家符合PCI 1级/2级合规性,则可自行存储卡片信息。 --- # CardOnFile (CoF) ## CoF 当卡片详情被存储以简化回头客的结账过程时,这可以用于一键支付、按使用付费服务或任何不遵循固定时间表的定期支付。 定期发生在固定时间表上的支付被称为订阅。 如果商家符合PCI的1级/2级合规性,他们可以自行存储卡片详情。 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/technicalterm/Cards/index.md description: >- Cards是由银行发行的塑料卡,用于实现无现金支付。包括借记卡、信用卡和预付卡,通过卡号、安全码等信息进行交易验证。卡片广泛应用于销售点、电子商务网站及移动应用内支付,并可与电子钱包关联,支持取现和线上支付。 --- # Cards ## Cards 由购物者银行发行的塑料卡,用于在销售点、通过电子商务网站或在移动应用程序内实现无现金支付。卡片可能是借记卡、信用卡或预付卡,通常由卡组织操作。有时卡片可能与电子钱包或其他本地支付方式关联,但最常见的用途是取现或进行无现金支付。 典型的卡片包含一个卡号,用于唯一识别一张卡。它还包含一个安全码,与其他信息(卡片到期日期和持卡人姓名)结合使用,用于验证非现场支付(例如,在电子商务网站或移动应用程序内支付商品或服务时)。 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/technicalterm/chargebacks/index.md description: >- Chargebacks(拒付)是发卡行在争议无法通过初步沟通解决后,将交易金额从商户账户中强制扣除并退还给持卡人的正式交易逆转机制。适用于处理持卡人对交易的异议,涉及争议升级、拒付通知、商户回应和仲裁等步骤。拒付时效为持卡人发起调单拒付180天,商户回复90天。 --- # Chargebacks Chargebacks(拒付)是指在争议无法通过初步沟通解决后,发卡行将交易金额从商户账户中强制扣除,并退还给持卡人。拒付是一种正式的交易逆转机制。 ## Chargebacks的类型 ## Chargebacks的发生流程 * 争议升级:如果争议未能解决,争议升级为拒付。 * 拒付通知:发卡行通过Visa或其他支付网络向收单行发出拒付通知。 * 收单行通知商户:收单行接到拒付通知后,会通知商户,并要求商户提供相关证据以回应拒付。 * 商户回应:商户需要在规定的时间内提供证据,证明交易的合法性和有效性。 * 仲裁:如果商户提供的证据足够强有力,拒付可能会被驳回;否则,拒付成立,商户需承担退款责任。如果双方无法达成一致,争议可能会进入仲裁程序,由支付网络做出最终决定。 ## Chargebacks的步骤 ## Disputes和Chargebacks主要区别 * 阶段: * 争议是拒付的前期阶段,持卡人对交易提出异议。 * 拒付是争议未解决后,发卡行采取的进一步行动,正式逆转交易。 * 处理流程: * 争议处理通常涉及初步的沟通和协商,试图在不进行正式逆转的情况下解决问题。 * 拒付处理更加正式,涉及交易金额的逆转,并且需要遵循支付网络的规定和流程。 * 影响: * 争议阶段的处理相对灵活,可以通过沟通解决,影响较小。 * 拒付对商户的影响较大,不仅涉及资金的逆转,还可能影响商户的信誉和未来的交易处理。 ## 拒付时效 * 持卡人发起调单拒付时效:180天 * 商户收到调单拒付的回复失效:90天 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/technicalterm/clientId/index.md description: >- clientId是PingPong商户在PingPongCheckout的唯一标识。完成PingPong商户注册后,可通过登录商户后台并访问账户中心获取该ID,用于识别和管理商户信息。 --- # clientId ## clientId含义 PingPong 商户商户号,商户在PingPongCheckout的唯一标识 ## clientId如何获取? 需要完成pingPong的商户注册之后才可以获取,可以参考注册流程。 已完成注册的可以直接登陆到商户后台,点击右上角的"账户中心"即可获取,如下图所示: --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/technicalterm/disputes/index.md description: >- 争议是指持卡人对某笔交易提出异议的过程,涉及持卡人、发卡行、收单行和商户之间的沟通与协商。争议处理阶段相对灵活,通过初步沟通解决异议;若未能解决,则可能升级为拒付,导致交易金额逆转并对商户产生较大影响。 --- # Disputes 争议是指持卡人对某笔交易提出异议,认为该交易存在问题。 ## Disputes 流程 * 持卡人提出争议:持卡人联系发卡行,说明对某笔交易的异议。 * 发卡行审核:发卡行审核持卡人的争议请求,决定是否需要进一步处理。 * 与商户沟通:发卡行可能会联系收单行和商户,要求提供交易的相关证据和信息。 * 解决或升级:如果争议能够通过沟通和协商解决,则争议结束;否则,争议可能会升级为拒付(chargeback)。 ## Disputes和Chargebacks主要区别 * 阶段: * 争议是拒付的前期阶段,持卡人对交易提出异议。 * 拒付是争议未解决后,发卡行采取的进一步行动,正式逆转交易。 * 处理流程: * 争议处理通常涉及初步的沟通和协商,试图在不进行正式逆转的情况下解决问题。 * 拒付处理更加正式,涉及交易金额的逆转,并且需要遵循支付网络的规定和流程。 * 影响: * 争议阶段的处理相对灵活,可以通过沟通解决,影响较小。 * 拒付对商户的影响较大,不仅涉及资金的逆转,还可能影响商户的信誉和未来的交易处理。 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/technicalterm/FailureFinalState/index.md description: >- 失败终态是一种交易状态流转模式,在此模式下,支付失败后订单状态为终态,无法再次支付,需更换订单号重新发起。适用于需要严格控制重复支付的场景。主要状态包括SUCCESS、CLOSED、FAILED、PROCESSING和INIT。 --- # 失败终态 ## 交易状态流转模式 PingPongCheckout提供两种交易幂等模式: * 失败非终态(默认) * 失败终态(对接中需要告知PingPongCheckout配置) ## 失败非终态 `失败非终态`是默认设置,在这个模式下: * `FAILED`状态仍可以继续支付,直到订单超过时效关单为止,您可以不更换订单号发起再次支付。 * 小概率发生重复支付,可以做人工退款处理 | 状态 | 描述 | 状态类型 | |:------------------------------------------------------------------|:-----------------------------------------|:-----| | SUCCESS | 已成功支付,交易成功 | 终态 | | CLOSED | 交易因超期/关单导致的结果 | 终态 | | FAILED | 支付失败,用户可以重新支付 | 中间状态 | | PROCESSING | 中间状态,商户应等待 PingPongCheckout 异步结果再进行业务处理。 | 中间状态 | | INIT | 初始化订单 | 中间状态 | ## 失败终态 `失败终态`需要人工配置,在这个模式下: * `FAILED`状态为终态,支付单状态不会再变更,您需要更换订单号发起再次支付。 * `PROCESSING` 再次发起支付请求,会提示交易重复 | 状态 | 描述 | 状态类型 | |:------------------------------------------------------------------|:-----------------------------------------|:-----| | SUCCESS | 已成功支付,交易成功 | 终态 | | CLOSED | 交易因超期/关单导致的结果 | 终态 | | FAILED | 支付失败,用户可以重新支付 | 终态 | | PROCESSING | 中间状态,商户应等待 PingPongCheckout 异步结果再进行业务处理。 | 中间状态 | | INIT | 初始化订单 | 中间状态 | --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/technicalterm/groupId/index.md description: >- groupId是商户后台网站管理中用于标识群组的唯一编号。在群组管理页面,通过创建或选择已有群组并查看详情,可获取群组名称下的groupId。每个群组可以关联多个accId。 --- # groupId ## groupId的含义 商户后台的网站管理中会有群组的概念,一个群组对应一个GroupId,一个群组下面可以挂多个accId。 ## groupId如何获取 1. 从菜单栏选择【网站管理】-【群组管理】进入群组管理页面; 2. 系统默认会给一个默认的群组,商户也可以点击"创建群组"新建群组; 3. 点击"查看详情"即可查看群组的详细信息以及挂在群组下的网站信息,群组名称下面会显示GroupId,点击复制即可获取; --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/technicalterm/networkToken/index.md description: >- 网络令牌化是Visa、Mastercard等提供的服务,用16位数字替代主账号以增强支付安全性。使用网络令牌可提高授权率、减少购物者摩擦,并通过一次性密码保护每笔交易。即使卡片过期或丢失后重新发行,原有令牌仍有效。目前PingPongCheckout暂不支持直接收集网络令牌,但允许使用已有的令牌进行 --- # NetworkToken ## Network Tokenization Visa、Mastercard 等卡网络提供网络令牌化服务。网络令牌是 16 位主帐号 (PAN) 替代方案。 以下是使用网络标志进行支付的好处: 减少购物者的摩擦和拒绝,因为网络令牌由卡网络维护和自动更新。 与没有网络令牌的付款相比,授权率更高。 更好的支付安全性,因为每笔交易都受到一次性使用密码的保护。 因为网络令牌由卡网络管理,所以对关联卡的任何更新都不需要令牌更新。例如,如果卡过期或购物者丢失了卡然后重新发行,您仍然可以使用相同的令牌进行交易。 PingPongCheckout暂未开放收集Network token的功能,您可以选择自行收集和存储。如果您已经从 Visa、Mastercard 等卡网络收集网络令牌,您可以使用它们在 PingPongCheckout 进行支付。 ## 使用NetworkToken支付前提 需要接入下列其中一种模式: * Hosted * Non-Hosted --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/technicalterm/NotificationOfChargeback/index.md description: >- 拒付通知(Notification of Chargeback, NoC)是发卡银行发起的一种通知,告知商户某笔交易存在争议。NoC可以在信息请求后发起,或直接在交易状态设为已结算或已退款后发起。一旦发起NoC,争议处理流程开始,资金将从商户账户中扣除。适用于全球范围内的银行卡交易,关键步骤包括发起 --- # 拒付通知 拒付通知(Notification of Chargeback,简称 NoC)是指发卡银行(Issuer)发起的一种通知,告知商户某笔交易存在争议。NoC可以在信息请求(Request for Information,RFI)之后发起,也可以跳过RFI步骤,直接在交易状态设为已结算(Settled)或已退款(Refunded)后发起。一旦发起NoC,争议处理流程就正式开始,资金将从您的账户中扣除。 ## 拒付通知的详细流程 1. 发起拒付通知:发卡银行发现某笔交易存在争议,向商户的收单行(Acquirer)发起拒付通知(NoC)。 2. 通知商户:收单银行收到拒付通知后,会通知商户,并提供相关的交易信息和拒付原因。 3. 资金扣除:通常在商户收到拒付通知后的几天内,争议金额会从商户的账户中扣除。 4. 商户响应:商户可以在规定的时间内提交相关的证据和材料,证明交易的合法性和有效性。 5. 银行评估:收单行会将商户提交的材料转交给发卡银行,发卡银行会对这些材料进行评估,决定是否撤销拒付请求。 6. 决定结果:如果发卡银行认定商户提供的证据充分,拒付请求将被撤销,交易金额会重新转回到商户账户。如果发卡银行认定持卡人的争议成立,交易金额将退还给持卡人。 --- --- url: 'https://acquirer-api-docs-v4.pingpongx.com/notes/zh/technicalterm/PCI/index.md' description: >- PCI 合规导航定义了支付卡行业数据安全标准(PCI DSS),确保处理持卡人数据的公司维护安全环境。适用于所有接受信用卡或参与支付处理的实体,如商户、银行和服务提供商。获取PCI资质需遵守PCI DSS标准,完成自我评估问卷或外部审计,并进行定期安全扫描。集成方式包括使用PingPongCheck --- # PCI 合规导航 ::: note 提示 根据您的集成情况,PingPongCheckout 可能要求您提交 PCI DSS 文档,然后才能在生产环境中接受信用卡支付。 ::: ## PCI的含义 支付卡行业数据安全标准(PCI DSS)是由支付卡行业安全标准委员会(PCI SSC)创建的一套全球安全标准,目的是确保每个收集、处理、存储或传输持卡人数据的公司维护一个安全的持卡人数据环境。PCI DSS 适用于所有接受信用卡或参与支付处理的实体,如支付处理器、收购方、发行方和服务提供商。 ## PCI的作用 PCI资质主要适用于处理支付卡信息的组织,包括商户、银行、支付服务提供商以及其他涉及支付卡数据的机构。该资质的核心目标是保护持卡人数据的安全,防止数据泄露、盗用和欺诈行为。 PCI DSS 是主要卡组织(Mastercard,Visa,JCB,Diners,和 American Express)所采用的全球标准,它定义了一套技术和操作要求,如果正确实施,可以帮助您保护持卡人数据,减少欺诈,并最大限度地减少恶意攻击导致数据泄露的可能性。遵守这些要求可以帮助您保持购物者的信任。 ## 如何获取PCI资质 获得PCI资质需要通过一系列的安全评估和合规性测试,包括以下方面: 1. 遵守PCI数据安全标准(PCI DSS):此标准规定了处理支付卡信息所需的安全措施,包括建立和维护安全网络、保护持卡人数据、实施强密码策略、定期监测和测试系统等。 2. 完成自我评估问卷(SAQ)或进行外部审计:根据组织的类型和处理支付卡数据的方式不同,需要完成相应的SAQ或接受独立的外部审计来验证符合PCI DSS的要求。 3. 支付应用程序的安全扫描:对使用支付应用程序的组织需要进行定期的安全扫描,以确保应用程序没有存在已知的安全漏洞。 ## 收银台集成 您可以使用 PingPongCheckout的收银台 或使用PingPongCheckout 的插件,使用 iframe 元素将网页嵌入到您的网站中。 嵌入元素的内容是从你的网页中隔离出来的,持卡人的数据在购物者的浏览器中被加密。您没有访问解密密钥,因此您没有访问您的购物者的持卡人数据。 ## API集成 您可以构建自己的 UI,并且只使用我们的 API。当您想要完全控制支付流程时,通常会使用这种集成。结帐页面由您托管、服务和控制。根据 PCI DSS 的要求,您从购物者的浏览器接收持卡人数据,处理数据,然后通过传输层安全(TLS 1.2)将原始卡数据发送给 PingPongCheckout。 这种集成需要更严格的 PCI DSS 范围,因为您的系统接收、传输以及可能存储和处理持卡人数据ーー使您能够完全控制支付流程和支付数据。一旦您的网站被恶意攻击,网站或您的系统将潜在地能够访问大量的持卡人数据。因此,您必须遵守所有符合条件的 PCI DSS 要求 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/technicalterm/PreArbitration/index.md description: >- 预仲裁是信用卡交易争议处理过程中的关键阶段,旨在通过进一步的证据交换和沟通,在正式仲裁前解决争议。适用于商户对首次拒付结果不满意或发卡银行不认可商户证据的情况。双方可提交额外证据,发卡银行评估后决定是否撤销拒付。若无法达成一致,争议将进入正式仲裁。 --- # 预仲裁 预仲裁(Pre-Arbitration)是信用卡交易争议处理过程中的一个重要阶段,预仲裁的目的是在正式仲裁之前,通过进一步的证据交换和沟通,尝试解决争议。 ## 预仲裁的详细流程 1. 发起预仲裁:当商户对首次拒付的结果不满意,或者发卡银行对商户提供的证据不认可时,商户或发卡银行可以发起预仲裁请求。 2. 提供额外证据:在预仲裁阶段,双方可以提交更多的证据和信息,以支持各自的立场。 3. 银行评估:发卡银行会对商户提供的额外证据进行审核和评估,决定是否接受商户的证据并撤销拒付请求,或者继续支持持卡人的争议。 4. 决定结果:如果发卡银行接受商户的证据,拒付请求将被撤销,交易金额将恢复到商户账户。如果发卡银行仍然支持持卡人的争议,预仲裁请求将被拒绝,交易金额将从商户账户中扣除。 5. 进入正式仲裁:如果预仲裁阶段双方仍无法达成一致,争议将进入正式仲裁阶段。正式仲裁由信用卡组织(如Visa或Mastercard)进行裁决,裁决结果具有最终约束力。 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/technicalterm/salt/index.md description: >- salt 作为PingPong商户的密钥,用于验证PingPongCheckout API调用。完成注册后,商户可登录后台,在密钥管理中查看和管理salt。若发现密钥泄漏,可通过刷新功能生成新密钥以确保安全。 --- # salt 获取 ## salt 的用途 salt 是PingPong商户的密钥,并且是PingPongCheckout API调用的凭证,必须妥善保存,谨防泄漏! ## salt 获取 需要完成pingPong的商户注册之后才可以获取,可以参考注册流程。 已完成注册的可以直接登陆到商户后台,点击 密钥管理 进行查看,具体位置如下截图所示: 注意事项: :::note 注意 如果密钥存在泄漏的情况,可以点击查看密钥之后进行刷新,刷新之后,用新的密钥进行替换即可。 ::: --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/technicalterm/Tokenization/index.md description: >- Tokenization 是一种数据保护技术,将敏感信息如信用卡号转换为随机生成的字符串(token),用于增强支付系统的安全性。该技术在用户通过支付网关进行交易时,使用token代替真实卡号处理支付,防止敏感信息泄露。主要优势包括提高安全性、简化合规性、增强客户信任和支持多种支付场景。国际信用卡和 --- # Tokenization ## Tokenization Tokenization 是一种数据保护技术,它将敏感数据(如信用卡号)转换成一个随机生成的字符串,称为“token”(token(令牌))。这些token(令牌)在外观上与原始数据相似,但不包含任何实际的敏感信息。因此,即使token(令牌)被泄露,也不会对原始数据的安全造成威胁。 在支付系统中,token(令牌)化用于增强交易的安全性。当用户通过支付网关进行交易时,他们的支付信息(如信用卡号)会被转换成token(令牌)。这个token(令牌)将被用于处理支付,而不是使用实际的卡号。这样,即使支付系统被黑客攻击,攻击者也无法获取用户的真实支付信息。 token(令牌)化的主要好处包括: * 提高安全性:由于token(令牌)不包含任何真实的敏感信息。 * 简化合规性:使用token(令牌)化可以减少企业在处理敏感支付信息时需要遵守的合规要求,例如PCI DSS(支付卡行业数据安全标准)。 * 增强客户信任:通过保护消费者的支付信息,企业可以增强消费者的信任,从而可能增加消费者的购买意愿和忠诚度。 * 支持多种支付场景:token(令牌)可以用于一次性支付、定期订阅付款或任何其他类型的电子支付,提供灵活性和便利性。 ## 支持情况 Tokenization 在国际信用卡支付/本地支付间有不同的产品形态: * 国际信用卡: CardOnFile * 本地支付: CodeGrant --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/technicalterm/transactionId/index.md description: >- transactionId是用于唯一标识一项交易的字符串或数字,确保在线交易和点对点转账的安全性和正确性。在PingPongCheckOut中,transactionId特指PingPong交易流水号,适用于追踪和管理交易流程。 --- # transactionId ## transactionId参数说明 :::note 备注 transactionId 通常指交易标识符,是用于唯一标识一项交易的字符串或数字。无论是在线交易还是点对点转账,都需要使用 transactionId 来确保交易的安全性和正确性。 ::: transactionId在PingPongCheckOut文档中表示 PingPong交易流水号。 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/technicalterm/Void/index.md description: >- Void是指预授权撤销,用于商家决定拒绝已授权但未捕获的支付。适用于检测到高风险欺诈等情况。一旦支付被成功捕获,则无法再通过VOID取消,此时需通过退款流程将款项退还给消费者。 --- # Void 已授权的支付可以被捕获(资金被发送到商家账户)或取消(商家因某些原因决定拒绝支付,如高风险的欺诈)。 请注意,对于已经被捕获的交易,取消支付是不可能的。在这种情况下,商家应该发起退款,将资金返还给购物者。捕获、取消和退款一起被称为修改,因为它们修改了已授权支付请求的状态。 ## API列表 * CAPTURE-预授权权确认 * VOID-预授权撤销 --- --- url: 'https://acquirer-api-docs-v4.pingpongx.com/notes/zh/threeDS/3ds/index.md' description: >- 3D Secure是一种在线交易验证协议,旨在防止电子商务中的欺诈活动。通过要求持卡人输入密码或一次性代码,为支付过程提供额外安全保障。PingPongCheckout支持三种3ds决策方案:强制执行、风控决策及外部执行。认证流程包括无摩擦和挑战两种模式,前者无需用户进一步交互即可完成认证,后者则需 --- # 3D Secure 认证集成 3D Secure是一种安全协议,用于验证在线交易并防止电子商务中的欺诈活动。它要求持卡人在完成交易前输入密码或一次性代码,从而为支付过程增加了额外的安全层。 ## PingPongCheckout支持的3ds决策方案 | executeThreeD | 收银台支持 | 端到端模式支持 | 描述 | |:--------------|:--------------------------------------------------------------------:|:-----------------------------------------------------------------|:------------------------------------------------| | Y | | | 强制进行3ds验证,并且使用PingPongCheckout的3ds。 | | depends | | | 是否进行3ds验证交由PingPongCheckout的风控决策决定 | | external | | | 需要进行3ds验证,在商户执行3ds,并把3ds结果交由PingPongCheckout执行。 | 根据统一下单接口调用时,参数executeThreeD取值来定: ## 3D Secure 认证流程 ### Frictionless 在Frictionless 流程中,购买者、发行者和卡方案通过使用购物者的设备指纹的被动认证在后台交换所有必要的信息。事务在没有进一步的购物者交互的情况下完成。 ### Challenge 在Challenge 流程中,银行或支付处理机构会自动为持卡人创建一个3D挑战页,购物者需要进行额外的交互。发卡行通过生物特征识别、双因素身份验证,或者基于 SCA 身份验证因素等类似方法确保交易的安全性。 一旦卡片持有人完成了3D挑战页上的身份验证步骤,他们的身份将被验证,并且银行或支付处理机构可以决定是否批准该交易。 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/threeDS/3DSexternal/index.md description: >- 3DS external接口用于商户主动上送3DS验证结果处理流程。适用于需要对持卡人进行额外身份验证的在线支付场景,支持Visa、American Express等主要卡组织。关键参数包括executeThreeD(固定值external)、authenticationValue(发卡行生成的身份 --- # 3DS external ## 商户主动上送3DS结果处理流程 ## 3DS关键入参 | 字段名称 | 类型 | 描述 | |------------------------------|--------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | executeThreeD | String | 主动上送3DS结果填`external` | | authenticationValue | String | 发卡行在客户身份验证后为Visa、American Express、JCB、Diners Club和Discover交易生成的唯一标识符。原始数据以base64为单位。需要将值转换为可读格式。 | | acsTransactionId | String | 由ACS分配的唯一事务标识符,用于标识单个事务。 | | veresEnrolled | String | 注册检查的结果。此字段可以包含以下值之一:- Y: 卡已注册或可注册;您必须进行身份验证。责任转移。- N: 未登记卡;进行授权。责任转移。- U: 无论何种原因,都无法进行身份验证。没有责任转移。 | | specificationVersion | String | 此字段包含用于处理事务的3D Secure版本。例如,1.0.2或2.0.0。 | | directoryServerTransactionId | String | 目录服务器交易ID由万事达目录服务器在认证交易期间生成,并与认证结果一起传递回商家。 | | threeDSServerTransactionId | String | 3DS服务器分配的唯一事务标识符,用于标识单个事务。 | | paresStatus | String | 身份验证检查的原始结果。此字段可以包含以下值之一:- A: 已生成身份验证尝试的证明。- N: 客户身份验证失败或取消。交易被拒绝。- U: 无论何种原因,身份验证都未完成。- Y: 客户已成功通过身份验证。 | | eci | String | 对于验证,仅为Visa、American Express、JCB返回数字电子商务指示符(ECI)Diners Club和Discover交易。身份验证失败时缺少字段。此字段包含以下值之一:- 01: 尝试身份验证(万事达卡)- 02: 认证成功(万事达卡)- 05: 成功的身份验证(Visa,American Express,JCB,Diners Club和Discover)- 06: 尝试身份验证(Visa,American Express,JCB,Diners Club和Discover) | ## 下单并支付接口入参示例 ```json { "clientId": "2018092714313010016", "accId": "2018092714313010016431", "amount": 10, "version": "1.0", "currency": "USD", "merchantTransactionId": "{{merchantTransactionId}}", "paymentType": "SALE", "shopperResultUrl": "https://aa.com", "shopperCancelUrl": "https://aa.com", "signType": "MD5", "threeDSecure": "N", "sign": "{{Sign}}", "requestId": "{{requestId}}", "acquirerType": "PAY", "notificationUrl": "https://test-acquirerpay.pingpongx.com/qa/notify", "threeDSRequestData": { "executeThreeD": "external", "acsTransactionId": "d53e5ae3-6a98-4ae0-be1a-7e7f0e91f392", "authenticationValue": "MTIzNDU2Nzg5MDEyMzQ1Njc4OTA=", "directoryServerTransactionId": "83196474-07ec-43d5-85a0-aafc9e505419", "eci": "02", "paresStatus": "Y", "threeDSServerTransactionId": "59a87425-2e29-484e-94f8-f2bc04649332", "specificationVersion": "2.1.0" }, "payMethodInfo": { "card": { "cvv": "103", "expireMonth": "12", "expireYear": "2025", "holderFirstName": "James", "holderLastName": "LeBron", "number": "5200000000003092" } }, "billing": { "city": "Birmingham", "country": "US", "email": "3ds@pingpongx.com", "firstName": "James", "lastName": "LeBron", "phone": "18301770495", "postcode": "35222", "state": "AL", "street": "1986 Broad Street" }, "shipping": { "city": "Miami", "country": "US", "email": "t_email", "firstName": "Jamesbb", "lastName": "LeBronbb", "phone": "3055787342", "postcode": "33131", "state": "FL", "street": "701 Brickell Avenue, Suite 2700", "lastModifierStreetTime": "20191225162010", "lastModifierPhoneTime": "20191225162010" }, "customer": { "acquisitionChannel": "SEARCH_ENGINE", "customerId": "20191201001", "domain": "pingpongx.com", "email": "3ds@pingpongx.com", "firstName": "James", "firstOrder": "N", "identificationId": "", "identificationType": "ID", "lastName": "LeBron", "lastPayTime": "201905120330", "loginIp": "222.126.52.24", "loginTime": "201912010032", "middleName": "von", "nonMemberOrder": "N", "orderCountry": "US", "orderIp": "222.126.52.23", "orderTime": "20191201001", "payCountry": "US", "payIp": "222.126.52.25", "phone": "18301770495" } } ``` --- --- url: 'https://acquirer-api-docs-v4.pingpongx.com/notes/zh/threeDS/api/index.md' description: >- threeDS API 用于收集和提交浏览器相关信息以增强支付安全性。适用于需要进行3D安全验证的在线支付场景,关键参数包括language、screenWidth、javaEnabled等,通过这些信息帮助识别真实用户,减少欺诈风险。 --- # api ## 必要参数收集 在浏览器上收集下列参数 | 属性 | 类型 | 描述 | |-------------------|--------|-----------------------------------------------------------------------------------------------------------------------------------------| | language | string | 购物者浏览器的navigator.language值(如IETF BCP 47中所定义)。 | | screenWidth | int | 持卡人终端屏幕宽度(单位:像素) | | javaEnabled | bool | 持卡人终端是否能够执行Java。 | | javaScriptEnabled | bool | 指示购物者的浏览器是否能够执行JavaScript。如果字段不存在,则假定为默认的`true`值。 | | acceptHeader | string | http响应头信息, 示例值: text/html, application/xhtml+xml, application/xml;q=0.9, image/webp, image/apng, \*;q=0.8 | | colorDepth | string | | | screenHeight | int | 持卡人终端屏幕高度(单位:像素) | | jetLag | int | UTC时间和持卡人浏览器本地时间之间的时差,以分钟为单位。 | | userAgent | string | 浏览器用户代理信息 示例值: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 | ## 填充browserInfo 请求PingPongChekout 下单并支付接口。在参数 `browserInfo`中上送以上参数。 请求报文示例: ```json { "accId":"2090020315464510103001", "clientId":"2090020315464510103", "signType":"SHA256", "sign":"{{Sign}}", "version":"1.0", "bizContent":{ "captureDelayHours":"0", "amount":"3", "currency":"USD", "merchantTransactionId":"{{merchantTransactionId}}", "payResultUrl":"https://test-acquirerpay.pingpongx.com/qa/result.html", "payCancelUrl":"https://test-acquirerpay.pingpongx.com/qa/result.html", "notificationUrl":"https://test-acquirerpay.pingpongx.com/qa/result.html", "language":"en", "requestId":"{{requestId}}", "tradeCountry":"US", "shopperIP":"222.126.52.23", "paymentMethod":{ "type":"scheme", "cardInfo":{ "expireMonth":"12", "expireYear":"2024", "holderFirstName":"w", "holderLastName":"w", "number":"5200000000001096", "cvv":"103" } }, "customer":{ "firstName":"Jamesbb", "lastName":"LeBronbb", "email":"test@pingpongx.com", "phone":"9157030054" }, "goods":[ { "name":"商品名称mepsking1", "description":"商品描述", "sku":"产品SKU111", "unitPrice":"1000", "number":"1", "imgUrl":"https://xiu.mepsking.top/material/1/16606169805015585.png", "virtualProduct":"Y" } ], "shippingAddress":{ "firstName":"Jamesbb", "lastName":"LeBronbb", "phone":"9157030054", "email":"3ds@pingpongx.com", "street":"3888 Austin Secret Lane", "postcode":"84723", "city":"Circleville", "state":"UT", "country":"US" }, "billingAddress":{ "firstName":"Jamesbb", "lastName":"LeBronbb", "phone":"9157030054", "email":"3ds@pingpongx.com", "street":"3888 Austin Secret Lane", "postcode":"84723", "city":"Circleville", "state":"UT", "country":"US" }, "browserInfo":{ "acceptHeader":"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8", "colorDepth":"24", "jetLag":"480", "language":"nl-NL", "javaEnabled":"true", "screenHeight":"723", "screenWidth":"1536", "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" }, "device":{ "orderTerminal":"02" } } } ``` ## 是否需要3DS挑战 * `threeDUnionParams.threeDContinue`为`true`时候需要触发3D挑战。 * `threeDUnionParams.threeDContinue`为`false`时候将会跳转到商户的支付结果页`shopperResultUrl`。 ## 重定向到3DS挑战页 从下单并支付接口的响应报文中获取`threeDUnionParams.threeDRedirectUrl`参数,通过GET方式跳转,随后PingPongCheckout提供的中间页将会自动重定向到3DS挑战页。 --- --- url: 'https://acquirer-api-docs-v4.pingpongx.com/notes/zh/threeDS/avsResult/index.md' description: >- avsResult文档详细描述了AVS验证结果及其应用情况。适用于所有发卡行,根据不同的卡片方案(如Visa、Mastercard、American Express等),提供了具体的响应代码和含义。例如,A表示地址匹配但邮政编码不匹配,N表示地址和邮政编码均不匹配。 --- # avsResult ## AVS 验证结果详细说明 | AVS Result | AVS Raw Response Code | 应用于 | 详细信息 | |------------------------------------------------------|-----------------------|-------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | Unknown. | - | 所有发卡行 | 没有从发卡银行收到答案。 | | Address matches, but the postal code does not match. | A | 针对不同卡片方案有所不同 | Visa和Mastercard:地址匹配,邮政编码不匹配。American Express:只有地址匹配。 | | Neither postal code nor address match. | N | Visa,Mastercard,Discover,American Express | 地址和邮政编码都不匹配。 | | AVS unavailable. | R, S, U | Visa,Mastercard,Discover,American Express | R:系统不可用或超时。Discover:不适用。S:AVS目前不支持。U:发卡机构/授权平台没有数据。Discover:系统不可用或超时。 | | AVS not supported for this card type. | E | Visa | E:AVS数据无效或此卡类型上不允许AVS。 | | Postal code matches, but the address does not match. | T, W, Z | 针对不同卡片方案有所不同 | T:仅限Discover:对于美国地址,九位数的邮政编码匹配但地址不匹配。W:仅限Mastercard:对于美国地址,九位数邮政编码匹配但地址不匹配;对于美国以外的地址,邮政编码匹配但地址不匹配。Z:Visa:对于美国地址,五位或九位邮政编码匹配但地址不匹配。Z:Mastercard和Discover:对于美国地址,五位邮政编码匹配但地址不匹配。Z:American Express:只有邮政编码匹配。 | | Both postal code and address match. | D, F, M, X, Y | 针对不同卡片方案有所不同 | D:仅限Visa:街道地址和邮政编码匹配。F:仅限Visa:街道地址和邮政编码匹配。适用于英国。M:仅限Visa:街道地址和邮政编码匹配。X:Visa和American Express:不适用。万事达卡:对于美国地址,所有邮政编码数字都匹配;对于美国以外的地址,邮政编码和地址匹配。Discover:对于美国地址,九位数的邮政编码和地址匹配。Y:对于Visa:对于美国地址,五位或九位邮政编码匹配。对于Mastercard:对于美国地址,五位邮政编码和地址匹配。对于Discover:只有地址匹配。对于American Express:邮政编码和地址匹配。 | | Address matches, postal code not checked. | B | Visa | 街道地址匹配。邮政编码未验证,因为格式不兼容。(收单行同时发送了街道地址和邮政编码。) | | Postal code matches, address not checked. | P | Visa | 邮政编码匹配。街道地址未经验证,因为格式不兼容。(收单行同时发送了街道地址和邮政编码。) | | Neither postal code nor address were checked. | C, G, I | Visa | C:由于格式不兼容,街道地址和邮政 | --- --- url: 'https://acquirer-api-docs-v4.pingpongx.com/notes/zh/threeDS/depends3D/index.md' description: >- depends3D接口用于PingPongCheckout的3DS决策流程,适用于端到端接入方式。关键参数`executeThreeD`需设置为`depends`以启用3DS验证。收银台JS-SDK已内置3D Secure功能,无需额外集成。 --- # depends3D ## 3DS 决策流程 ## 3DS关键入参 | 字段名称 | 类型 | 描述 | |---------------|--------|------------------------------------| | executeThreeD | String | 由PingPongCheckout进行3ds决策填`depends` | ## PingPongCheckout支持的3DS接入方案 > 下列方案仅适用端到端接入方式。收银台JS-SDK内部已经自动集成 3D Secure,无需再次接入。 --- --- url: 'https://acquirer-api-docs-v4.pingpongx.com/notes/zh/threeDS/Force3D/index.md' description: >- Force3D 用于在支付过程中强制执行3DS认证。适用于需要增强交易安全性的场景,特别是在端到端接入方式下。关键参数`executeThreeD`设置为`Y`时,将触发强制3DS验证流程。PingPongCheckout的收银台JS-SDK已内置3D Secure功能,无需额外集成。 --- # Force3D ## 3DS 决策流程 ## 3DS关键入参 | 字段名称 | 类型 | 描述 | |---------------|--------|---------------| | executeThreeD | String | 强制进行3DS认证填`Y` | ## PingPongCheckout支持的3DS接入方案 > 下列方案仅适用端到端接入方式。收银台JS-SDK内部已经自动集成 3D Secure,无需再次接入。 --- --- url: 'https://acquirer-api-docs-v4.pingpongx.com/notes/zh/threeDS/riskJs/index.md' description: >- riskJs组件用于集成3D Secure验证,适用于需要增强在线支付安全性的场景。主要功能包括初始化设置与收集卡信息进行3D init。关键参数有env、accId、clientId等,支持通过cardInfo或cardToken传递卡信息。该组件能够自动生成并返回jsGeneratedData以 --- # 3D Secure-riskJS组件集成指南 ## 引入riskJs组件 ```js ``` ## 初始化 ### 构造方法 ```js window.PingPongRiskControl(options, callback) ``` | 属性 | 类型 | 必填 | 描述 | |:-----------------------|:-----------|:----|:-------------------| | options.env | String(12) | M | 沙箱-sandbox 生产-prod | | options.accId | String(32) | M | PingPong商户号 | | options.clientId | String(32) | M | PingPong店铺号 | | options.merchantUserId | String(64) | M | 商户网站唯一标识 | | options.requestId | String(64) | M | 订单关联唯一标识 | | callback(this) | Function | O | 回调函数 | ### 调用示例 ```javascript //初始化参数 let options = { env: env, // 沙箱-sandbox 生产-prod accId: accId, clientId: clientId, merchantUserId: merchantUserId, requestId: requestId } const client = new window.PingPongRiskControl(options, callback) ``` ### 调用 installLight\_S2S ```js client.installLight_S2S() ``` 至此,riskJs组件初始化部分已经完成。 ## 收集卡信息进行3D init * 为了收集完整正确的卡号,该方法可在 卡号 和 卡有效期 input 失焦后进行触发,调用后插件将自行进行3DS初始化操作。 * 初始化完成之后,插件将jsGeneratedData注入回调函数-callback。 * 需要定时等待获取到jsGeneratedData提交订单,超时未获未获取到jsGeneratedData可以先提交订单,但当前交易若决策为需要3DS验证,则无法进行3DS challenge流程。 ### 构造方法 ```js client.complexInit(options, callback) ``` ### 3D init入参 | 属性 | 类型 | 必填 | 描述 | |:-----------------------|:-----------|:----|:----------------| | options.accId | String(64) | M | PingPong 商户店铺编号 | | options.merchantUserId | String(64) | M | 商户网站会员唯一标识 | | options.requestId | String(64) | M | 订单关联唯一标识 | | callback(this) | Function | O | 回调函数 | > cardInfo和cardToken,二者必须传送其中一项。 #### cardInfo | 属性 | 类型 | 必填 | 描述 | |:------------------------|:-----------|:----|:-----------| | options.cardNumber | String(12) | C | 国际信用卡卡号 | | options.cardExpireMonth | String(32) | C | 有效期-月,2位数字 | | options.cardExpireYear | String(64) | C | 有效期-年,4位数字 | #### cardToken | 属性 | 类型 | 必填 | 描述 | |:------------------|:-----------|:----|:---------------| | options.cardToken | String(32) | C | 可以用来替代cardInfo | ### 调用示例 ```javascript let initOptions = { cardNumber: cardNumber, // 卡号: 插件会自己判断当前卡号长度是否 >= 15 cardToken: cardToken, cardExpireMonth: cardExpireMonth, cardExpireYear: cardExpireYear, // 2022 || 22 cardBrand: cardBrand, accId: accId, merchantUserId: merchantUserId, requestId: requestId } client.complexInit(initOptions, callback) function callback(jsGeneratedData){ // 自动注入jsGeneratedData } ``` ### jsGeneratedData 的属性 | 属性 | 备注 | |:------------------------|:----| | threeDInitTransId || | threeDSecureReferenceId || | channel || | correlationId || | fingerPrint || | forterSiteId || | forterTokenCookie || | threeDSServerTransID || | version || ## 统一下单报文组装 在下单并支付API中,上送下列参数: * jsGeneratedData (执行3DS流程的必要条件) * browserInfo (可选,建议上送,可以提高交易成功率) ## 3DS 验证处理 ### 如何处理 * 商户在调用接口-下单并支付之后,根据响应的交易状态与 `threeDContinue` 处理标识判断是否需要3DS验证处理。 * 如果支付状态 `status` 为 `PROCESSING`并且`threeDContinue` 为 `true`,商户前端需要执行风控JS提供的`complexTrigger`函数。 * 将接口返回 的 `threeDUnionParams` 作为入参调用 `complexTrigger` 函数,风控JS会引导浏览器到3D挑战页,持卡人需要正确的完成3D验证,才能成功交易。 ### complexTrigger ```js client.complexTrigger(threeDUnionParams, callback) ``` | 属性 | 必填 | 备注 | |:------------------|:----|:-----------------------------------------------------------------------------------------------| | threeDUnionParams | M | 调用PingPongCheckout下单并支付接口后返回的`threeDUnionParams` | | callback | O | 商户可在此处理正常支付流程。若该笔交易进入3D流程,则该回调不会执行,否则执行该回调函数,处理正常支付逻辑 | \`\` --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/tokenization/cof/bind/index.md description: >- 绑卡获取凭证功能支持用户安全地存储支付信息,适用于需要简化支付流程、提高支付体验的场景。通过将用户的银行卡信息转换为不可逆的令牌,确保敏感数据的安全性。此功能覆盖全球主要市场,支持多种银行卡类型,并提供API接口以方便集成,关键参数包括客户ID、卡片信息等。 --- # 绑卡获取凭证 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/tokenization/cof/bindList/index.md description: >- 绑卡查询接口提供已绑定银行卡信息的检索服务。适用于需要获取用户已绑定支付方式详情的应用场景,支持通过客户ID查询其名下所有有效卡片列表。返回数据包括但不限于卡片别名、类型及部分脱敏卡号等关键信息,便于进一步处理或展示给用户。 --- # 绑卡查询接口 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/tokenization/cof/unbind/index.md description: >- 解绑接口用于取消已绑定的支付卡与用户账户之间的关联。适用于需要移除或更新支付方式的场景,支持全球范围内的支付卡操作。通过调用此API,开发者可以实现安全、高效地管理用户的支付卡信息,关键参数包括用户标识符和待解绑卡片的token。 --- # 解绑接口 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/tokenization/hosted/index.md description: >- 创建cardToken-Hosted模式用于通过安全方式存储信用卡信息,以便未来快速支付。适用于需要简化用户支付流程的场景,如电商网站。关键特性包括在首次支付时允许用户勾选保存卡信息(不含CVV/CVC/CVN),之后系统自动展示历史卡信息以供选择。主要功能涵盖客户端下单、同步响应及从异步通知获取t --- # 创建cardToken-Hosted模式 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/tokenization/nonHosted/index.md description: >- 创建cardToken-NonHosted模式用于在非托管环境下生成卡令牌。适用于需要提高支付安全性及减少PCI DSS合规负担的场景。主要步骤包括客户端下单上传指定参数以请求创建cardToken,通过API同步响应并从异步通知中获取token。成功支付后可正常获得token,失败则无法获取。 --- # 创建cardToken-NonHosted模式 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/tokenization/oneClickPayment/bind/index.md description: >- 签约接口用于实现用户银行卡信息的令牌化存储,支持后续快速支付。适用于电商平台、移动应用等场景,提高支付安全性与便捷性。主要功能包括生成和管理卡片令牌,关键参数有商户ID、用户ID及卡信息。 --- # 签约接口 > --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/tokenization/oneClickPayment/bindList/index.md description: >- 签约查询接口用于获取用户已绑定的支付卡列表。适用于需要展示或管理用户支付方式的应用场景,支持全球主要地区。通过此API,开发者可以实现一键支付功能,提升用户体验。请求需携带必要的身份验证信息,响应包含卡片类型、部分掩码卡号等关键参数。 --- # 签约查询接口 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/tokenization/oneClickPayment/unbind/index.md description: >- 解约接口用于解除已绑定的支付卡,适用于用户不再使用某张卡片进行快速支付或需要更换支付方式时。此接口属于令牌化模块,通过提供必要的参数如token_id等,可安全地取消卡片与账户之间的关联,确保用户信息安全的同时简化了管理流程。 --- # 解约接口 --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/notes/zh/tokenization/unbind/index.md description: >- Token 解绑功能允许商户取消已绑定的支付令牌,使该令牌失效但不影响之前交易的后续操作如退款。通过POST请求调用,需提供clientId、accId等必要参数及待解绑的token信息。支持沙箱和生产环境部署。 --- # Token 解绑 * token 解绑成功后,该 token 将不能再被使用。 * 之前使用该 token 进行交 易的后续交易(退款、预授权完成、预授权撤销)不受影响。 ## 请求地址 ::: code-tabs @tab 🧪 沙箱环境 ```http https://sandbox-acquirer-payment.pingpongx.com/v4/tokenization/unbind ``` @tab 🏭 生产环境 ```http https://acquirer-payment.pingpongx.com/v4/tokenization/unbind ``` ::: ## 请求参数 | 参数字段 | 参数类型 | 参数属性 | 参数说明 | |:-----------|:-------------|:-----|:---------------------------------------------------------------------------------------------| | clientId | String(64) | M | PingPong商户号 | | accId | String(64) | M | PingPong商户店铺编号 | | version | String(10) | M | 当前固定为1.0,后续随接口变动可能有调整 | | signType | String(32) | M | 签名规约,支持 MD5、SHA256,具体⻅本文签名规约一栏 | | sign | String(128) | M | 签名,具体⻅本文签名规约一栏,所有参数均参与签名 | | bizContent | String | M | 请求参数的集合,最大长度不限,除公共参数外所有请求参数都必须放在这个参数中传递 ,格式:JSON字符串 | ### 请求参数 | 参数字段 | 参数类型 | 参数属性 | 参数说明 | |:---------------|:-----------|:-----|:-------------| | token | String(20) | M | 持卡人绑定的 Token | | merchantUserId | String(64) | M | 商户网站的持卡人 ID | ## 响应参数 ### 返回参数 | 参数字段 | 参数类型 | 参数属性 | 参数说明 | |:-------|:-------|:-----|:--------------------------------------------------------| | status | String | M | 解绑状态SUCCESS-解绑成功FAILED-解绑失败 | --- --- url: 'https://acquirer-api-docs-v4.pingpongx.com/notes/zh/tools/api/index.md' description: >- Non-hosted 调试工具专为API调试设计,适用于开发阶段。支持接收 bizContent 参数作为 JSON 对象或字符串,确保开发者遵循文档规范传递参数,以验证请求和响应的正确性。 --- # Non-hosted 调试工具 ::: warning 为了方便您的调试,本调试工具接受 bizContent 参数格式为 json 对象(我们会进行转化)或者 Json 字符串,开发过程中请务必严格参照文档传值 ::: --- --- url: 'https://acquirer-api-docs-v4.pingpongx.com/notes/zh/tools/redirect/index.md' description: >- Hosted-Redirect 调试工具用于简化支付流程的调试。支持接受 bizContent 参数为 JSON 对象或 JSON 字符串,自动进行格式转换。适用于开发阶段,确保参数传递准确无误。请严格参照文档传值以保证调试过程顺利。 --- # Hosted-Redirect 调试工具 ::: warning 为了方便您的调试,本调试工具接受 bizContent 参数格式为 json 对象(我们会进行转化)或者 Json 字符串,开发过程中请务必严格参照文档传值 ::: --- --- url: 'https://acquirer-api-docs-v4.pingpongx.com/notes/zh/tools/RiskDefense/index.md' description: >- RiskDefense 调试工具用于测试和验证风控插件的功能。适用于开发人员在集成风控系统时进行调试,确保规则配置正确且响应符合预期。支持模拟多种交易场景,帮助识别潜在风险并优化风控策略。 --- # RiskDefense 调试工具 --- --- url: 'https://acquirer-api-docs-v4.pingpongx.com/notes/zh/tools/sdk/index.md' description: >- JS-SDK 调试工具用于简化 PingPongCheckout API 的调试过程。支持接受 bizContent 参数格式为 JSON 对象或 JSON 字符串,便于开发者在开发过程中根据文档要求进行测试和验证,确保参数传递的准确性。 --- # JS-SDK 调试工具 ::: warning 为了方便您的调试,本调试工具接受 bizContent 参数格式为 json 对象(我们会进行转化)或者 Json 字符串,开发过程中请务必严格参照文档传值 ::: --- --- url: 'https://acquirer-api-docs-v4.pingpongx.com/notes/zh/tools/sign/index.md' description: >- 签名工具用于生成符合PingPongCheckout v4签名规约的签名。适用于所有需要升级至v4版本的开发者,确保所有参数均参与签名过程。遵循新的签名规则可保障请求的安全性和完整性。 --- # 签名工具 ::: warning 注意 v4 签名规约 中要求所有的参数均参与签名,如果之前对接的是v2或者v3版本要升级到v4,需要按照新的签名规则进行对接 ::: --- --- url: >- https://acquirer-api-docs-v4.pingpongx.com/zh/notes/paymentMethods/ApplePay/merchantCertificateConfiguration/index.md description: >- 文档介绍了如何为网站配置Apple Pay商户证书,以实现非托管方式的Apple Pay Web集成。适用于希望通过Safari浏览器提供Apple Pay支付选项的全球在线商家。内容涵盖从注册苹果开发者账号到完成域名验证的全过程,包括申请证书、创建商家标识符及与PingPongPay交换证书信息等 --- # Apple Pay 商户证书配置 ## 概述 Apple Pay 的网页集成允许用户在网页上通过 Safari 浏览器直接使用 Apple Pay 完成支付。为了在你的网站上实现 Apple Pay,你需要进行一些配置和开发工作,包括生成必要的秘钥、创建支付请求、处理支付授权等。下面是一个基本的步骤指南, 说明了Non-hosted方式集成**Apple Pay Web** 的流程。与Apple Pay Hosted方式相比,Non-hosted方式需要开发者自行实现与Apple Pay UI的交互流程。 ## 1.注册Apple开发者账号 首先,你需要拥有一个有效的苹果开发者账号,并且加入 Apple Developer Program。这是使用 Apple Pay Web API 的先决条件。 ## 2.申请证书 请将`申请材料`发送给邮箱acq-tech@pingpongx.com,并抄送到acq-ts@pingpongx.com 1. 商户名称 2. 商户 AccId 3. 商户 ClientId PingPong 收单团队收到申请邮件,完成所需的配置后,会将证书以邮件附件的形式回复商户。 ## 3.在Apple开发者平台上创建一个商家标识 在 Apple 开发者平台上创建商家标识符(Merchant ID)是集成 Apple Pay 的关键步骤之一。商家标识符用于标识您的业务,并确保支付过程的安全。以下是创建 Merchant ID 的详细步骤。如果您已有商家标识符,可以跳过这个步骤。 ### 登录 Apple 开发者账号 1. 打开 [Apple Developer](https://developer.apple.com/) 平台。 2. 登录您的 Apple 开发者账户。 3. 进入 Apple Developer Center。 4. 在 Apple Developer 选择“Identifiers”。 ### 输入商户标识符基本信息 1. 输入一个描述性的名称,这将帮助您在项目中标识不同的商家标识。例如:“My Online Store Payment”。 2. 输入 Merchant ID 的标识符,通常以 merchant. 开头,例如 merchant.com.example.onlinestore。这个标识符需要是唯一的,并且通常与您的域名相关联以保持一致性。 至此,您已经成功创建了商家标识符。 ## 4.为商户标识符添加证书 1. 回到商户表示列表,点击当前创建的商户标识符,进入详情页面。 2. 在详情页点击 **Apple Pay Payment Processing Certificate** 下的Create Certificate。 3. 点击 **chooseFile** 4. 上传前面步骤邮件附件中的 **certSigningRequest**类型文件 ## 5.下载您的证书 1. 点击 **Download** 下载证书。 2. 下载完成之后,您可以得到一个`.cer`类型的文件 ## 6.商户域名验证 ::: note 提示 域名验证仅限于 Apple Pay Web 的集成方式。如果Native SDK 集成方式,则不需要进行域名验证。 ::: 1. 进入商户标识列表,点击当前创建的商户标识符,进入详情页面。 2. 在详情页将页面往下滚动 3. 点击 **Add Domain** 4. 填写您的域名 5. 点击**下载**按钮,您将得到一个`apple-developer-merchantid-domain-association.txt`文件,内容是Apple预先生成的一个字符串,稍后Apple将会请求您的服务器获取内容进行验证。 6. 将您的文件上传到您的服务器,放入Apple指定的位置。 ::: note 提示 * 如图所示,域名验证文件放在Web服务的根目录下`.well-known`的目录中。 * 文件名必须为`apple-developer-merchantid-domain-association.txt`。 * 域名验证文件内容必须与Apple预先生成的字符串一致。 * 您可以在l浏览器中访问`https://yourdomain.com/.well-known/apple-developer-merchantid-domain-association.txt`,如果返回内容一致,则表示验证成功。 ::: 7. 如果在浏览器中验证成功,可以点击**Verify**进行验证。 ## 7.与PingPongPay交换证书信息 请将以下信息发送给邮箱`acq-tech@pingpongx.com`,并抄送到`acq-ts@pingpongx.com` * `.cer`文件 * 您已验证通过的domain 另外,`.certSigningRequest`文件请您自行留存,后续可能会使用
${message}
正在初始化收银台...
{{ error }}