微信支付

COOL

v1.0.3 更新于1天前

说明文档
回复列表 (0)

介绍

提供微信支付的相关功能,支付、下单、退款、生成订单号等。

基于wechatpay-node-v3二次封装,用法可以参照官方文档。

标识

调用插件的时候需要用到标识,标识是唯一的,不能重复,建议使用英文,不要使用中文,对应插件 plugin.json 中的 key 字段

  • 标识:pay-wx

配置

{
  "appid": "直连商户申请的公众号或移动应用appid",
  "mchid": "商户号",
  "notify_url": "回调链接",
  "publicKey": "公钥的文件的http地址或者文件路径",
  "privateKey": "私钥的文件的http地址或者文件路径",
  "verifyPublicKey": "可选,回调验签如果是公钥模式必填,证书的http地址或者文件路径",
  "key": "微信商户 v3密钥"
}

提示

文件路径可以这样配置,@baseDir/xxx,@baseDir 是特殊的关键字符, 表示项目根目录/src

verifyPublicKey,2024 年 11 月 1 日起,新申请的微信商户回调通知改为公钥证书模式,此项必填

方法

下面是插件提供的一些方法

  • createOrderNum

创建订单号,基于时间戳+唯一字符串+随机数+可选的子 ID

   /**
   * 生成订单号,基于时间戳+唯一字符串+随机数+可选的子ID
   * @param subId 可选,如你的订单ID, 或者用户ID的一些组合
   * @returns 订单号
   */
  createOrderNum(subId?: string)
  • getInstance

获得微信支付 SDK 实例

  /**
   * 获得微信支付SDK实例
   * @param config 动态配置,有多个商户号或者多个应用的时候,可以动态配置
   * @returns
   */
  async getInstance(config?: {
    // 直连商户申请的公众号或移动应用appid。
    appid: string;
    // 商户号
    mchid: string;
    // APIv3密钥
    key: string;
    // 回调链接
    notify_url: string;
    // 公钥
    publicKey: string;
    // 私钥
    privateKey: string;
  })
  • signVerify

验签,支付回调的时候需要验签

/**
   * 验签
   * @param ctx 请求上下文
   * @param config 动态配置
   * @returns 验签结果
   */
  async signVerify(
    ctx,
    config?: {
      // 直连商户申请的公众号或移动应用appid。
      appid: string;
      // 商户号
      mchid: string;
      // APIv3密钥
      key: string;
      // 回调链接
      notify_url: string;
      // 公钥
      publicKey: string;
      // 私钥
      privateKey: string;
    }
  )
  • getConfig
 /**
   * 获得插件配置
   * @returns 配置
   */
  async getConfig()

SDK 文档

api 名称 函数名
h5 支付 transactions_h5
native 支付 transactions_native
app 支付 transactions_app
JSAPI 支付 或者 小程序支付 transactions_jsapi
查询订单 query
关闭订单 close
申请交易账单 tradebill
申请资金账单 fundflowbill
下载账单 downloadBill
回调解密 decipher_gcm
合单 h5 支付 combine_transactions_h5
合单 native 支付 combine_transactions_native
合单 app 支付 combine_transactions_app
合单 JSAPI 支付 或者 小程序支付 combine_transactions_jsapi
查询合单 combine_query
关闭合单 combine_close
获取序列号 getSN
申请退款 refunds
查询退款 find_refunds
签名验证 verifySign
微信提现到零钱 batches_transfer
分账 create_profitsharing_orders

调用示例

1、通用方法

@Inject()
pluginService: PluginService;

@Inject()
ctx;

// 生成订单号
await this.pluginService.invoke('pay-wx', 'createOrderNum');

// 获得微信支付 SDK 实例
const instance = await this.pluginService.invoke('pay-wx', 'getInstance');

// 验签
await this.pluginService.invoke('pay-wx', 'signVerify', this.ctx);

// 获得配置
await this.pluginService.invoke('pay-wx', 'getConfig');

2、生成支付二维码

@Inject()
pluginService: PluginService;

// 获得插件实例
const plugin = await this.pluginService.getInstance('pay-wx');

// 获得插件配置
const config = await plugin['getConfig']();

// 生成订单号
const orderNum = plugin['createOrderNum']();

// 获得微信支付 SDK 实例
const instance = await plugin['getInstance']();

// Native,返回的信息可以直接生成二维码,用户扫码支付
const params = {
    description: "测试",
    out_trade_no: orderNum,
    notify_url: config.notify_url,
    amount: {
      total: 1,
    },
    scene_info: {
      payer_client_ip: "ip",
    },
  }
  const result = await instance.transactions_native(params);
  console.log(result);

3、通知验签

// 注意开放这个接口,不要做token验证
@Post('/wxNotify', { summary: '微信支付回调' })
async wxNotify(@Body() body) {
   // 获得插件实例
   const plugin = await this.pluginService.getInstance('pay-wx');
   // 获得微信支付 SDK 实例
   const instance = await plugin.getInstance();
   const { ciphertext, associated_data, nonce } = body.resource;
   const data: any = instance.decipher_gcm(ciphertext, associated_data, nonce);
   const check = await plugin.signVerify(this.ctx);
   // 验签通过,处理业务逻辑
   if (check && data.trade_state == 'SUCCESS') {
      // 处理业务逻辑
      console.log('支付成功');
   }
   return 'success';
}

返回数据

注:code_url 可以直接生成二维码,用户扫码支付

{
  "status": 200,
  "data": { "code_url": "weixin://wxpay/bizpayurl?pr=quEsDYOzz" }
}

更新日志

  • v1.0.3 (2024-12-02)

    • 支持回调配置公钥证书模式
  • v1.0.2 (2024-06-13)

    • 支持配置本地文件
  • v1.0.1 (2024-03-14)

    • 修复回调验签
  • v1.0.0 (2024-02-04)

    • 初始版本

写回复

回复(0)

写的没人看得懂 ??