Laravel: Не могу получить жетон полосы по запросу - PullRequest
0 голосов
/ 25 апреля 2018

У меня есть форма по шагам, получить информацию -> показать информацию -> оформить заказ -> отправить форму,

Проблема в том, что я удаляю теги формы проверки полосы

<form action="/charge" method="post" id="payment-form">

И вместо этого я использую оригинальные теги формы, потому что я не могу использовать форму внутри формы, плюс вся обработка должна быть за одну отправку.

Я возвратил данные запроса формы, но у них нет токена полосы. Доступны другие данные формы, но в них нет токена.

Чего мне не хватает?

Простой процесс, который я включил:

<script src="https://js.stripe.com/v3/"></script>

И JS в конце файла:

var stripe = Stripe('pk_test_73ZtD3qICEkFfyMqegGubJLV');
var elements = stripe.elements();
var style = {
    base: {
        color: '#32325d',
        lineHeight: '18px',
        fontFamily: '"Helvetica Neue", Helvetica, sans-serif',
        fontSmoothing: 'antialiased',
        fontSize: '16px',
        '::placeholder': {
        color: '#aab7c4'
        }
    },
    invalid: {
        color: '#fa755a',
        iconColor: '#fa755a'
    }
};
var card = elements.create('card', {style: style});
card.mount('#card-element');
card.addEventListener('change', function(event) {
    var displayError = document.getElementById('card-errors');
    if (event.error) {
        displayError.textContent = event.error.message;
    } else {
        displayError.textContent = '';
    }
});
var form = document.getElementById('signupFormPetOwner');
form.addEventListener('submit', function(event) {
    event.preventDefault();
    stripe.createToken(card).then(function(result) {
        if (result.error) {
            var errorElement = document.getElementById('card-errors');
            errorElement.textContent = result.error.message;
        } else {
            stripeTokenHandler(result.token);
        }
    });
});

Вот моя форма, где я интегрирую полосу:

<form id="signupFormPetOwner" method="post">
    <div class="stepOne">
       ...
    </div>
    <div class="stepTwo">
       ...
    </div>

    <div class="stepThree">
       <div class="form-row">
           <label for="card-element">
               Credit or debit card
           </label>
           <div id="card-element"></div>
           <div id="card-errors" role="alert"></div>
       </div>
    </div>
    <button class="submit">Submit</button>
</form>

И запрос AJAX:

$.ajax({
    url: "/register",
    type: "post",
    data: new FormData($('form')[0]),
    cache: false,
    contentType: false,
    processData: false,
    beforeSend: function() {
        $('#cover').show();
    },
    success: function(response) {
        $('#cover').hide();
        return true;
    }
});

1 Ответ

0 голосов
/ 25 апреля 2018

Вы должны либо передать открытый ключ Stripe в качестве значения некоторого скрытого ввода в форме, либо добавить в FormData новую пару - имя, значение

    var submittedData  = new FormData($('form')[0]);
    submittedData.append('stripe_key', stripe_key_value);

    $.ajax({
        url: "/register",
        type: "post",
        data: submittedData,
        cache: false,
        contentType: false,
        processData: false,
        beforeSend: function() {
            $('#cover').show();
        },
        success: function(response) {
            $('#cover').hide();
            return true;
         }
    });
...