Неверное значение для секретного намерения stripe.handleCardPayment - PullRequest
0 голосов
/ 04 ноября 2019

Я пытаюсь реализовать намерение оплаты чередованием для прямых сборов

, как показано здесь на странице документов

https://stripe.com/docs/connect/direct-charges

Что я сделал, это забрал существующий код из GitHub, который реализуетспособ оплаты, но не для прямых платежей.

см. здесь

  https://github.com/fujahgabriel/stripepaymentintent/blob/master/index.html

Javascript

<script>

        // Stripe API Key
        var stripe = Stripe('#############');
        // clientSecret to complete payment
        var clientSecret;

        // paymentIntent id --- using to update
        var paymentIntent;

        var amount = 10000; //i.e 20GBP

        // create initial payment intent, get client secret
        $.getJSON("intent.php", {
            "amount": amount
        }, function(data) {
            clientSecret = data.client_secret;
            paymentIntent = data.id;
        });

        // set up stripe.js
        var elements = stripe.elements();
        // Custom Styling
        var style = {
            base: {
                color: '#32325d',
                lineHeight: '24px',
                fontFamily: '"Helvetica Neue", Helvetica, sans-serif',
                fontSmoothing: 'antialiased',
                fontSize: '16px',
                '::placeholder': {
                    color: '#aab7c4'
                }
            },
            invalid: {
                color: '#fa755a',
                iconColor: '#fa755a'
            }
        };
        // Create an instance of the card Element
        var card = elements.create('card', {
            hidePostalCode: true,
            style: style
        });
        // Add an instance of the card Element into the `card-element` <div>
        card.mount('#card-element');
        // Handle real-time validation errors from the card Element.
        card.addEventListener('change', function(event) {
            var displayError = document.getElementById('card-errors');
            if (event.error) {
                displayError.textContent = event.error.message;
            } else {
                displayError.textContent = '';
            }
        });
        // on button click
        $("#cbutton").on('click', function(ev) {
            $(this).prop("disabled", true);
            $('#process').show();
            stripe.handleCardPayment(
                clientSecret, card).then(function(result) {
                if (result.error) {
                    // Display error.message in your UI.
                    $("#card-errors").text(result.error.message);
                    // Re-enable button
                    $('#process').hide();

                    $("#cbutton").removeAttr("disabled");
                    console.log(result.error);
                } else {
                    $('#process').hide();

                    alert('success');
                    location.reload();
                    // The payment has succeeded. Display a success message.
                    //console.log(result);
                }
            });
        });
    </script>

затем php Я пытаюсь внести коррективы с

$getIntent = \Stripe\PaymentIntent::create([
  "amount" =>$amount,
  "currency" => "eur",
  "description" => "Test Payment" ,
  'payment_method_types' => ['card'],
]);
$intent = \Stripe\PaymentIntent::retrieve($getIntent->id);
echo json_encode(["status"=>"ok","id"=>$intent->id,"client_secret"=>$intent->client_secret,"amount"=>$intent->amount,"currency"=>$intent->currency]);

TO

 $getIntent = \Stripe\PaymentIntent::create([
          'payment_method_types' => ['card'],
      "amount" =>$amount,
      "currency" => "eur",
      "description" => "Test Payment" ,
        ], ['stripe_account' => '#########']);

$intent = \Stripe\PaymentIntent::retrieve($getIntent->id);
echo json_encode(["status"=>"ok","id"=>$intent->id,"client_secret"=>$intent->client_secret,"amount"=>$intent->amount,"currency"=>$intent->currency]);

Но теперь я получаю эту ошибку

IntegrationError: Неверное значение для намеренного секрета stripe.handleCardPayment: значение должно быть строкой client_secret. Вы указали: не определено.

Пожалуйста, в чем может быть причина, пожалуйста, я застрял здесь

Пожалуйста, обратите внимание, что это решение работало для сборов назначения, оно не работало для прямых сборов

1 Ответ

0 голосов
/ 04 ноября 2019

Вы не завершили копирование частей PHP:

$intent = \Stripe\PaymentIntent::retrieve($getIntent->id);
echo json_encode(["status"=>"ok","id"=>$intent->id,"client_secret"=>$intent->client_secret,"amount"=>$intent->amount,"currency"=>$intent->currency]);

(см .: https://github.com/fujahgabriel/stripepaymentintent/blob/master/payment_intent.php#L17)

. В данный момент ваш вызов getJSON() ничего не возвращает, следовательно,data.client_secret равно undefined. Он ничего не возвращает, потому что вы никогда не выводили данные JSON, как в приведенном выше фрагменте кода.

...