跳到主要内容

支付宝线上上扫码支付


For code instructions select Python, Java, Node.js or PHP with the tabs below.

#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. Suggest value > 200 to avoid risk control
txcurrcd = 'HKD'
pay_type = '801101' # Alipay Web Payment = 801101
auth_code='283854702356157409' #CPM only
out_trade_no = '01234567890123'
txdtm = current_time
goods_name = 'test1'
mchid = 'ZaMVg*****'
key = client_key


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

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:

{
"sysdtm": "2020-04-13 10:30:34",
"paydtm": "2020-04-13 10:30:34",
"txcurrcd": "HKD",
"respmsg": "",
"pay_type": "801101",
"cardcd": "",
"udid": "qiantai2",
"txdtm": "2020-04-13 10:30:34",
"txamt": "300",
"resperr": "success",
"out_trade_no": "4K35N374II7UJJ8RGIAE45O2CVHGHFF0",
"syssn": "20200413000300020087033882",
"respcd": "0000",
"pay_url": "https://globalmapi.alipay.com/gateway.do?total_fee=3.0&secondary_merchant_name=###merchant_name###&out_trade_no=20200413000300020087033882&secondary_merchant_industry=7011&service=create_forex_trade&_input_charset=UTF-8&sign=02beb99974ce6167666280b9727c4444&currency=THB&notify_url=https%3A%2F%2Fo2.qfpay.com%2Fonline-test%2Ftrade%2Falipay%2Fv1%2Fonline_notify&order_valid_time=1800&secondary_merchant_id=2565075&sign_type=MD5&partner=2088631377368888&product_code=NEW_OVERSEAS_SELLER&order_gmt_create=2020-04-13+10%3A30%3A34&return_url=&subject=###merchant_name###",
"chnlsn": ""
}
备注

支付宝香港不支持原生支付宝收银台页面, 开发人员需要请求二维码并使用iframe嵌入

Web/WAP支付

客户使用支付宝在商户网站上购物, 用户扫描显示的二维码进行支付, 确认总金额后进行支付. 最后可以用return_url参数将用户重定向到一个商户网站上选中的页面. 支付宝以人民币计费实时从消费者的支付宝钱包中扣除支付金额, QFPay 最终会以当地货币结算支付金额.

HTTP请求

POST ../trade/v1/payment
PayType: 801101 支付宝线上上扫码支付 (海外商戶)
PayType: 801107 支付宝线上上WAP支付 (海外商戶)
PayType: 801501 支付宝线上扫码支付 (香港商戶)
PayType: 801512 支付宝线上WAP支付 (香港商戶)

请求参数

参数名称参数编码是否必填参数类型描述
订单支付金额txamtInt(11)当前货币最小计量单位计算,只允许整数类型 (i.e. 100 = $1),建议数值大于200,避免因支付金额过低而被交易风控。
币种txcurrcdString(3)交易币种, 请查看币种表以获取完整的可选用的币种
支付类型pay_typeString(6)支付宝线上支付 = 801101
外部订单号out_trade_noString(128)开发者自定义订单号,在同一商户账户中的每笔交易和退款请求该参数值唯一
请求交易时间txdtmString(20)交易时间格式:
YYYY-MM-DD hh:mm:ss
交易过期时间expired_time
(仅限正扫支付)
String(3)以分钟为计时的二维码过期时间,默认的过期时间是30分钟. 该参数可以被手动设置为最小5分钟,最大120分钟
该参数可用于:
800201 - WeChat scan code
商品名称标识goods_nameString(64)商品名称 / 标识: 不能超过 20 个字母数字或包含特殊字符。 APP支付不能为空。 如果参数是汉字,则需要使用UTF-8编码。
子商户号mchidString(16)标识子商户身份,由QFPay 分配(渠道系统后台查看对应商户(非业务员)子商户号,被视为对应商户的交易)
时区txzoneString(5)用于记录本地下单时间,默认为北京时间+0800
设备唯一idudidString(40)唯一的设备ID,显示在商户管理后台上.
跳转地址return_urlString(512)支付成功后的用户跳转地址. 支付宝WAP限制了return_url最大为200个字符.

响应参数

参数名称参数编码参数类型描述
支付类型pay_typeString(6)支付宝 Web/Wap 支付 = 801101/801107
系统时间sysdtmString(20)格式:YYYY-MM-DD hh:mm:ss
这个参数值被用作结算截止时间
请求交易时间txdtmString(20)格式:YYYY-MM-DD hh:mm:ss
调试信息resperrString(128)
订单支付金额txamtInt(11)
信息描述respmsgString(128)
外部订单号out_trade_noString(128)外部订单号
QFPay 订单号syssnString(40)
返回码respcdString(4)0000 = 请求成功.
1143/1145 = 商户需要持续查询交易结果
所有其他的返回码表明交易失败.请参阅 支付状态码 获得完整返回类型列表
支付链接pay_urlString(512)