我可以为不需要 3DSecure 身份验证的测试卡付款。对于需要它的卡片,不会弹出模式。在仪表板中,付款将显示“客户必须完成额外的身份验证步骤”状态。在这些情况下,我什至达不到
then(function(result) {
if (result.error) {
alert(result.error.message);
}
else {
alert('Success!');
代码部分。使用非 3ds 测试卡,这部分工作正常。调试 javascript 将向我展示来自条带 js 脚本的一些无意义的异常。
鉴于它适用于某些卡,可以排除支付意图的服务器站点初始化和客户端密码的传递,该部分有效。
<head runat="server">
<title></title>
<meta name="viewport" content="width=device-width, initial-scale=1" />
<script src="https://js.stripe.com/v3/"></script>
<style type="text/css">
.auto-style1 {
width: 930px;
}
</style>
</head>
<form id="form1" runat="server">
<div>
<asp:HiddenField ID="hiddenClientSecret" runat="server" />
<input id="cardholder-name" type="text"/>
<!-- placeholder for Elements -->
<div id="card-element" class="auto-style1"></div>
<button id="card-button">
Submit Payment
</button>
</div>
</form>
<script >
var stripe = Stripe('mykey', {locale: 'en'});
var elements = stripe.elements({locale: 'en'});
var cardElement = elements.create('card', {hidePostalCode: true});
cardElement.mount('#card-element');
var cardholderName = document.getElementById('cardholder-name');
var cardButton = document.getElementById('card-button');
var clientSecret = document.getElementById('hiddenClientSecret').value;
cardButton.addEventListener('click', function(ev) {
stripe.handleCardPayment(
clientSecret, cardElement, {
payment_method_data: {
billing_details: {name: cardholderName.value}
}
}
).then(function(result) {
if (result.error) {
alert(result.error.message);
}
else {
alert('Success!');
}
});
});
</script>