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