我正在使用 Stripe 客户门户来让客户管理他们的账单。 我为每个产品添加了元数据,以便我可以根据这些元数据配置用户。
我可以通过传递如下元数据成功地在 Stripe Checkout 会话中配置用户:
const session = await Stripe.checkout.sessions.create({
mode: 'subscription',
metadata: {
teamSize: productObject.metadata.teamSize,
accountType: productObject.metadata.accountType,
accountStatus: productObject.metadata.accountStatus
},
line_items: [
{
price: price_id,
quantity: 1
}
],
success_url: `${url}` + "/success?session_id={CHECKOUT_SESSION_ID}'",
cancel_url: `${url}` + '/cancelled'
});
同样,当用户通过 Stripe 客户门户时,有什么方法可以传递产品元数据吗?如果没有,在不同事件(发票更新、客户订阅更新等)获取产品元数据的最佳方式是什么
router.post('/create-customer-portal-session', async (req, res) => {
const session = await Stripe.billingPortal.sessions.create({
customer: company.billingId,
return_url: `${url}`
});
res.status(200).send(session.url);
});
2步解决方案:
在使用“type”创建门户之前,您可以通过更新/修改订阅来传递元数据:“subscription_update_confirm”
#1-将元数据传递到您的订阅
stripe.Subscription.modify(
subscription.id,
metadata={'ids':ids,'email':email},
)
#2-创建“type”的Portal:“subscription_update_confirm”
checkout_session = stripe.billing_portal.Session.create(
customer=customer.id,
flow_data={
"type": "subscription_update_confirm",
"subscription_update_confirm": {
"subscription": subscription.id,
"items":[
{
'id': subscription['items']['data'][0].id,
'price': priceId,
'quantity': quantity,
}
]
},
...