跳到主要内容

反扫支付

CPM process-flow

反扫支付API请求

请求头部:

{
Content-Type: application/x-www-form-urlencoded;
charset=UTF-8,
Content-Length: 218,
Chunked: false
X-QF-APPCODE:A6A49A66B4C********94EA95032
X-QF-SIGN:3b020a6349646684ebeeb0ec2cd3d1fb
}

请求本体:

{
auth_code=13485790*******88557&goods_name=qfpay&mchid=R1zQrTdJnn&out_trade_no=Native201907221520536a25477909&pay_type=800208&txamt=10&txcurrcd=HKD&txdtm=2019-07-22 15:20:54&udid=AA
}
#coding=utf8
import urllib.request, urllib.parse, urllib.error, urllib.request, urllib.error, urllib.parse, hashlib
import requests
import datetime
import string

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

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


# Body payload
txamt = '10' #In USD,EUR,etc. Cent
txcurrcd = 'HKD'
pay_type = '800108' # Alipay CPM = 800108 , WeChat Pay CPM = 800208
auth_code = '280438849930815813' # Mandatory for CPM
out_trade_no = '01234567890123'
txdtm = current_time
goods_name = 'test1'
mchid = 'ZaMVg*****'
notify_url = 'https://xxx.com/notify/success'
key = client_key


#data ={'txamt': txamt, 'txcurrcd': txcurrcd, 'pay_type': pay_type, 'out_trade_no': out_trade_no, 'txdtm': txdtm, 'goods_name': goods_name, 'udid': udid, 'auth_code': auth_code, 'mchid': mchid, 'notify_url': notify_url}
data ={'txamt': txamt, 'txcurrcd': txcurrcd, 'pay_type': pay_type, 'out_trade_no': out_trade_no, 'txdtm': txdtm, 'mchid': mchid, 'auth_code': auth_code}

r = requests.post(environment+"/trade/v1/payment",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:

{
"pay_type": "800108",
"sysdtm": "2019-07-22 15:20:54",
"paydtm": "2019-07-22 15:20:56",
"txdtm": "2019-07-22 15:20:54",
"udid": "AA",
"txcurrcd": "EUR",
"txamt": 10,
"resperr": "交易成功",
"respmsg": "OK",
"out_trade_no": "201907221520536a25477909",
"syssn": "20190722000300020081074842",
"respcd": "0000",
"chnlsn": "4200000384201907223585006133"
}

POST ../trade/v1/payment

支付类型描述
800008微信、支付宝﹑银联云闪付反扫支付
800108支付宝跨境反扫支付
800208微信反扫支付
801008微信香港反扫支付 (适用于向微信香港申请的商戶)
805808PayMe 反扫支付
800708银联云闪付反扫支付

客户在他们的二维码钱包生成一个动态二维码并展示给收银机扫描,改场景仅限于线下支付. 如果返回的响应编码是 1143/1145, 则表示交易正在处理中或要求客户输入钱包密码. 商户必须 查询交易结果 对交易状态进行最终评估.

请求参数

参数名称参数编码是否必填参数类型描述
公共支付参数请参阅有关交易的公共支付参数
微信或者支付宝的授权码auth_code
(仅限于反扫支付)
String(128)指定扫描条码/二维码的授权码, 在每个授权中返回的 auth_code 是唯一的. 每个 auth_code 只能使用一次并且会自动过期. 为了测试支付宝和微信支付的反扫支付, auth_code可以通过任何二维码读取器提取, 或者在条形码下方的消费者钱包中手动找到“auth_code”.

响应参数

参数名称参数编码是否必填参数类型描述
公共响应参数请参阅有关交易的公共支付参数