预授权撤销
约 1672 字大约 6 分钟
2025-03-07
对于支持单独 Capture(请款)的支付方式(如国际信用卡支付),支付过程通常分为两个步骤:
- Authorization:验证买家支付信息并预留资金。
- Capture:将预留资金正式请款并结算。
预授权撤销 用于在 Authorization 成功但尚未 Capture 时取消交易,释放已预留资金,确保资金不会从买家账户中扣除。如果原交易已经完成 Capture,则不能再使用预授权撤销,应改为发起 退款。
撤销流程
流程说明:
- 商户服务端调用 预授权撤销 发起撤销。
- 同步响应可能直接返回
SUCCESS、FAILED或PROCESSING。 - 如果同步响应为
PROCESSING,商户可调用 预授权撤销查询 主动确认撤销状态。 - PingPongCheckout 也会通过 预授权撤销异步通知 返回最终撤销结果。
集成步骤
请按以下步骤完成集成:
步骤 1:发起撤销请求
调用 预授权撤销 API 发起撤销。请根据原交易流水号和本次撤销流水号组装请求;如果希望在 PROCESSING 场景下异步接收最终结果,请正确配置 notificationUrl。
预授权撤销请求关键字段:
| 字段 | 必填 | 说明 |
|---|---|---|
bizContent.merchantTransactionId | 是 | 商户网站的原交易流水号 |
bizContent.notificationUrl | 是 | 用于接收撤销结果的异步通知地址 |
bizContent.merchantVoidId | 是 | 商户侧预授权撤销流水号,全局唯一 |
bizContent.amount | 是 | 撤销金额,应与原授权金额一致 |
bizContent.currency | 是 | 交易币种 |
有关完整参数的更多信息,请参阅预授权撤销接口。
预授权撤销请求示例:
{
"accId": "2023042011040310224447",
"clientId": "2023042011040310224",
"signType": "SHA256",
"sign": "{{Sign}}",
"version": "1.0",
"bizContent": {
"merchantVoidId": "VOID_202606260001",
"merchantTransactionId": "AUTH_202606260001",
"amount": 100,
"currency": "USD",
"notificationUrl": "https://www.example.com/void/notify"
}
}注意
预授权撤销响应关键字段:
| 字段 | 说明 |
|---|---|
bizContent.merchantVoidId | 商户侧预授权撤销流水号 |
bizContent.merchantTransactionId | 商户网站的原交易流水号 |
bizContent.transactionId | PingPong 原交易流水号 |
bizContent.status | 撤销状态,可能为 SUCCESS、FAILED 或 PROCESSING |
bizContent.voidEndingTime | 撤销到达终态时间;如果同步已返回终态,可用于记录完成时间 |
预授权撤销响应示例:
{
"accId": "2023042011040310224447",
"bizContent": "{\"amount\":\"100.000000\",\"merchantVoidId\":\"VOID_202606260001\",\"transactionId\":\"2024050750046462\",\"voidEndingTime\":\"1715049613278\",\"voidTime\":\"1715049612000\",\"merchantTransactionId\":\"AUTH_202606260001\",\"currency\":\"USD\",\"status\":\"SUCCESS\"}",
"clientId": "2023042011040310224",
"code": "000000",
"description": "Transaction succeeded",
"sign": "0474235D375F8A81E9FD17E278ED3F11039F8462F64650A1F0D613FADAE5B04F",
"signType": "SHA256"
}调用预授权撤销接口后,同步响应中的 status 可能为以下值:
SUCCESS:撤销成功,可直接更新撤销状态FAILED:撤销失败,应结合错误原因判断是否允许重试PROCESSING:撤销处理中,需继续等待撤销通知或主动查询
步骤 2:获取撤销结果
预授权撤销发起后,商户应通过以下方式确认最终结果:
如果您通过异步通知接收结果,可参考以下通知示例与处理方式。
预授权撤销通知示例:
{
"clientId": "2023042011040310224",
"code": "000000",
"bizContent": "{\"amount\":\"100.000000\",\"merchantVoidId\":\"VOID_202606260001\",\"transactionId\":\"2024050750046462\",\"notifyType\":\"VOID\",\"voidEndingTime\":\"1715049613880\",\"voidTime\":\"1715049612000\",\"merchantTransactionId\":\"AUTH_202606260001\",\"currency\":\"USD\",\"status\":\"SUCCESS\"}",
"sign": "10FF6C109F36A5693BDE922F8FB5889348E43D64CAF88514A6D14E82CF615E4B",
"accId": "2023042011040310224447",
"description": "Transaction succeeded",
"signType": "SHA256"
}在预授权撤销异步通知场景下,status 会返回最终撤销结果,即 SUCCESS 或 FAILED。收到 SUCCESS 时可将撤销更新为成功;收到 FAILED 时可将撤销更新为失败。
收到通知后,商户服务端建议按以下方式处理:
- 先返回 HTTP
2xx确认已接收,避免触发重复通知 - 再根据通知中的
status更新撤销结果,并执行对应业务处理
通知响应示例:
HTTP/1.1 200 OK
Content-Type: text/plain; charset=UTF-8
Content-Length: 2
OK如果异步通知延迟、未达,或商户侧因网络异常、回调处理失败、结果核验等原因暂时无法确认最终状态,可主动调用 预授权撤销查询 获取撤销结果。
预授权撤销查询请求关键字段:
| 字段 | 必填 | 说明 |
|---|---|---|
bizContent.merchantVoidId | 是 | 商户侧预授权撤销流水号 |
bizContent.merchantTransactionId | 是 | 商户网站的原交易流水号 |
有关完整参数的更多信息,请参阅预授权撤销查询接口。
预授权撤销查询请求示例:
{
"accId": "2018092714313010016291",
"clientId": "2018092714313010016",
"signType": "SHA256",
"sign": "{{Sign}}",
"version": "1.0",
"bizContent": {
"merchantVoidId": "VOID_202606260001",
"merchantTransactionId": "AUTH_202606260001"
}
}预授权撤销查询响应示例:
{
"accId": "2023060217493010231446",
"bizContent": "{\"amount\":\"100.000000\",\"resultCode\":\"000000\",\"transactionId\":\"2024050750046462\",\"voidTime\":\"1715049612000\",\"voidEndingTime\":\"1715049613278\",\"merchantTransactionId\":\"AUTH_202606260001\",\"currency\":\"USD\",\"resultDescription\":\"Transaction succeeded\",\"status\":\"SUCCESS\"}",
"clientId": "2023060217493010231",
"code": "001000",
"description": "Successful request",
"sign": "1EDDB8216409E900AD29095174BEC90710CDD5D2D4B72D84DBD4DF8F2C3E169B",
"signType": "SHA256"
}预授权撤销查询响应关键字段:
| 字段 | 说明 |
|---|---|
bizContent.merchantTransactionId | 商户订单号,用于关联原授权交易 |
bizContent.transactionId | PingPong 交易流水号 |
bizContent.status | 撤销状态,可能为 SUCCESS、FAILED 或 PROCESSING |
bizContent.voidEndingTime | 撤销到达终态时间,可用于记录最终完成时间 |
预授权撤销查询响应中的 status 可能返回 SUCCESS、FAILED 或 PROCESSING。如果查询结果为 PROCESSING,说明撤销结果尚未最终确认,建议稍后重试查询,或继续等待撤销通知。
提示
预授权撤销查询请在同步响应返回之后调用;若查询过早,可能会出现查询异常。
