(哪里有天才,我是把别人喝咖啡的功夫都用在工作上的。——鲁迅)
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-functionconstructor() {}// 获取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;}}
}