概述
取消支付(Cancel Payment)用于取消一笔尚未完成的支付。当支付处于允许取消的状态时,商户可以调用此接口主动终止支付流程。取消成功后,该支付将不再继续处理。
注意
- 使用取消支付功能,需要联系Oceanpayment技术支持开通;
- 取消支付仅适用于尚未完成的支付。对于已经成功完成的支付,请使用退款(Refund)功能。
使用场景
- 用户主动取消订单:用户在支付过程中返回商户网站,并取消当前订单;
- 商户订单已失效:超过支付有效期仍未完成支付,商户可以调用取消支付接口;
- 同一订单存在多个支付尝试:同一个商户订单可能由于用户重复点击、支付失败重试等原因产生多个支付记录,当订单有支付成功后,商户可以根据业务逻辑取消仍未完成的支付;
- 商户主动终止支付:当商户由于库存不足、商品下架、订单异常或其他业务原因,不再允许用户继续支付时,可以主动取消尚未完成的支付。
支付状态
取消支付通常适用于仍处于未完成状态的支付。
| 支付状态 | 是否支持Cancel |
|---|---|
| 成功 | ❌ |
| 待处理(非预授权) | ✅ |
| 失败 | ✅ |
流程图
取消支付
- 商户可通过订单号
order_number和支付IDpayment_id指定需要关闭的支付订单。
curl -X POST '/gateway/service/auth'
-H 'Content-Type: application/x-www-form-urlencoded'
-d 'account=995149'
-d 'terminal=99514901'
-d 'signValue=6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b'
-d 'order_number=123456789'
-d 'payment_id=240528151145313026060'
-d 'payment_authType=4'
- Resquest
| 参数名 | 类型 | 长度 | 是否必填 | 描述 |
|---|---|---|---|---|
order_number | string | 1-50 | 是 | 商户网站订单号 |
payment_id | string | 1-50 | 是 | 支付ID,Oceanpayment的支付唯一单号 |
payment_authType | int | 1 | 是 | 取消支付
|
响应数据
<?xml version="1.0" encoding="utf-8"?>
<respon>
<account>995149</account>
<terminal>99514901</terminal>
<signValue>A75EBFFC5CF11EBBF752373115FD1CC1FF4472ACB338EF1E6F303594C656C3D0</signValue>
<order_number/>
<payment_id>240528151145313026060</payment_id>
<payment_status>1</payment_status>
<payment_details>80103:Order closed successfully</payment_details>
</respon>
操作结果
| 返回参数 | 描述 |
|---|---|
payment_status | 操作结果状态
|
payment_details | 结果详情
|
- 查看完整的取消支付返回参数。
取消支付处理规则
- 前置判断:
payment_authType = 4且已开启取消支付功能; payment_id存在正式交易:
| 交易类型 | 当前交易状态 | 处理逻辑 | payment_status(操作结果) | payment_details |
|---|---|---|---|---|
| 非预授权 | 待处理 | 直接关闭订单 | 1 | 80103:Order closed successfully |
| 非预授权 | 失败 | 不执行取消支付操作 | 0 | 40014:Cannot cancel the unsuccessful order |
| 非预授权 | 成功 | 不执行取消支付操作 | 0 | 40014:Cannot cancel the unsuccessful order |
| 预授权 | 待处理 | 不执行取消支付操作 | 0 | 40014:Cannot cancel the unsuccessful order |
| 拦截交易 | 失败 | 直接关闭订单 | 1 | 50009:Order closed successfully |