我正在使用3D身份验证实施Stripe订阅,但成功验证后订阅不完整,有人可以帮助我吗?技术--- MERN--
步骤
1.已从前端创建PaymentMethod ID。
1.然后在body中的后端API获取paymentMethod-Id
1.创建了一个没有付款方式的客户,只有基本信息,然后创建setupIntent并确认它以获取重定向URL
1.然后在webhook setup_intend _succeed中等待响应并获得成功响应,然后更新客户并创建订阅,但在所有完美的订阅都不完整状态后,单击它创建订阅并提供发票托管URL
用于前端将Payment Method id传递给后端
const paymentMethod = await stripe.createPaymentMethod({
type: "card",
card: elements.getElement(CardElement),
billing_details: {
name: name,
email: email,
address: {
line1: address,
city,
state,
postal_code: zipcode,
country,
},
// phone: "+1 555-555-5555",
},
});
后台
let customer = await stripe.customers.list({电子邮件:电子邮件,限制:});
if (customer.data.length === 0) {
customer = await stripe.customers.create({
email,
name,
address: {
line1: billing.address,
city: billing.city,
state: billing.state,
postal_code: billing.zipcode,
country: billing.country,
},
});
} else {
customer = customer?.data[0];
}
const setupIntent = await stripe.setupIntents.create({
payment_method: paymentMethod,
customer: customer.id,
confirm: true,
usage: "on_session",
metadata: {
data: JSON.stringify(req.body),
},
});
const confirmedSetupIntent = await stripe.setupIntents.confirm(
setupIntent.id,
{
return_url: `${CLIENT_BASE_URL}/check-payment-status/${pricePlanId}`,
}
);
在前端传递此返回url
webhook上
事件setup_intent. successfully
const customerList = await stripe.customers.list({
email: email,
limit: 1,
});
const customer = customerList.data.length > 0 ? customerList.data[0] : null;
if (customer) {
await stripe.customers.update(customer.id, {
name,
invoice_settings: {
default_payment_method: paymentMethodId,
},
});
}
// Check if customer has an active subscription
const subscriptionList = await stripe.subscriptions.list({
customer: account.customerId,
status: "active",
limit: 1,
});
let subscription = null;
subscription = await stripe.subscriptions.create({
customer: account.customerId,
items: [{ price: pricePlanId }],
metadata: {
product_name: plan.name,
userId: user._id,
amount: plan.amount,
credits: plan.credits,
planId: pricePlanId,
billingName: billing.name,
billingEmail: billing.email,
},
payment_settings: {
payment_method_types: ["card"],
save_default_payment_method: "on_subscription",
},
expand: ["latest_invoice.payment_intent"],
off_session: true,
});
c
谁能告诉我这段代码有什么问题
1条答案
按热度按时间oxalkeyp1#
你的流程并不完全是Stripe在他们的文档中推荐的。不需要为订阅集成直接创建付款方式或设置意图。有关推荐的集成指南,请参阅these docs。