跳到主要内容

沖正 API 指南

本頁面說明如何使用「沖正 API」來撤銷一筆尚未成功完成的交易。請注意,沖正並非退款。

注意

沖正(reversal)不是退款。只有當原始交易尚未成功完成時,才能發起沖正。


支援場景

備註

目前僅以下場景支援 /trade/v1/reversal 沖正 API,適用於交易處於非完成狀態(例如掃碼後未付款)。

支援的支付場景及 PayType

支付寶正掃

  • 800101:支付寶跨境線下掃碼支付
  • 801501:支付寶線上掃碼支付 (香港商戶)

微信支付正掃

  • 800201:微信掃碼支付

支付寶反掃

  • 800108:支付寶跨境反掃支付

若您欲對其他錢包進行交易取消,請參考 Close API 或聯絡 QFPay 支持團隊取得整合建議。


API 端點

  • Endpoint/trade/v1/reversal
  • 方法POST

若沖正成功,回應會包含 respcd=0000

若原始交易已成功完成(即付款回應中為 respcd=0000),則無法沖正,請改用 退款 API


請求參數

參數名稱類型必填說明
mchidString(16)QFPay 商戶號,僅代理商需填寫。
syssnString(40)是*QFPay 交易號
out_trade_noString(128)是*商戶端交易單號
txamtInt(11)交易金額(單位:分),建議金額大於 200 以避免風控
txdtmString(20)原交易時間,格式:YYYY-MM-DD hh:mm:ss
udidString(40)裝置唯一 ID(用於追蹤交易設備)
  • syssnout_trade_no 至少擇一提供。

回應參數

參數名稱類型說明
syssnString此次沖正動作的 QFPay 交易號
orig_syssnString原始(被沖正)交易的 QFPay 交易號
txamtInt沖正金額(單位:分)
txcurrcdString(3)幣別代碼(例如 HKD)
txdtmString原始交易時間
sysdtmStringQFPay 系統處理時間
chnlsnString錢包端交易號(若未執行則可能為空)
respcdString(4)回應代碼(0000 = 成功,其它 = 失敗或處理中)
resperrString結果訊息
respmsgString額外補充說明(如有)

程式碼範例


import urllib.request, urllib.parse, urllib.error, urllib.request, urllib.error, urllib.parse, hashlib
import requests
from hashids import Hashids
import datetime
import string
import random

# Enter Client Credentials
environment = 'https://test-openapi-hk.qfapi.com'
app_code = '3F504C39125E4886AB4741**********'
client_key = '5744993FBC034DBBB995FA**********'


# Create parameter values for data payload
current_time = datetime.datetime.now().replace(microsecond=0)
random_string = ''.join(random.choices(string.ascii_uppercase + string.digits, k=32))

print(current_time)

# Create signature
def make_req_sign(data, key):
keys = list(data.keys())
keys.sort()
p = []
for k in keys:
v = data[k]
p.append('%s=%s'%(k,v))
unsign_str = ('&'.join(p) + key).encode("utf-8")
print(unsign_str)
s = hashlib.md5(unsign_str).hexdigest()
return s.upper()



# Body payload
txamt = '2500' #In USD,EUR,etc. Cent. Suggest value > 200 to avoid risk control
out_trade_no = '4MDGEJ7L496LAAU1V1HBY9HMOGWZWLXQ'
syssn = '20200305066100020000977812'
txdtm = '2020-03-05 16:50:30'
mchid = 'MNxMp11FV35qQN'
key = client_key

#data ={'txamt': txamt, 'out_trade_no': out_trade_no, 'syssn': syssn, 'txdtm': txdtm, 'udid': udid, 'mchid': mchid}
data ={'txamt': txamt, 'out_trade_no': out_trade_no, 'txdtm': txdtm, 'mchid': mchid}

r = requests.post(environment+"/trade/v1/reversal",data=data,headers={'X-QF-APPCODE':app_code,'X-QF-SIGN':make_req_sign(data, key)})

print(r.json())

回應範例

{
"surcharge_fee": "0",
"resperr": "success",
"txdtm": "2020-03-05 16:50:30",
"syssn": "20200305066100020000977814",
"sysdtm": "2020-03-05 16:54:38",
"txcurrcd": "EUR",
"respmsg": "",
"chnlsn2": "",
"cardcd": "",
"udid": "qiantai2",
"txamt": "2500",
"orig_syssn": "20200305066100020000977813",
"surcharge_rate": "0",
"respcd": "0000",
"chnlsn": ""
}

補充說明

  • 沖正無法保證使用者未被扣款,建議搭配使用 交易查詢 API 驗證結果。
  • 沖正僅適用於即時失敗的交易,請勿用於已成功的訂單退款處理。
  • 若回應為 respcd=11431145,表示沖正處理中,應持續查詢其狀態直至確認結果。

Reversal(沖正) vs Close(關閉訂單)

部分錢包採用關閉訂單接口 /trade/v1/close 取代沖正。

支援的支付場景及 PayType

微信支付反掃

  • 800008:微信反掃
  • 800208:微信反掃支付
  • 801008:微信香港反掃支付(適用於向微信香港申請的商戶)

方法GET

如需於非支付寶/微信錢包上使用此接口,請與我們聯繫確認。

請求參數

參數名稱必填類型說明
mchidString(16)QFPay 配發的商戶號碼
syssn是*String(40)系統回傳的 QFPay 交易號
out_trade_no是*String(128)商戶自訂訂單編號
txamtInt(11)交易金額(分為單位)。建議金額 > 200。
txdtmString(20)交易時間,格式:YYYY-MM-DD hh:mm:ss
udidString(40)裝置識別碼,將於商戶後台顯示
  • syssnout_trade_no 至少擇一提供。

回應參數

參數名稱類型說明
orig_syssnString(40)原始 QFPay 交易號
syssnString(40)關單交易的 QFPay 交易號
out_trade_noString(128)商戶訂單編號
txamtInt(11)交易金額(單位:分)
txcurrcdString(3)幣別代碼,詳見 交易貨幣
txdtmString(20)原始交易時間
sysdtmString(20)系統處理時間。此值將用作結算截止時間。
chnlsnString錢包端交易號
respcdString(4)回應代碼:0000 = 成功,1143/1145 = 處理中,其餘 = 失敗
resperrString(128)結果描述
respmsgString(128)補充資訊