gpt4 book ai didi

c# - 使用不同的卡结账时,Stripe 正在创建重复的客户

转载 作者:行者123 更新时间:2023-12-03 20:25:28 55 4
gpt4 key购买 nike

我正在使用 .NET Core 处理 strip 。假设我在 Stripe 有一位客户使用 email=test@test.com 并且他在第一次结账时使用了 visa 卡,我遇到了问题。

然后他尝试使用不同的卡(假设 Master Card )购买另一件商品,然后 Stripe 使用相同的电子邮件为该结帐创建重复的客户(使用相同的电子邮件 ID)。虽然我想将这个新购买的物品添加到现有客户中,即使他使用了不同的卡。

NOTE:- If I use same card for each checkout for that customer then It works as expected.



我正在使用 Stripe Checkout Session Service 进行结账流程。如果给定电子邮件的 strip 中不存在客户,则仅创建客户。但如果我在结账时使用了不同的卡。 stripe 隐式地创建重复的 Customer。

这是我创建的 Stripe 代码客户
           // Create customer object   
var customerOptions = new CustomerListOptions()
{
Email = user.UserName
};
// get list of customers with matching options (should be one since email is unique)
var customers = await customerService.ListAsync(customerOptions);
// get first matching customer
var customer = customers.FirstOrDefault();

// if we didn't find the customer, we create one in stripe
if (customer == null)
{
customer = await customerService.CreateAsync(new CustomerCreateOptions
{
Email = model.StripeEmail
});
newCustomer = true;
}

这是结帐 session 创建逻辑
        var sessionOptions = new SessionCreateOptions
{
BillingAddressCollection = "auto",
CustomerEmail = customer.Email,
PaymentMethodTypes = new List<string> {
"card",
},
SubscriptionData = new SessionSubscriptionDataOptions
{
Items = subscriptions
},
SuccessUrl = "https://localhost:44xx/Shop/CheckoutConfirmation?sessionId={CHECKOUT_SESSION_ID}",
CancelUrl = "https://localhost:44xx/Shop/Cart",
};

try
{

var sessionService = new SessionService();
Session session = sessionService.Create(sessionOptions);

response.IsValid = true;
response.SessionId = session.Id;
return new JsonResult(response);
}
catch (Exception ex)
{
response.IsValid = false;
return new JsonResult(response);
}

最佳答案

是的,我还研究了在 Stripe 中创建新客户对象的 Stripe,并发现您可以通过在 session 中传递客户 ID 来阻止 Stripe 创建另一个客户。只需将您的 SessionCreateOptions 替换为以下代码。

        var sessionOptions = new SessionCreateOptions
{
BillingAddressCollection = "auto",
PaymentMethodTypes = new List<string> {
"card",
},
SubscriptionData = new SessionSubscriptionDataOptions
{
Items = subscriptions
},
SuccessUrl = "https://localhost:44xx/Shop/CheckoutConfirmation?sessionId={CHECKOUT_SESSION_ID}",
CancelUrl = "https://localhost:44xx/Shop/Cart",
ClientReferenceId = customer.Id,
CustomerId = customer.Id
};

因此,它将创建对我关联到 strip 结帐 session 对象的客户 ID 的订阅。

关于c# - 使用不同的卡结账时,Stripe 正在创建重复的客户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62280252/

55 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com