支付宝支付

COOL

v1.0.1 更新于2024-09-03 15:12

说明文档
回复列表 (0)

介绍

支付宝支付、生成订单、支付回调验签等。

插件基于alipay-sdk二次封装,获得 sdk 实例后,调用支付宝支付接口。

标识

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

  • 标识:pay-ali

配置

{
  "appId": "应用ID",
  "notifyUrl": "回调通知地址",
  "privateKey": "应用私钥值",
  "encryptKey": "AES密钥,调用AES加解密相关接口时需要",
  "appCertContent": "应用公钥证书文件URL",
  "alipayRootCertContent": "支付宝根证书文件URL",
  "alipayPublicCertContent": "支付宝公钥证书文件URL",
  "signType": "RSA2",
  "charset": "utf-8",
  "version": "1.0",
  "keyType": "PKCS1"
}

方法

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

  • createOrderNum

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

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

获得微信支付 SDK 实例

  /**
   * 获得微信支付SDK实例
   * @param config 非必填 动态配置,有多个商户号或者多个应用的时候,可以动态配置
   * @returns
   */
  async getInstance(config?: {
    // 应用ID
    appId: string;
    // 回调通知地址
    notifyUrl: string;
    // 应用私钥文件URL
    privateKey: string;
    // AES密钥,调用AES加解密相关接口时需要
    encryptKey: string;
    // 应用公钥证书文件路径
    appCertPath: string;
    // 支付宝根证书文件路径
    alipayRootCertPath: string;
    // 支付宝公钥证书文件路径
    alipayPublicCertPath: string;
    // 签名类型
    signType: string;
    // 字符集
    charset: string;
    // 版本
    version: string;
    // PKCS1
    keyType: string;
  })
  • signVerify

通知验签

/**
 * 通知验签
 * @param postData {JSON} 服务端的消息内容
 * @param raw {Boolean} 是否使用 raw 内容而非 decode 内容验签
 * @param config {Object} 配置
 * @returns {Boolean} 验签是否通过
 */
async signVerify(
    postData: any,
    raw?: boolean,
    config?: {
      // 应用ID
      appId: string;
      // 回调通知地址
      notifyUrl: string;
      // 应用私钥文件URL
      privateKey: string;
      // AES密钥,调用AES加解密相关接口时需要
      encryptKey: string;
      // 应用公钥证书文件路径
      appCertPath: string;
      // 支付宝根证书文件路径
      alipayRootCertPath: string;
      // 支付宝公钥证书文件路径
      alipayPublicCertPath: string;
      // 签名类型
      signType: string;
      // 字符集
      charset: string;
      // 版本
      version: string;
      // PKCS1
      keyType: string;
    }
  )

调用示例

二维码支付

@Inject()
pluginService: PluginService;

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

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

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

// 获得支付SDK实例
const instance = await plugin.getInstance();

// 获得支付SDK实例,动态配置
const config = { }
const instance = await plugin.getInstance(config);

// 调用支付接口
 const result = instance.pageExec("alipay.trade.page.pay", {
    notify_url: config.notifyUrl,
    bizContent: {
      out_trade_no: orderNum,
      total_amount: "0.01",
      subject: "测试",
      product_code: "FAST_INSTANT_TRADE_PAY",
      body: "测试订单",
      qr_pay_mode: "2",
    },
  });

console.log(result);

通知验签

// 注意开放这个接口,不要做token验证
@Post('/aliNotify', { summary: '支付宝支付回调通知' })
async aliNotify(@Body() body) {
    // 获得插件实例
    const plugin = await this.pluginService.getInstance("pay-ali");
    const check = await plugin.signVerify(body);
    if (!check) {
      return 'fail';
    }else{
      // 业务逻辑
    }
    return 'success';
}

更新日志

  • v1.0.1 (2024-04-08)

    • 动态配置,支持证书路径
  • v1.0.0 (2024-02-05)

    • 初始版本

写回复

回复(0)

写的没人看得懂 ??