我已经更新了一个网站,因此它使用了最新的stripe-php(6.39.0),并且现在加载了stripe.js版本3。我对代码进行了所有必要的更改,以便现在显示我的信用卡字段使用条纹元素。测试交易有效,我已经更新了实时网站,但实际付款被排除在外。
我进行此更新的原因是,由于条纹通知我,我需要升级站点,以便其条纹集成将与强客户身份验证(SCA)一起使用,而欧盟在2019年9月之前要求使用这种认证。
条带具有不同的信用卡测试号,可用于测试处理付款时出现的事情。可以在以下位置找到此号码:https://stripe.com/docs/testing#cards
4000000000003220模拟必须完成3D Secure 2身份验证的交易。但是,当我使用此代码条时,拒绝付款并返回消息:“您的卡被拒绝。此交易需要验证。请检查您的卡详细信息,然后重试。”这是否意味着3D Secure 2正常工作?
在现实世界中,它将打开一个带有客户发卡机构界面的窗口。因此,我不确定我的集成能否正常进行。正如之前所说的那样,付款被排除在外,但我需要准备在9月需要进行强力客户认证的时候。
答案 0 :(得分:3)
似乎您的JS部分存在集成问题。简单收费(以下示例不适用于订阅),这是您必须实现的方式:
首先,您必须创建一个付款方式(此处的文档:https://stripe.com/docs/api/payment_intents/create):
\Stripe\PaymentIntent::create([
"amount" => 2000,
"currency" => "usd",
"payment_method_types" => ["card"],
]);
返回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",
...
}
在服务器端,您必须保存该对象。 现在,您可以在JS部分中使用先前的client_secret键(此处为https://stripe.com/docs/payments/payment-intents/verifying-status的文档)显示付款表格。这个想法是您必须在单击提交按钮时调用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安全测试卡号和令牌部分)。确认他们的支持。
如果使用已保存的卡,则只能使用以下卡进行测试:https://stripe.com/docs/payments/cards/charging-saved-cards#testing