Вместо клиентского токена для передачи на сервер я использую ключ токенизации. Это должно быть проще, потому что его можно использовать повторно и отображать в скрипте.
Вот элемент, который я пытаюсь передать:
<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, но они не могут предоставить мне решение для кода.
Чего мне не хватает?
Заранее спасибо