Полоса оплаты не работает

В течение последних двух недель я пытался создать специальную форму оплаты с помощью Stripe, которая позволяет пользователю самостоятельно выбирать цену, а затем после оплаты снимать деньги с карты при оплате. Форма для создания «токена» работает и отображается в моих журналах под панелью управления Stripe, но проблема в том, что оплата кредитной карты клиента не работает. Я тестирую сценарии, загружая их на панель хостинга, которую я использую для другого веб-сайта, но при этом получаю следующую ошибку «Внутренняя ошибка сервера», как показано на изображении ниже.

введите описание изображения здесь

Я не могу понять, в чем заключается ошибка, я знаю, что ошибка, скорее всего, связана с .php скриптом для зарядки карт, так как нет проблем с получением «токена» из формы html / javascript.

Мой скрипт html и javascript:

    <!DOCTYPE html>
<html>

<head>

    <!-- STRIPE PAYMENT JAVASCRIPT FUNCTIONS START -->

    <script src="https://checkout.stripe.com/checkout.js"></script>
    <script src="https://code.jquery.com/jquery-1.11.2.min.js"></script>
    <script type="text/javascript">
    $(document).ready(function() {    

    var handler = StripeCheckout.configure({
        key: 'REMOVED FOR SAFETY BUT IS THERE IN THE REAL SCRIPT',
        image: '/square-image.png',
        token: function(token) {
            // get the payment form
            var $form = $('#payment-form');

            // Use the token to create the charge with a server-side script.
            // You can access the token ID with `token.id`

            // Insert the token into the form so it gets submitted to the server
            $form.append($('<input type="hidden" name="stripeToken" />').val(token.id));
            // and re-submit
            $form.get(0).submit();
        }
    });

    $('#customButton').on('click', function(e) {

        // get the amount from #amount, round to avoid funny issues
        var amount = Math.round($("#amount").val()*100);

        // Open Checkout with further options
        handler.open({
        name: 'Payment',
        description: 'Payment',
        amount: amount
        });
        e.preventDefault();
    });

      // Close Checkout on page navigation
    $(window).on('popstate', function() {
        handler.close();
    });
    });
    </script>

    <!-- STRIPE PAYMENT JAVASCRIPT FUNCTIONS ENDING -->

</head>

<body>

                <!-- FORM FOR STRIPE PAYMENT START-->

                    <form id="payment-form" action="chargeCard.php" method="POST">
                    <input onkeypress="return isNumberKey(event)" type="text" name="amount" id="amount" />
                    <input type="image"  src="BidButton1.png" id="customButton" value="pay" alt="button"/>
                    </form>

                    <script type="text/javascript">
                        function isNumberKey(evt)
                    {
                    var charCode = (evt.which) ? evt.which : event.keyCode
                    if (charCode > 31 && (charCode < 48 || charCode > 57))
                    return false;

                    return true;
                    }
                    </script>

                 <!--FORM FOR STRIPE PAYMENT ENDING-->


</body>

</html>

Мой скрипт php называется chargeCard:

    <?php 

    require_once('./init.php');

    // Set your secret key: remember to change this to your live secret key in production
    // See your keys here https://dashboard.stripe.com/account
    \Stripe\Stripe::setApiKey("REMOVED FOR SAFETY");

    // Get the credit card details submitted by the form
    $token = $_POST['stripeToken'];

    // Create the charge on Stripe's servers - this will charge the user's card
    try {
    $charge = \Stripe\Charge::create(array(
    "amount" => $token, // amount in cents, again
    "currency" => "usd",
    "source" => $token,
    "description" => "[email protected]"));

    echo '<script type="text/javascript">addOne();</script>"';

    } catch(\Stripe\Error\Card $e) {
    // The card has been declined
    }

?>

person Sm00rf9000    schedule 22.03.2015    source источник
comment
вы должны проверить свой журнал ошибок apache, поскольку это внутренняя ошибка 500, она будет зарегистрирована (если вы намеренно не отключили все журналы ошибок)   -  person CᴴᵁᴮᴮʸNᴵᴺᴶᴬ    schedule 22.03.2015
comment
Разве это не formElement.submit()? Не нужно .get(0). Вы должны использовать AJAX, иначе страница будет соответствовать вашему значению атрибута <form action.   -  person StackSlave    schedule 23.03.2015
comment
Поэтому я должен отредактировать часть javascript, чтобы она говорила $form.append($('<input type="hidden" name="stripeToken" />').val(token.id)); formElement.submit(); вместо $form.append($('<input type="hidden" name="stripeToken" />').val(token.id)); $form.get(0).submit();   -  person Sm00rf9000    schedule 23.03.2015


Ответы (2)


Похоже, ваша Create функция и массив перемешаны ..

try {
    $charge = \Stripe\Charge::create(array(
    "amount" => $amount, // amount in cents, again
    "currency" => "usd",
    "source" => $token,
    "description" => "[email protected]"));

    echo '<script type="text/javascript">addOne();</script>';
} catch(\Stripe\Error\Card $e) {
    // The card has been declined
}

ОБНОВЛЕНИЕ

Здесь было три ошибки

  1. Ваш echo был внутри вашей Charge::create(); функции
  2. Вы пропустили закрывающую точку с запятой на echo
  3. (не причина вашей проблемы), но вы потеряли " для своего text/javascript
person CᴴᵁᴮᴮʸNᴵᴺᴶᴬ    schedule 22.03.2015
comment
Спасибо за ответ, я отредактировал сценарий и протестировал его, но все равно получаю внутреннюю ошибку сервера - person Sm00rf9000; 23.03.2015
comment
@ Sm00rf9000, вам нужно заглянуть в журналы вашего сервера для получения дополнительной информации .. возможно, include неверен? - person CᴴᵁᴮᴮʸNᴵᴺᴶᴬ; 23.03.2015
comment
Я выяснил ошибки, единственная проблема в том, что они, похоже, связаны с файлом stripe-php, который предоставлен самим Stripe, поэтому я связался с ними. Но еще раз большое спасибо за ваш ответ. - person Sm00rf9000; 24.03.2015

Вы передавали токен в поле суммы! Ниже ваш код

$charge = \Stripe\Charge::create(array(
    "amount" => $token, // amount in cents, again
    "currency" => "usd",
    "source" => $token,
    "description" => "[email protected]"));
person Noor ul Amin    schedule 29.03.2015
comment
Я исправил проблемы, но спасибо за ответ. - person Sm00rf9000; 29.03.2015
comment
@ Sm00rf9000 Я тоже столкнулся с той же проблемой, не могли бы вы рассказать, что вы сделали для ее решения. - person Haris; 23.09.2015