最佳实践丨使用云函数+云调用,四步搞定微信支付

摘要:
在这个云功能中,开发人员可以实现自己的发货和完成订单的逻辑。

概述

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

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

流程对比:传统流程 vs 云开发

最佳实践丨使用云函数+云调用,四步搞定微信支付第1张

代码示例

第 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

免责声明:文章转载自《最佳实践丨使用云函数+云调用,四步搞定微信支付》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Win7下无法启动sql server fulltext search (mssqlserver)的问题基于Locust、Tsung的百万并发秒杀压测案例[转]下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

tesseract-ocr

标签:pytesseract.pytesseract   winerror    其实也不算自己写的,在网上东找找西找找,合一块问题就解决了。 和谐社会的程序猿不都这样么。。 上正菜。 先安装pillow windows 10上面先打开命令提示符: 注:不知道为啥我装python 3.5的时候蛋疼的选择了管理员安装,所以运行命令提示符的话也需要管理员权限。...

uni-app中nvue (weex) 注意事项

前言 uni-app 是 DCloud 出品的新一代跨端框架,可以说是目前跨端数最多的框架之一了,目前支持发布到:App(Android/iOS)、H5、小程序(微信小程序/支付宝小程序/百度小程序/字节跳动小程序),目前市面上类似的框架还有:Taro(京东出品)、Megalo(网易出品)。 uni-app 的 nvue 说白了就是 weex 的那一套东西...

Charles 手机抓包HTTPS设置以及证书安装

本文参考:charles 抓包手机 charles经常会进行手机上的网页抓包,比如去copy别人网站图片或脚本的时候o(∩_∩)o ; 手机抓包的原理,和PC类似,手机依靠charles与服务端进行对话; 目标:把手机的网络委托给charles进行代理; 手机抓包设置,需要进行3步; 第一步,在charles里设置允许手机联网的权限;你需要把charles...

Minikube之Win10单机部署Kubernetes(k8s)自动化容器操作的开源平台

Minikube之Win10单机部署Kubernetes(k8s)是自动化容器操作的开源平台,基于这个平台,你可以进行容器部署,资源调度和集群扩容等操作。如果你曾经用过Docker部署容器,那么可以将Docker看成Kubernetes底层使用的组件,Kubernetes是Docker的上层封装,通过它可以很方便的进行Docker集群的管理。今天我们使用m...

小程序自定义头部导航栏

第一步:在app.json中设置 目前微信小程序不支持单个页面设置,一旦决定要使用自定义导航栏后,那么每个页面都需要设置 导航栏组件目录: index.wxml 文件 <view class='nav-wrap' style='height: {{height*2 + 20}}px;'> <!--导航栏 中间的标题 --&g...

支付功能测试

  支付功能测试的执行 1、公司交给专门负责支付接口等相关的人员进行支付测试 2、如果是支付宝支付可以用到支付沙漏,模拟支付测试。但是好像只能核对成功支付的情况。 3、给公司申请测试备用金,继续实际支付操作 4、把收款方改成自己的收款账号。这样就可以自己支付,自己收款,避免浪费自己的金钱做公司项目的支付测试。但是这也是有风险的。万一扣款成功,但是支付的金...