跳到主要内容

支付寶線上支付(Web/WAP)

客戶可在商戶網站上使用支付寶完成交易。使用者掃描顯示的二維碼確認金額並付款。付款完成後,系統可透過 return_url 參數將使用者導回商戶指定頁面。支付寶以人民幣即時從用戶錢包扣除金額,QFPay 則以港幣或本地貨幣結算給商戶。

HTTP 請求

端口:
POST ../trade/v1/payment

PayType 對應類型:

編碼描述
801101支付寶線上掃碼支付(海外商戶)
801107支付寶線上 WAP 支付(海外商戶)
801501支付寶線上掃碼支付(香港商戶)
801512支付寶線上 WAP 支付(香港商戶)

請求參數(Request Parameters)

參數名稱參數代碼必填資料型別描述
訂單金額txamtInt(11)以最小單位(如 100 = $1)計算。建議大於 200 以避免風控。
幣種txcurrcdString(3)請參閱幣種列表
支付方式pay_typeString(6)支付寶 Web 支付:801101。
外部訂單編號out_trade_noString(128)商戶自訂交易編號,於同一商戶帳戶中必須唯一。
交易時間txdtmString(20)時間格式:YYYY-MM-DD hh:mm:ss
過期時間expired_time否(正掃限定)String(3)單位分鐘,預設 30 分鐘,允許範圍為 5–120 分鐘。
適用於:800201(微信掃碼)
商品名稱goods_nameString(64)最多 20 個字元(含中英文及數字)。若為中文需使用 UTF-8 編碼。
子商戶編號mchidString(16)若提供則為必填,否則請勿傳入。由 QFPay 分配。
設備唯一 IDudidString(40)裝置代碼,將顯示於商戶後台。
成功跳轉網址return_urlString(512)支付完成後導向的 URL。WAP 限制為 200 字元內。

回應參數(Response Parameters)

參數名稱參數代碼資料型別描述
支付方式pay_typeString(6)回傳支付方式,例如:801101 表示 Web 支付。
系統時間sysdtmString(20)格式:YYYY-MM-DD hh:mm:ss,作為結算截止依據。
交易時間txdtmString(20)發送請求時的時間。
錯誤訊息resperrString(128)如有錯誤則此欄回傳描述。
交易金額txamtInt(11)付款金額(單位為最小單位)。
附加訊息respmsgString(128)其他訊息(可用於除錯)。
外部訂單編號out_trade_noString(128)商戶自訂交易編號。
QFPay 訂單號syssnString(40)QFPay 系統交易編號。
回應碼respcdString(4)0000 表成功;
11431145 表示仍處理中;
其他為失敗。詳見交易狀態碼
支付連結pay_urlString(512)用戶端用於生成 QR Code 的支付連結。

程式碼範例

請從下方選擇語言查看示例程式碼:Python、Java、Node.js 或 PHP。
#coding=utf8
import urllib.request, urllib.parse, urllib.error, urllib.request, urllib.error, urllib.parse, hashlib
import requests
import datetime
import string

# API 憑證
environment = 'https://test-openapi-hk.qfapi.com'
app_code = 'D5589D2A1F2E42A9A60C37*********'
client_key = '0E32A59A8B454940A2FF39**********'


# 當前時間
current_time = datetime.datetime.now().replace(microsecond=0)

print(current_time)

# 建立簽名函數
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()


# 請求參數
txamt = '10'
txcurrcd = 'HKD'
pay_type = '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}

# 發送 POST 請求
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())

JSON 回應範例

{
"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-hk.qfapi.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": ""
}

備註

提示

請將 QR Code 或 iframe 指向回應中的 pay_url。:::

注意

請勿重複使用 out_trade_no。:::

信息

若回傳 respcd = 1143/1145,請使用 /trade/v1/query API 查詢最終交易結果。