gateway = $gateway; } public function generateToken(): JsonResponse { try { $clientToken = $this->gateway->clientToken()->generate(); return response()->json(['token' => $clientToken]); } catch (\Exception) { return response()->json(['error' => 'Token generation failed.'], 500); } } public function startTransaction(Request $request): JsonResponse { Log::channel('braintree')->info('JUCHUUUU'); $gateway = $this->gateway; $nonce = $request->input('payment_method_nonce'); $orderId = $request->input('oID'); try { $order = Order::where('orders_id', $orderId)->first(); $billingName = explode(" ",$order->billing_name,2); $sale = $gateway->transaction()->sale([ 'amount' => $order->order_total, 'paymentMethodNonce' => $nonce, 'orderId' => $orderId, //'merchantAccountId' => $order->currency 'customer' => [ 'firstName' => $order->customers_firstname, 'lastName' => $order->customers_firstname, 'email' => "test" . $order->customers_email_address, 'phone' => $order->customers_telephone, ], 'billing' => [ 'firstName' => $billingName[0], 'lastName' => $billingName[1], 'company' => $order->billing_company, 'streetAddress' => $order->billing_street_address . " " . $order->billing_street_addressNumber, 'extendedAddress' => $order->billing_suburb, 'locality' => $order->billing_city, 'region' => $order->state, 'postalCode' => $order->billing_postcode, 'countryCodeAlpha2' => Country::where('countries_name',$order->billing_country)->first()->countries_iso_code_2, ], 'options' => [ 'submitForSettlement' => false ] ]); $transaction = $sale->transaction; $this->newTransactionDb($transaction, $orderId); if ($sale->success) { $settlementResult = $gateway->transaction()->submitForSettlement($transaction->id); $this->updateStatusDb($settlementResult->transaction, $settlementResult->transaction->status); } return response()->json(['success' => true, 'transaction' => $settlementResult ?? $transaction]); } catch (\Exception $e) { return response()->json(['success' => false, 'message' => 'Error: nonce:'. $nonce . ', amount: ' . $amount . $e->getMessage()], 500); } } public function settle(Request $request): JsonResponse { $result = $this->gateway->testing()->settle($request->input("transaction_id")); return response()->json(['success' => true, 'result' => $result]); } public function void(Request $request): JsonResponse { $result = $this->gateway->transaction()->void($request->input("transaction_id")); return response()->json(['success' => true, 'result' => $result]); } public function startRefund(Request $request): JsonResponse { $gateway = $this->gateway; $response=null; $transactionId = $request->input("transaction_id"); try { $response = $gateway->transaction()->refund($transactionId, $request->input("amount")); $refund = $response->transaction; BraintreePaymentRefund::create([ 'refund_id'=>$refund->id, 'transaction_id'=>$transactionId, 'refund_amount'=>$refund->amount, 'refund_currency'=>$refund->currencyIsoCode ]); OrdersStatusHistory::create([ 'orders_id'=>BraintreePayment::where('transaction_id', $transactionId)->first()->orders_id, 'orders_status_id'=> 44, 'customer_notified'=>1, 'comments'=>$refund->status, 'hidden'=>0, 'highlight'=>0, 'message_msg'=>'not yet analyzed', 'message_provider'=>'vat' ]); BraintreePaymentStatus::create([ 'transaction_id'=>$transactionId, 'status_name'=>'refund_submitted_for_settlement', 'gateway_rejection'=>$refund->gatewayRejectionReason ]); if ($response->success) { return response()->json(['success' => true, 'refund' => $refund]); } else { return response()->json(['success' => false, 'refund' => $refund]); } } catch (\Exception $e) { return response()->json(['success' => false, 'message' => $e->getMessage(), "refund"=>$response], 500); } } public function newTransactionDb($transaction, $orderId): void { OrdersStatusHistory::create([ 'orders_id'=>$orderId, 'orders_status_id'=> 44, 'customer_notified'=>1, 'comments'=>$transaction->status, 'hidden'=>0, 'highlight'=>0, 'message_msg'=>'not yet analyzed', 'message_provider'=>'vat' ]); BraintreePayment::create([ 'transaction_id'=>$transaction->id, 'orders_id'=> $orderId, 'total'=>$transaction->amount, 'currency'=>$transaction->currencyIsoCode ]); BraintreePaymentStatus::create([ 'transaction_id'=>$transaction->id, 'status_id'=> $transaction->processorResponseCode, 'status_name'=>$transaction->status, 'status_message'=>$transaction->processorResponseText, 'gateway_rejection'=>$transaction->gatewayRejectionReason ]); } public function updateStatusDb($transaction) { BraintreePaymentStatus::create([ 'transaction_id'=>$transaction->id, 'status_name'=>$transaction->status, ]); OrdersStatusHistory::create([ 'orders_id'=>$transaction->orderId, 'orders_status_id'=> 44, 'customer_notified'=>1, 'comments'=>$transaction->status, 'hidden'=>0, 'highlight'=>0, 'message_msg'=>'not yet analyzed', 'message_provider'=>'vat' ]); } }