# 工作流实现微信支付退款场景

开发者可使用云开发工作流+云函数能力,快速对接微信支付退款相关的接口。

# 流程概览

本文档中我们将会实现下图中的步骤,实现简单的微信支付退款流程:

# 第 1 步:部署退款工作流模板,完成初始配置,并发布工作流

打开云开发控制台-「云函数」- 新建 - 工作流,选择工作流「使用微信支付申请退款」模板,并安装模板。

# 第 2 步:完成「申请退款」工作流的配置

模板部署完成后,进入工作流编辑器内完成配置。

在“申请退款”节点内,完成 API 的配置。

注意 更新 APIs 或方法后,入参需要重新配置为如下:

({
    manualTrigger.output
}) 

另外,首次使用的用户如果没有可用的微信支付 API 实例,可以新建凭证+API 实例。

支付通知回调的配置,可以配置成另一个工作流,或者已有 HTTP 服务的 URL:

# 第 3 步:完成「通知回调」工作流的配置

如果在第 2 步中,把通知回调配置为了另一条工作流,那么我们同样需要完成「通知回调」工作流的配置工作。

例如,我们可以使用自定义代码的节点,在支付回调中,修改云数据库内的订单状态:

const cloudbase = require("@cloudbase/node-sdk");

cloud.init({
  env: "<环境ID>",
});

const db = cloud.database();

// 示例:向 orders 集合中插入一条记录
const result = await db.collection("orders").add(wxpayTrigger.output.resource);

# 第 4 步:完成调用代码

工作流配置完成后,接下来我们通过调用工作流,完成退款场景。

退款可以在小程序端或者云函数内发起调用。

/**
 * 微信支付 - 申请退款
 */
 const cloud = require('wx-server-sdk');
 cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV });
 
 exports.main = async (event, context) => {
   const res = await cloud.callFunction({
     // 固定参数
     name: 'cloudbase_module',
     data: {
      // 工作流ID, 需从工作流属性中获取
       name: 'xxxxxxx',
       data: {
        /**
         * 更多参数参考微信支付文档:
         * https://pay.weixin.qq.com/doc/v3/merchant/4012556484
        */
         transaction_id: '42000021712024041829xxxxxx', // 微信订单号
         out_refund_no: '20240418151xxxx',  // 商户内部退款单号
         amount: {
           refund: 1, // 退款金额
           total: 1, // 原订单金额,
           currency: 'CNY',
         },
       },
     },
   });
   return res.result;
 };

可见,全程只有少量代码,即可完成发起微信支付退款逻辑,非常方便快捷。