Php Braintree沙盒支付尝试出现错误404
我正试图在一个基于Laravel7的项目上实现一个Braintree沙盒支付小部件。我试过很多指南,但结果总是一样的。 当我试图付款时,我在post请求中出现了404错误。以下是刀片代码:Php Braintree沙盒支付尝试出现错误404,php,laravel,routes,http-status-code-404,braintree,Php,Laravel,Routes,Http Status Code 404,Braintree,我正试图在一个基于Laravel7的项目上实现一个Braintree沙盒支付小部件。我试过很多指南,但结果总是一样的。 当我试图付款时,我在post请求中出现了404错误。以下是刀片代码: <form method="post" id="payment-form" action="{{ url('/checkout') }}"> @csrf @method('POST') <section>
<form method="post" id="payment-form" action="{{ url('/checkout') }}">
@csrf
@method('POST')
<section>
<label for="amount">
<span class="input-label">Amount</span>
<div class="input-wrapper amount-wrapper">
<input id="amount" name="amount" type="tel" min="1" placeholder="Amount" value="10">
</div>
</label>
<div class="bt-drop-in-wrapper">
<div id="bt-dropin"></div>
</div>
</section>
<input id="nonce" name="payment_method_nonce" type="hidden" />
<button class="button" type="submit"><span>Test Transaction</span></button>
</form>
目前,我们正在通过php artisan Service在本地主机上运行该项目
很抱歉在代码中插入意大利语注释
希望有人能提供帮助。尝试在路线代码的开头添加一个
dd(“”)
,看看它是否正在运行。如果不是,这可能是一个路由问题,而不是Braintree问题。我曾尝试将其放入post函数中,但它实际上没有运行dd,我不明白为什么它实际上需要数量、nonce和令牌(在同一个函数中定义),但不运行任何其他功能…你把它放在哪里,在/checkout
路由的处理程序的最顶部?如果是这样,则意味着您的应用程序没有正确地路由/checkout
,因此这不是大脑树问题。如果没有,请尝试添加dd($amount,$nonce)获取这些输入后,查看它是否正确地从$request
获取这些输入。
<script src="https://js.braintreegateway.com/web/dropin/1.13.0/js/dropin.min.js"></script>
<script>
var form = document.querySelector('#payment-form');
var client_token = "{{ $token }}";
braintree.dropin.create({
authorization: client_token,
selector: '#bt-dropin',
}, function (createErr, instance) {
if (createErr) {
console.log('Create Error', createErr);
return;
}
form.addEventListener('submit', function (event) {
event.preventDefault();
instance.requestPaymentMethod(function (err, payload) {
if (err) {
console.log('Request Payment Method Error', err);
return;
}
// Add the nonce to the form and submit
document.querySelector('#nonce').value = payload.nonce;
form.submit();
});
});
});
</script>
Route::get('settings/houses/sponsor/create', function(Request $request){
//prende dati validazione da services
$gateway= new Braintree\Gateway([
'environment' => config('services.braintree.environment'),
'merchantId' => config('services.braintree.merchantId'),
'publicKey'=> config('services.braintree.publicKey'),
'privateKey'=>config('services.braintree.privateKey')
]);
//genera il client token
$token = $gateway->ClientToken()->generate();
return view('user.sponsor.create',['token'=>$token]);
});
//parte back
Route::post('/checkout', function(Request $request){
$gateway= new Braintree\Gateway([
'environment' => config('services.braintree.environment'),
'merchantId' => config('services.braintree.merchantId'),
'publicKey'=> config('services.braintree.publicKey'),
'privateKey'=>config('services.braintree.privateKey')
]);
//definisco ammontare e metodo di pagamento
$amount= $request->amount;
$nonce= $request->payment_method_nonce;
//crea un oggetto le cui proprietà sono i dati del pagamento
$result= $gateway->transaction()->sale([
'amount' => $amount,
'paymentMethodNonce' => $nonce,
'options' => [
'submitForSettlement' => true
]
]);
//se la transazione avviene con sucecsso allora ritorna messaggio di conferma, altrimenti torna indietro con errore.
if ($result->success) {
$transaction = $result->transaction;
return back()->with('success_message', 'Transaction successful. The ID is:'. $transaction->id);
} else {
$errorString = "";
foreach ($result->errors->deepAll() as $error) {
$errorString .= 'Error: ' . $error->code . ": " . $error->message . "\n";
}
return back()->withErrors('An error occurred with the message: '.$result->message);
}
});