最佳實踐丨使用雲函數+雲調用,四步搞定微信支付

概述

微信支付是雲開發原生支持的微信生態能力之一,開發者只需要簡單調用相應的函數即可完成整套支付流程,安全又高效。部分優勢包括:

  • 無需關心證書、簽名,支付流程簡化;
  • 基於微信私有協議和私有鏈路,更加安全、高效;
  • 免運維,高可用性;
  • 按需擴容,彈性伸縮,按量計費,成本縮減;
  • 支持通過雲函數接受支付回調,無需自建回調服務。

流程對比:傳統流程 vs 雲開發

代碼示例

第 1 步:小程序調用雲函數

C 端用戶發起支付流程後,小程序端調用雲函數(此處假設雲函數名爲 makeOrder):

// 小程序代碼
wx.cloud.callFunction({
  name: "makeOrder",
  data: {
    /* 開發者自定義參數 */
  }
});

第 2 步:雲函數生成訂單,返回訂單信息

雲函數 makeOrder 收到調用之後,使用微信服務端 SDK 提供的 API,無需證書和簽名,可直接生成訂單。

生成訂單之後,利用 CloudPay.unifiedOrder() 統一下單接口,將訂單信息返回給小程序。

CloudPay.unifiedOrder() 接口文檔:

https://developers.weixin.qq.com/miniprogram/dev/wxcloud/reference-sdk-api/open/pay/CloudPay.unifiedOrder.html

// 雲函數 makeOrder
const cloud = require("wx-server-sdk");
cloud.init({
  env: cloud.DYNAMIC_CURRENT_ENV
});

exports.main = async (event, context) => {
  const res = await cloud.cloudPay.unifiedOrder({
    body: "小秋TIT店-超市",
    outTradeNo: "1217752501201407033233368018",
    spbillCreateIp: "127.0.0.1",
    subMchId: "1900009231",
    totalFee: 1,
    envId: "test-f0b102",
    functionName: "payCallback" // 支付回調的函數名
  });
  return res;
};

第 3 步:小程序端發起支付

小程序端收到雲函數返回的訂單信息後,發起支付:

// 小程序代碼
wx.cloud.callFunction({
  name: "makeOrder",
  data: {
    /* 開發者自定義參數 */
  },
  success: (res) => {
    // 取得雲函數返回的訂單信息
    const payment = res.result.payment;
    // 調起微信客戶端支付
    wx.requestPayment({
      ...payment,
      success(res) {
        /* 成功回調 */
      },
      fail(res) {
        /* 失敗回調 */
      }
    });
  }
});

第 4 步:使用雲函數接收支付回調,完成支付流程

用戶完成付款之後,微信後臺將會調用指定的雲函數(此處假設名爲 payCallback),傳入的參數中會帶有訂單信息。

開發者可以在此雲函數中,實現自己的發貨、完成訂單的邏輯。

// 雲函數 payCallback
exports.main = async (event, context) => {
  const {
    return_code, // 狀態碼
    appid, // 小程序 AppID
    mch_id, // 微信支付的商戶號
    device_info, // 微信支付分配的終端設備號
    openid, // 用戶在商戶appid下的唯一標識
    trade_type, // 交易類型:JSAPI、NATIVE、APP
    bank_type // 銀行類型
    // ......
    // 更多參數請參考:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_7&index=8
  } = event;

  /*
    開發者自己的邏輯
  */

  // 向微信後臺返回成功,否則微信後臺將會重複調用此函數
  return { errcode: 0 };
};

相關文檔:

雲函數文檔:

https://docs.cloudbase.net/cloud-function/introduce.html

雲調用文檔:

https://developers.weixin.qq.com/miniprogram/dev/wxcloud/guide/openapi/openapi.html

wx-server-sdk 文檔:

https://developers.weixin.qq.com/miniprogram/dev/wxcloud/reference-sdk-api/Cloud.html

CloudPay.unifiedOrder() 接口文檔:

https://developers.weixin.qq.com/miniprogram/dev/wxcloud/reference-sdk-api/open/pay/CloudPay.unifiedOrder.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章