为什么在使用 3D 安全信用卡时没有激活 Stripe 订阅?

问题描述

我习惯于 Stripe Elements 向我的客户收费。

我的代码适用于SEPA 直接借记普通信用卡,但它不适用于3D 安全卡我不太明白为什么。当我输入 Stripe 的 3D 安全测试卡号 (4000 0000 0000 3220) 时,会出现 VISA 的确认弹出窗口,我可以选择 Confirm,但这样做之后,弹出窗口就会消失,没有其他任何事情发生。客户的订阅未在日志中的任何位置激活或确认。如何解决这个问题?我的代码有问题吗?

const tag = document.querySelector('Meta[name=stripe-publishable-key]');

const key = tag.getAttribute('content');
const stripe = Stripe(key);

const form = document.querySelector('#stripe_form');

const name = document.querySelector('#name');
const email = document.querySelector('#email');

const payment = document.querySelector('#payment');
const errorMessage = document.querySelector('#stripe_error_message');
const clientSecret = document.querySelector('#client_secret');

const elements = stripe.elements();

const card = elements.create('card',{});

card.mount('#card');

const iban = elements.create('iban',{
  supportedCountries: ['SEPA'],placeholderCountry: 'FR'
});

iban.mount('#iban');

for (element of [card,iban]) {

  element.on("change",function(event) {
    if (event.error) {
      errorMessage.textContent = event.error.message;
    } else {
      errorMessage.textContent = "";
    }
  });
}

form.addEventListener('submit',function(e) {
  e.preventDefault();
  setupPaymentMethod(clientSecret.value,payment,{
    card: card,sepa_debit: iban
  });
});

function setupPaymentMethod(setupIntentSecret,paymentMethod,element) {
  switch (paymentMethod) {
    case "card":
      stripe.confirmCardSetup(setupIntentSecret,{
        payment_method: {
          card: element[paymentMethod],billing_details: {
            name: name.value,email: email.value
          }
        }
      })
      .then(handleResult);
    break;
    case "sepa_debit":
      stripe.confirmSepaDebitSetup(setupIntentSecret,{
        payment_method: {
          sepa_debit: element[paymentMethod],email: email.value
          }
        }
      })
      .then(handleResult);
    break;
    default:
      console.warn("Unhandled Payment Method!");
    break;
  }
}

function handleResult(result) {
  // console.log(result);
  if (result.error) {
    errorMessage.textContent = result.error.message;
  } else {
    let paymentMethod = document.createElement('input');
    paymentMethod.setAttribute('type','hidden');
    paymentMethod.setAttribute('name','payment_method');
    paymentMethod.value = result.setupIntent.payment_method;
    form.appendChild(paymentMethod);
    form.submit();
  }
}

解决方法

没有看到请求、错误等就很难知道。您能否将详细信息写给支持人员,以便他们为您调查? https://support.stripe.com/contact/email

,

是否在设置中启用?这至少应该添加一个用户必须确认的弹出窗口:https://dashboard.stripe.com/settings/billing/automatic

https://support.stripe.com/questions/using-3d-secure-authentication-with-payments-made-through-stripe-billing