跳到主要内容

退款

提示

只有返回码为0000(交易成功)的交易可以被退款

退款API端点

请求头部:

{
Content-Type: application/x-www-form-urlencoded;
X-QF-APPCODE: D5589D2A1F2E42A9A60C37**********
X-QF-SIGN: 6FB43AC29175B4602FF95F8332028F19
}

请求正文:

{
txamt=10&syssn=20191227000200020061752831&out_trade_no=12345678&txdtm=2019-12-27 10:39:39&key=0E32A59A8B454940A2FF39**********&mchid=ZaMVg*****
}

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 = 'D5589D2A1F2E42A9A60C37**********'
client_key = '0E32A59A8B454940A2FF39**********'


# 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))


# 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")
s = hashlib.md5(unsign_str).hexdigest()
return s.upper()


# Body payload
txamt = '10' #Partial or full refund amount
syssn = '20191227000200020061752831' #Original transaction number
out_trade_no = random_string
txdtm = current_time
key = client_key
mchid = 'ZaMVg*****'


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

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

print(r.json())

The above command returns JSON structured like this:

{
"orig_syssn": "20191227000200020061752831",
"sysdtm": "2019-12-27 11:11:23",
"paydtm": "2019-12-27 11:11:26",
"txdtm": "2019-12-27 11:10:38",
"udid": "qiantai2",
"txcurrcd": "EUR",
"txamt": "10",
"resperr": "success",
"respmsg": "",
"out_trade_no": "RGNOEIVU9JZLNP9GGYXWXCW7OEMI720F",
"syssn": "20191227000300020061652643",
"respcd": "0000",
"chnlsn": "2019122722001411461404119764",
"cardcd": ""
}

HTTP请求

POST ../trade/v1/refund

商户可以使用退款API对交易进行退款。商户账户必须在同一交易日有足够的交易金额才能进行交易退款, 单笔交易的最高退款金额不得超过原始付款金额。除非另有说明,退款请求一旦提交并被接受,就不可撤销。不同支付渠道的退款限量和最长退款期限有所不同, 请联系您的QFPay 支援代表以获取更多信息。

请求参数

参数名称参数编码是否必填参数类型描述
QFPay 订单流水号syssnString(128)计划退款的原订单的 syssn
退款外部订单号out_trade_noString(128)外部退款订单号/商户平台退款订单号: 这个参数对于系统中同一商户账户下的每次支付和退款请求必须是唯一的
退款金额txamtInt(11)退款金额, 以分为单位 (i.e. 100 = $1)
部分退款和全部退款都需要, 有部分支付通道不支持部分退款
请求交易时间txdtmString(20)格式: YYYY-MM-DD hh:mm:ss
子商户号mchidString(16)商户会或不会被提供 mchid. 如果已经被提供 mchid , 除特殊情况下在呼叫API时必须提交 mchid. 与之相反的是, 如果并未被提供 mchid, 商户无需在API请求中传递参数 mchid.
交易时区txzoneString(5)用于记录本地下单时间,默认为北京时间+0800
设备唯一idudidString(40)唯一的交易设备ID

响应参数

参数名称参数编码参数类型描述
退款交易唯一流水号syssnString(40)新创建的退款交易的ID
原订交易流水号orig_syssnString(128)被用于退款的原交易的交易ID
订单金额txamtInt(11)退款金额, 以分为单位 (i.e. 100 = $1)
系统交易时间sysdtmString(20)格式: YYYY-MM-DD hh:mm:ss
这个值被用作结算截止时间
返回编码respcdString(4)0000-请求成功.
1143/1145 - 商户需要持续查询退款交易状态.
所有其他的返回编码都是失败值. 请根据 交易状态码 获取完整的信息.
响应信息resperrString(128)响应的信息
净支付金额cash_feeString用户实际付款金额 = 交易金额 - 优惠
支付货币cash_fee_typeString实际支付货币 e.g. CNY
净退款金额cash_refund_feeString实际退款金额
退款货币cash_refund_fee_typeString实际退款货币 e.g. CNY