支付寶 WAP / H5 支付
適用場景
- 使用 手機瀏覽器(非 App)進行付款
- 適用於商戶的 Mobile Web、WebApp、或引導用戶於瀏覽器開啟付款連結
- 支援錢包包括:
- 支付寶海外(
801107) - 支付寶香港(
801512) - 支付寶服務窗 H5(
800107)
- 支付寶海外(
備註
社交 App(如 WeChat、Facebook Messenger)常常無法跳轉至其他錢包 App,建議引導用戶在手機瀏覽器中開啟付款連結。
HTTP 請求
- API 端點:
/trade/v1/payment - 請求方法:
POST - 支付編碼對應表:
| 編碼 | 錢包名稱 | 描述 |
|---|---|---|
801107 | 支付寶海外 | Web 或 WAP 跨境支付 |
801512 | 支付寶香港 | 香港用戶 WAP 支付 |
800107 | 支付寶服務窗 H5 | JSAPI + 授權碼機制支付 |
請求參數
請求參數格式請參考公共支付請求參數,以下僅列出與支付寶 WAP / H5 相關的部分參數:
| 參數名稱 | 是否必填 | 描述 |
|---|---|---|
txamt | 是 | 交易金額(單位為分),建議大於 200 |
txcurrcd | 是 | 貨幣代碼,例如 HKD |
pay_type | 是 | 請參考上述 PayType 表 |
out_trade_no | 是 | 商戶自訂訂單編號,需唯一 |
txdtm | 是 | 交易時間,格式:YYYY-MM-DD hh:mm:ss |
return_url | 是 | 成功付款後跳轉用戶的頁面 |
notify_url | 是 | 非同步通知商戶後端付款結果的接收端點 |
goods_name | 是 | 商品名稱(僅部分錢包強制) |
mchid | 是 | 商戶號,如由 QFPay 分配則為必填 |
openid | 視情況 | 僅適用於 800107,即服務窗 H5 授權碼 |
limit_pay | 否 | 僅適用於中國大陸支付場景 |
請求範例
- Python
- Java
- Javascript
- Php
#coding=utf8
import urllib.request, urllib.parse, urllib.error, urllib.request, urllib.error, urllib.parse, hashlib
import requests
import datetime
import string
# 輸入用戶端憑證
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' # 以分為單位,建議金額大於 200 以避免風控攔截
txcurrcd = 'HKD'
pay_type = '801107'
auth_code='283854702356157409'
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())
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
public class TestMain {
public static void main(String args[]){
String appcode="D5589D2A1F2E42A9A60C37*********";
String key="0E32A59A8B454940A2FF39*********";
String mchid="ZaMVg*****";
String pay_type="801107";
String out_trade_no= "01234567890123";
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String date=df.format(new Date());
String txdtm=date;
String txamt="10";
String txcurrcd="EUR";
Map<String, String> unsortMap = new HashMap<>();
unsortMap.put("mchid", mchid);
unsortMap.put("pay_type", pay_type);
unsortMap.put("out_trade_no", out_trade_no);
unsortMap.put("txdtm", txdtm);
unsortMap.put("txamt", txamt);
unsortMap.put("txcurrcd", txcurrcd);
//unsortMap.put("product_name", product_name);
//unsortMap.put("valid_time", "300");
String data=QFPayUtils.getDataString(unsortMap);
System.out.println("Data:\n"+data+key);
String md5Sum=QFPayUtils.getMd5Value(data+key);
System.out.println("Md5 Value:\n"+md5Sum);
String url="https://test-openapi-hk.qfapi.com";
String resp= Requests.sendPostRequest(url+"/trade/v1/payment", data, appcode,key);
System.out.println(resp);
}
}