Stripe订阅支付和WebHook事件

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

在这里插入图片描述

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;
    }
  }
}

要解析Stripe的Webhook对象,可以使用Stripe的Java库。首先,您需要在代码中使用Stripe API密钥进行身份验证。接下来,您需要使用Stripe库中的Webhook构造函数将Webhook请求转换为Java对象。例如: ```java String payload = getPayloadFromWebhookRequest(); //从Webhook请求中获取负载 String sigHeader = getSigHeaderFromWebhookRequest(); //从Webhook请求中获取签名标头 Event event = null; try { event = Webhook.constructEvent(payload, sigHeader, "your_stripe_webhook_secret"); } catch (SignatureVerificationException e) { //如果签名验证失败,则抛出异常 //处理异常 } if (event.getType().equals("charge.succeeded")) { //处理付款成功事件 } else if (event.getType().equals("charge.failed")) { //处理付款失败事件 } else { //处理其他事件 } ``` 在上面的代码中,`getPayloadFromWebhookRequest()`和`getSigHeaderFromWebhookRequest()`是您自己的方法,用于从Webhook请求中获取负载和签名标头。请注意,这里使用的是`constructEvent()`函数,它将Webhook请求转换为Java对象。您需要将`your_stripe_webhook_secret`替换为您的Stripe Webhook密钥。 一旦您将Webhook请求转换为Java对象,您就可以根据事件类型处理不同类型的事件。在上面的示例代码中,我们处理了付款成功和付款失败事件,但还有许多其他类型的事件,例如订阅创建,订阅取消等等。您可以在Stripe的文档中查找完整的事件列表和详细的事件处理说明。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值