JavaScript in Laravel 6.0 Braintree: InvalidArgumentException недействительные ключи: tokenizationKey - PullRequest
0 голосов
/ 04 февраля 2020

Вместо клиентского токена для передачи на сервер я использую ключ токенизации. Это должно быть проще, потому что его можно использовать повторно и отображать в скрипте.

Вот элемент, который я пытаюсь передать:

<input name="tokenizationKey" id="tokenizationKey" type="hidden" value="">

А вот сценарий, который должен передать ключ tokenization:

{{-- BRAINTREE INTEGRATION --}}
<script src="https://js.braintreegateway.com/web/3.57.0/js/client.min.js"></script>
<script src="https://js.braintreegateway.com/web/dropin/1.21.0/js/dropin.min.js"></script>
<script>
    var button = document.querySelector('#submit-payment');
    var tokenizationKey = 'sandbox_csv9z8wd_7x6bffskqkpyhp6g';

    braintree.dropin.create({
        authorization: tokenizationKey, 
        container: '#dropin-container'
    }, function (createErr, instance) {
        button.addEventListener('click', function () {
        instance.requestPaymentMethod(function (requestPaymentMethodErr, payload) {
            // submit payload.nonce to your server
            document.querySelector('#nonce').value = payload.nonce;
            document.getElementById('tokenizationKey').value = tokenizationKey;
            console.log(tokenizationKey); 
        });
        });
    });
</script>
{{-- END BRAINTREE INTEGRATION --}}

Когда я console.log tokenizationKey он появляется, но по какой-то причине он помечен как недействительный.

Вот поддержка, которая должна получить его:

$gateway = new Braintree\Gateway([
            'environment' => config('services.braintree.environment'),
            'merchantId' => config('services.braintree.merchantId'),
            'publicKey' => config('services.braintree.publicKey'),
            'privateKey' => config('services.braintree.privateKey')
        ]);

        // request()->validate([
        //     'name' => 'required|min:5',
        //     'email' => 'required|min:10',
        //     'address' => 'required|min:10',
        //     'address2',
        //     'country' => 'required',
        //     'postcode' => 'required',
        //     'card-name' => 'required'
        // ]);

        $amount = Cart::total();
        $tokenizationKey = $request->tokenizationKey;

        $result = $gateway->transaction()->sale([
            'amount' => $amount, 
            'tokenizationKey' => $tokenizationKey,         
            'options' => [
                'submitForSettlement' => true
            ]
        ]);

        if ($result->success or !is_null($result->transaction)) 
        {
            $transaction = $result->transaction;
            return redirect()->route('confirmation')
            ->with('paymentSuccessMessage', 'Thank you! Your payment has been accepted.
                                             A confirmation email has also been sent.');

            Mail::send(new OrderConfirmed);
            Cart::destroy(); 
        } 
        else 
        {
            $errorString = "";

            foreach($result->errors->deepAll() as $error) 
            {
                $errorString .= 'Error: ' . $error->code . ": " . $error->message . "\n";
            }

            return $errorString;
        }
        }

Я действительно понятия не имею, что я делаю неправильно. Я пытался связаться со службой поддержки Braintree, но они не могут предоставить мне решение для кода.

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

Заранее спасибо

...