Stripe订阅支付和WebHook事件

(哪里有天才,我是把别人喝咖啡的功夫都用在工作上的。——鲁迅)

Stripe订阅支付和WebHook事件_第1张图片

stripe

Stripe是由20多岁的两兄弟Patrick Collison和John Collison创办的Stripe为公司提供网上支付的解决方案。Stripe向服务的公司收取每笔交易的2.9%加上30美分的手续费

订阅支付和WebHook事件实例代码

  • 订阅支付采用stripe官方提供好的sdk,这样就省去了前端的支付页面开发工作
  • 事件推送在stripe账户下添加路径即可,但需要选择对应的事件类型

有关使用测试银行卡号等方法请参阅stripe官方提供的测试卡号等

import Stripe from 'stripe';

class StripeSubscribeService {
  // eslint-disable-next-line @typescript-eslint/no-empty-function
  constructor() {}

  // 获取stripe订阅支付链接
  async getStripeSubscribeUrl() {
    // stripe账户秘钥
    const STRIPE_ACCOUNT_SK = 'sk_test_xxxxx';
    // stripe支付成功后的重定向页面
    const STRIPE_REDIRECT_DOMAIN = 'http://localhost:8000';
    // 实例化stripe对象
    const stripe = new Stripe(STRIPE_ACCOUNT_SK, { apiVersion: '2022-11-15' });
    // 获取stripe订阅支付链接
    // 这里直接使用stripe提供的sdk链接
    const result = await stripe.checkout.sessions.create({
      // 类型固定为支付卡片
      payment_method_types: ['card'],
      // price为stripe账户下产品的价格id
      // quantity为支付的数量
      line_items: [
        {
          price: 'price_xxxx',
          quantity: 1,
        },
      ],
      // 支付的类型 subscription为订阅支付
      mode: 'subscription',
      // 支付成功后跳转链接 可以是自己前端服务的链接
      success_url: `${STRIPE_REDIRECT_DOMAIN}/dashboard/setting/subscribe`,
      // 取消支付后跳转链接
      cancel_url: `${STRIPE_REDIRECT_DOMAIN}/dashboard/setting/subscribe`,
      // 订阅支付的自定义参数,用于后端服务做额外处理,比如记录日志,更改系统内部状态呢个
      subscription_data: {
        metadata: {
          name: 'test',
          id: 'testId',
          env: 'local',
        },
      },
    });
    // stripe订阅支付链接
    console.log(result.url);
  }

  async brandSubscribeWebHook(metadata: any) {
    const env = metadata.env;
    // 在stripe添加webhook事件,每次支付成功后都会发起调用
    // stripe的事件无法做环境区分,所以我们需要在subscription_data中加入环境参数,这样每次收到后可以根据环境进行区分处理
    if (env !== 'local') {
      console.log('brandSubscribeWebHook env different', {
        env,
      });
      return;
    }
  }
}

你可能感兴趣的:(typescript,javascript,node.js)