跳轉到主要內容
Wechat Mp Process微信小程式支付適用於 微信小程式(Mini Program)內部場景
商戶透過 QFPay API 建立交易後,將回傳的 pay_params 傳入 wx.requestPayment 以喚起微信支付模組。

整體流程

  1. 完成微信實名認證
  2. 透過小程式取得 openid
  3. 呼叫 /trade/v1/payment
  4. 取得 pay_params
  5. 呼叫 wx.requestPayment
  6. 透過 Webhook 或查詢 API 確認最終結果

Step 1:微信實名認證

商戶必須於微信官方平台完成身份驗證後,方可使用微信支付功能。 官方文件:
https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/login/auth.code2Session.html

Step 2:取得 openid

完成實名認證後,透過小程式登入流程取得使用者 openid 通常透過 wx.login() 取得 code,再呼叫微信後端 API 換取 openid

Step 3:建立交易

Endpoint

Create Mini Program Payment
POST /trade/v1/payment
PayType: 800213

Request Headers

Header必填說明
X-QF-APPCODEQFPay 分配之 AppCode
X-QF-SIGN依簽名規則生成

請求參數

參數必填說明
sub_openid使用者 openid
out_trade_noMerchant Order Number(商戶訂單號,必須唯一)
txamt金額(最小幣值單位,例如 100 = 1 元)
txcurrcd三位貨幣代碼
txdtmTransaction Time(YYYY-MM-DD hh:mm:ss
expired_time訂單過期時間(5–120 分鐘)
limit_pay設為 no_credit 可禁止信用卡(僅限中國大陸)
extend_info實名資訊(僅限中國大陸公民)

extend_info 範例

Real-name Example
{
  "user_creid": "430067798868676871",
  "user_truename": "\\u5c0f\\u6797"
}

Node.js 呼叫範例

Mini Program API Call Example
qfPayOpenAPI: function () {
  let app_code = '******';
  let client_key = '******';
  let environment = 'https://test-openapi-hk.qfapi.com/trade/v1/payment';

  let payload = {
    txamt: 100,
    txcurrcd: 'SGD',
    pay_type: '800213',
    out_trade_no: '0123456789',
    txdtm: '2020-07-03 03:14:29',
    sub_openid: 'oS80_5dxekECAOlVBeQFk34q123s'
  };

  var ordered = {};
  Object.keys(payload).sort().forEach(function(key) {
    ordered[key] = payload[key];
  });

  var str = [];
  for (var p in ordered) {
    str.push(p + "=" + ordered[p]);
  }

  var signature = utilMd5.hexMD5(str.join("&") + client_key).toUpperCase();

  wx.request({
    url: environment,
    data: payload,
    method: 'POST',
    header: {
      'X-QF-APPCODE': app_code,
      'X-QF-SIGN': signature,
      'content-Type': 'application/x-www-form-urlencoded'
    },
    success: (res) => {
      if (res.statusCode == 200) {
        this.weChatPayment(res);
      }
    }
  })
}

回應參數(重點)

參數說明
syssnQFPay Transaction ID
respcdReturn Code(0000 = 成功建立交易)
sysdtmSystem Time
pay_params小程式支付所需參數

pay_params 結構

欄位說明
appId小程式 AppID
timeStamp時間戳
nonceStr隨機字串
packageprepay_id
signType簽名方式
paySign簽名值

Step 4:喚起支付模組

wx.requestPayment Example
weChatPayment: function(res) {
  wx.requestPayment({
    timeStamp: res.data.pay_params.timeStamp,
    nonceStr: res.data.pay_params.nonceStr,
    package: res.data.pay_params.package,
    signType: res.data.pay_params.signType,
    paySign: res.data.pay_params.paySign,
    success: function(res){},
    fail: function(res){},
    complete: function(res){}
  })
}
respcd = 0000 僅代表交易建立成功。
最終支付結果必須透過:
  • Webhook 非同步通知
  • 交易查詢 API 確認。

微信小程式樣板

您可下載範例樣板快速開始: QFPay 微信小程式樣板
/static/files/qfpay_mini_program_payments_boilerplate.zip

設定步驟

  1. 向 QFPay 註冊並綁定您的微信 AppID
  2. 登入 https://mp.weixin.qq.com
  3. 將以下網域加入 request 合法網域白名單:
Allowed Domain Example
https://test-openapi-hk.qfapi.com
  1. 將樣板專案部署至小程式開發環境
  2. 使用雲函式 getUserOpenID 取得 openid
  3. 呼叫支付 API

小結

  • 僅適用於微信小程式內部場景
  • 必須先取得 openid
  • API 成功僅代表交易建立
  • 最終狀態請依 Webhook 或查詢 API 為準