gpt4 book ai didi

javascript - 我怎么知道 3D Secure 2 身份验证在升级到 stripe.js 版本 3 后有效

转载 作者:可可西里 更新时间:2023-10-31 23:26:47 31 4
gpt4 key购买 nike

我已经更新了一个站点,因此它使用最新的 stripe-php (6.39.0),现在它加载了 stripe.js 版本 3。我已经对我的代码进行了所有必要的更改,以便现在显示我的信用卡字段使用 Stripe 元素。测试交易有效,我更新了实时网站,实际付款被排除在外。

我进行此更新的原因是因为 stripe 通知我需要升级网站,以便其 stripe 集成将与 2019 年 9 月之前欧盟要求的强客户身份验证 (SCA) 配合使用。

Stripe 有不同的信用卡测试编号,您可以使用它来测试处理付款时出现的问题。此号码可在此处找到:https://stripe.com/docs/testing#cards

4000000000003220 模拟必须完成 3D Secure 2 身份验证的交易。但是当我使用此代码时, Stripe 拒绝付款并返回消息:

"Your card was declined. This transaction requires authentication. Please check your card details and try again."

这是否意味着 3D Secure 2 是否有效?

在现实世界中,它会打开一个窗口,其中包含来自客户的发卡机构的界面。所以我不确定我的整合是否有效。如前所述,付款除外,但我需要在 9 月需要强客户身份验证时做好准备。

最佳答案

看来您的 JS 部分存在集成问题。对于简单的收费(以下示例不适用于订阅),这是您必须实现的方式:

首先您必须创建一个付款意图(此处文档:https://stripe.com/docs/api/payment_intents/create):

\Stripe\PaymentIntent::create([
"amount" => 2000,
"currency" => "usd",
"payment_method_types" => ["card"],
]);

返回您的 PaymentIntent 响应后,您将拥有一个 client_secret key (此处文档:https://stripe.com/docs/api/payment_intents/object)。可以看到你的支付状态是“requires_payment_method”

{
"id": "pi_1Dasb62eZvKYlo2CPsLtD0kn",
"object": "payment_intent",
"amount": 1000,
"amount_capturable": 0,
"amount_received": 0,
...
"client_secret": "pi_1Dasb62eZvKYlo2CPsLtD0kn_secret_6aR6iII8CYaFCrwygLBnJW8js",
...
"status": "requires_payment_method",
...
}

在你的服务器端你必须保存这个对象。您现在可以使用先前的 client_secret key (此处文档:https://stripe.com/docs/payments/payment-intents/verifying-status)显示带有 JS 部分的付款表格。这个想法是你必须在点击提交按钮时调用 Js 函数但不要提交!等待响应提交。使用一些 jquery 这应该是这样的:

var $mySubmitButton = $('#my-submit-button'),
$myPaymentForm = $('#my-payment-form'),
clientSecret = $cardButton.data('client-secret'); // put your client-secret somewhere

$mySubmitButton.on('click', function(e) {

e.preventDefault();

// Disable button to disallow multiple click
$(this).attr("disabled", true);

stripe.handleCardPayment(
clientSecret,
{
payment_method: clientMethod, // if you have a clientMethod
}
).then(function(result) {
if (result.error) {
// show error message
// then enable button
$mySubmitButton.attr("disabled", false);
} else {
// Submit form
$myPaymentForm.submit();
}
});
});

如果一切顺利,当您单击提交按钮时,您将看到一个测试 3D 安全弹出窗口,其中包含“成功”或“未通过”安全测试的选项。如果您点击成功按钮,您的表单将被提交,您必须等待 webhook“charged.success”来确认交易。

收到后,更改服务器对象状态并通知用户有关交易。

在我的例子中,一旦提交了表单,我就会显示一个加载器并每秒检查一次 ajax 调用,看看我的支付意向状态是否发生了变化(通过 webhook)。对于您的测试环境,您可以使用 http://requestbin.net和 postman 。

注意:此页面上引用的某些卡片将无法正常工作(您无法添加它们)https://stripe.com/docs/testing#cards (第 3D 安全测试卡号和 token 部分)。确认他们的支持。

如果您使用已保存的卡片,则只能使用这些卡片进行测试:https://stripe.com/docs/payments/cards/charging-saved-cards#testing

关于javascript - 我怎么知道 3D Secure 2 身份验证在升级到 stripe.js 版本 3 后有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56760146/

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