Cancel or Refund
适用于线上(EC)和线下门店(In-Store)场景。
无论原交易处于何种状态,商户都可以使用该接口关闭交易或退还交易金额。EVO Payment 会判断交易状态,并自动发起撤销或退款。
发起撤销或退款请求
步骤 1:发起撤销或退款请求
当您获取到的支付结果中 payment.status 为 Captured 或 Authorised 时,可以从服务端向 EVO Payment 以下接口发起 HTTP POST 请求:
/g2/v1/payment/mer/{sid}/cancelOrRefund
对初始支付进行退款,并指定以下参数:
| 查询参数 | 是否必填 | 说明 |
|---|---|---|
merchantTransID | M | 初始支付的 merchantTransInfo.merchantTransID。 |
| Body 参数 | 是否必填 | 说明 |
|---|---|---|
merchantTransInfo | M | 退款交易的参考信息,包括唯一的 merchantTransID,以及表示您发起请求时间的 merchantTransTime。 |
transAmount | O | 退款的币种和金额。金额必须符合该币种的最小单位规则。 |
initiatingReason | O | 您可在该字段中说明发起本次请求的原因。 |
webhook | O | 接收通知的 URL。传入该参数后,支付成功时将收到 EVO Payment 的通知。 |
metadata | O | 您可在请求中自定义的参考信息,会在响应中原样返回。 |
请求成功时,响应中会包含 cancel 或 refund 对象以及 payment 对象,提供原支付的状态和相关信息。
cancel 或 refund 对象详细说明:
cancel.status或refund.status:完成的状态,必填,取值可为Success、Failed或Received。如果XXX.status为Received,您需要再发起一次 HTTP GET 请求获取完成的最终状态(详情请参阅步骤 2),或等待 EVO Payment 的通知 Webhook。cancelOrRefund:用于表示该交易已被退款或撤销。
步骤 2:查询撤销或退款结果
如果 refund.status 或 cancel.status 为 Received,且您未使用通知 Webhook,可以向 EVO Payment 查询最终结果。
从服务端向 EVO Payment 以下接口发起 HTTP GET 请求:
/g2/v1/payment/mer/{sid}/cancelOrRefund
并指定以下参数:
| 查询参数 | 是否必填 | 说明 |
|---|---|---|
merchantTransID | M | 初始撤销或退款交易的 merchantTransInfo.merchantTransID。 |
异常处理
向 EVO Payment 发起 HTTP POST 请求时: 建议请求发送后至少等待 45 秒。如果在该时间内未收到响应,需要向 EVO Payment 查询结果,请参阅步骤 2 发起请求。
向 EVO Payment 发起 HTTP GET 请求时: 您可以多次发起请求直至获取结果,建议每次后续请求前至少等待 45 秒。如果多次请求后仍无法获取结果,可以改为重新发起一次 cancelOrRefund 请求。

