zoukankan      html  css  js  c++  java
  • 最佳实践丨使用云函数+云调用,四步搞定微信支付

    概述

    微信支付是云开发原生支持的微信生态能力之一,开发者只需要简单调用相应的函数即可完成整套支付流程,安全又高效。部分优势包括:

    • 无需关心证书、签名,支付流程简化;
    • 基于微信私有协议和私有链路,更加安全、高效;
    • 免运维,高可用性;
    • 按需扩容,弹性伸缩,按量计费,成本缩减;
    • 支持通过云函数接受支付回调,无需自建回调服务。

    流程对比:传统流程 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

  • 相关阅读:
    Hadoop 倒排索引
    Hadoop 电话通信清单
    Hadoop 多表关联
    Ubuntu 16.04下Samba服务器搭建和配置(配截图)
    Hadoop 单表关联
    Hadoop 排序
    Hadoop 数据去重
    Hadoop 学生平均成绩
    MapReduce计算模型的优化
    win7系统下dos界面无法自由调整大小
  • 原文地址:https://www.cnblogs.com/CloudBase/p/14987727.html
Copyright © 2011-2022 走看看