lom*_*kev 6 javascript php stripe-payments
我更新了一个站点,因此它使用最新的 stripe-php (6.39.0),现在加载了 stripe.js 版本 3。我对代码进行了所有必要的更改,以便我的信用卡字段现在使用 Stripe Elements 显示. 测试交易有效,我已经更新了实时网站,实际付款除外。
我进行此更新的原因是 Stripe 告知我需要升级站点,以便其 Stripe 集成能够与欧盟在 2019 年 9 月之前要求的强客户身份验证 (SCA) 配合使用。
Stripe 有不同的信用卡测试号码,您可以用来测试处理付款时出现的问题。这个数字可以在这里找到:https : //stripe.com/docs/testing#cards
4000000000003220 模拟必须完成 3D Secure 2 身份验证的交易。但是,当我使用此代码条带拒绝支付并返回消息时:
“您的卡被拒绝。此交易需要身份验证。请检查您的卡详细信息,然后重试。”
这是否意味着 3D Secure 2 有效?
在现实世界中,它会打开一个窗口,其中包含来自客户发卡机构的界面。所以我不确定我的集成是否有效。如前所述,付款被排除在外,但我需要在 9 月份需要强客户身份验证时做好准备。
看来您在 JS 部分存在集成问题。对于简单的收费(以下示例不适用于订阅),这是您必须实施的方式:
首先,您必须创建付款意图(此处的文档:https : //stripe.com/docs/api/payment_intents/create):
\Stripe\PaymentIntent::create([
"amount" => 2000,
"currency" => "usd",
"payment_method_types" => ["card"],
]);
Run Code Online (Sandbox Code Playgroud)
返回 PaymentIntent 响应后,您将拥有一个 client_secret 密钥(此处的文档: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",
...
}
Run Code Online (Sandbox Code Playgroud)
在您的服务器端,您必须保存此对象。您现在可以使用先前的 client_secret 键(此处的文档: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();
}
});
});
Run Code Online (Sandbox Code Playgroud)
如果一切顺利,当您单击提交按钮时,您将获得一个测试 3D 安全弹出窗口,其中包含“成功”或“失败”安全测试的选项。如果您点击成功按钮,您的表单将被提交,您必须等待网络钩子“charged.success”来确认交易。
收到后,更改您的服务器对象状态并通知用户有关交易的信息。
就我而言,一旦表单提交,我就会显示一个加载程序并每秒检查一次 ajax 调用,以查看我的付款意图状态是否已更改(通过 webhook)。对于您的测试环境,您可以使用http://requestbin.net和 Postman。
请注意:此页面上引用的某些卡将无法正常工作(您无法添加它们)https://stripe.com/docs/testing#cards(3D安全测试卡号和令牌部分)。得到了他们的支持。
如果您使用保存的卡,则只能使用这些卡进行测试:https : //stripe.com/docs/payments/cards/charging-saved-cards#testing
| 归档时间: |
|
| 查看次数: |
4499 次 |
| 最近记录: |