跳到主要内容

微信掃碼支付(WeChat QR Code Payment)

WeChat QR Code Payment Flow

產品說明

微信掃碼支付允許顧客使用 微信 App 的「掃一掃」功能,掃描商戶網站或系統產生的 專屬支付二維碼(QRCode) 以完成付款。

在此支付模式下:

  • 商戶系統會將訂單資訊嵌入至唯一的 QR Code
  • 顧客掃碼後,微信將進行必要的安全檢查
  • 驗證完成後即會完成付款流程

此方式常用於:

  • 桌面網站付款
  • POS 顯示 QR Code
  • Kiosk / 自助機付款場景

實名認證(選用)

商戶可選擇啟用 微信實名認證(Real-name Verification)。

備註

目前實名認證 僅適用於中國大陸公民,需提供:

  • 付款人真實姓名
  • 中國居民身份證號碼

實名認證規則說明:

  • 若商戶已提供身份資訊,付款人微信錢包(如綁定銀行卡)需與提供資料一致
  • 若付款人尚未綁定銀行卡,仍可完成付款
  • 是否強制實名,依商戶開通設定為準

範例程式碼(多語言)

本文件提供以下語言的請求範例,說明如何呼叫微信掃碼支付 API:

  • Python
  • Java
  • JavaScript (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

# 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 = '800201'
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, 'udid': udid, '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())

API 回傳結果說明

API 成功請求後,將回傳包含 QRCode URL 的回應資料。

信息

商戶需將回傳的 qrcode 欄位內容轉換為 QR Code 圖像,並展示給顧客掃描。

{
"sysdtm": "2020-04-10 11:45:44",
"paydtm": "2020-04-10 11:45:44",
"txcurrcd": "HKD",
"respmsg": "OK",
"qrcode": "weixin://wxpay/bizpayurl?pr=4PsXP5N",
"pay_type": "800201",
"cardcd": "",
"udid": "qiantai2",
"txdtm": "2020-04-10 11:45:44",
"txamt": "300",
"resperr": "success",
"out_trade_no": "3Z6HPCS6RN54J2Y8LUQM8RBDVBA9URYE",
"syssn": "20200410000300020086358791",
"respcd": "0000",
"chnlsn": ""
}

HTTP 請求說明

  • MethodPOST
  • Endpoint/trade/v1/payment
  • PayType800201(微信掃碼支付)

請求參數

參數名稱參數編碼二級參數是否必填參數類型描述
訂單支付金額txamtInt(11)單位為最小幣值(如 100 = $1),僅支援整數。建議大於 200 以避免被風控拒付。
幣種txcurrcdString(3)請參考 支援的交易貨幣
支付類型pay_typeString(6)微信掃碼支付固定為 800201。參見 支付類型一覽表
外部訂單號out_trade_noString(128)商戶自定義交易單號,在同一商戶下需具備唯一性。
請求交易時間txdtmString(20)時間格式為 YYYY-MM-DD hh:mm:ss
交易到期時間expired_time否(限正掃)String(3)單位為分鐘,預設 30 分鐘,可設為 5–120 分鐘。
商品名稱goods_nameString(64)建議僅使用英數與常規標點,若為中文請使用 UTF-8 編碼。
子商戶號mchidString(16)僅代理商或特定場景需提供,請聯絡技術人員確認是否必填。
設備唯一 IDudidString(40)商戶裝置識別碼,將出現在後台交易列表中。
人民幣標記rmb_tagString(1)如支付幣種為 CNY 且使用香港錢包,需設定為 Y
客戶擴展資訊extend_infouser_creid, user_truenameObject實名制身份驗證,僅限中國大陸公民。參數 user_creid 中包含消費者的身分證號碼,user_truename 中必須提供編碼形式或漢字書寫的付款人真實姓名。 例子如下: extend_info = '{"user_creid":"430067798868676871","user_truename":"\\u5c0f\\u6797"}'

回應參數

參數名稱參數編碼類型描述
交易類型pay_typeString(6)固定為 800201,代表微信掃碼支付。
系統交易時間sysdtmString(20)QFPay 系統產生的交易完成時間。
請求交易時間txdtmString(20)商戶提交的原始交易時間。
響應訊息resperrString(128)系統處理結果,例如 OK、failed。
支付金額txamtInt(11)實際扣款金額(單位為最小幣值)。
額外留言respmsgString(128)附加錯誤提示或返回資訊。
外部交易號碼out_trade_noString(128)商戶提供的訂單編號。
QFPay 訂單編號syssnString(40)QFPay 系統產生的訂單 ID。
返回碼respcdString(4)0000 表示成功;其餘代碼請參考 交易狀態碼
通道流水號chnlsnString第三方平台回傳的交易流水號(如微信訂單編號)。
注意

當回傳碼為 11431145 時,代表交易狀態未確定,商戶必須主動查詢交易結果


小結

  • 微信掃碼支付適合「顯示 QR Code → 顧客主動掃碼」的場景
  • 商戶需自行顯示 QR Code 圖像
  • 可選擇是否啟用實名認證
  • 建議實作交易結果查詢機制以確保狀態正確