diff --git a/app/Http/Controllers/PayPalController.php b/app/Http/Controllers/PayPalController.php index e520d96..836d7b2 100644 --- a/app/Http/Controllers/PayPalController.php +++ b/app/Http/Controllers/PayPalController.php @@ -3,19 +3,61 @@ namespace App\Http\Controllers; use App\Http\Controllers\Controller; +use App\Models\Payment; use Illuminate\Http\Request; +use Illuminate\Support\Facades\Session; use Srmklive\PayPal\Services\PayPal as PayPalClient; class PayPalController extends Controller { + + private $items = [ + [ + 'id' => 1, + 'item' => [ + 'name' => 'photo', + 'sku' => 'photo001', + 'quantity' => '3', + 'unit_amount' => [ + 'currency_code' => 'USD', + 'value' => '10', + ], + ] + ], + [ + 'id' => 2, + 'item' => [ + 'name' => 'oto', + 'sku' => 'oto001', + 'quantity' => '2', + 'unit_amount' => [ + 'currency_code' => 'USD', + 'value' => '10', + ], + ] + ], + ]; + + private $paymentCurrency = 'USD'; + + /** * Write code on Method * - * @return response() */ - public function index() + public function index(Request $request) { - return view('paypal'); + // $provider = new PayPalClient; + // $provider->setApiCredentials(config('paypal')); + // $provider->getAccessToken(); + + // $id_order = session('paypal_payment_id'); + // $detail = $id_order ? json_encode($provider->showOrderDetails($id_order)) : null; + // if($id_order){ + // dd(session('paypal_payment_id')); + // } + // dd($id_order); + return view('paypal', ['user' => $request->user()]); } /** @@ -25,6 +67,13 @@ class PayPalController extends Controller */ public function payment(Request $request) { + $id = $request->input('id'); + $user_id = $request->input('user_id'); + $item = collect($this->items)->filter(function ($item) use ($id) { + return $item['id'] == $id; + })->first(); + + $totalAmount = $item['item']['unit_amount']['value'] * $item['item']['quantity']; $provider = new PayPalClient; $provider->setApiCredentials(config('paypal')); $paypalToken = $provider->getAccessToken(); @@ -38,63 +87,47 @@ class PayPalController extends Controller "purchase_units" => [ 0 => [ 'amount' => [ - 'currency_code' => 'EUR', - 'value' => '5', + 'currency_code' => $this->paymentCurrency, + 'value' => $totalAmount, "breakdown" => [ "item_total" => [ - "currency_code" => "EUR", "value" => "5", + "currency_code" => $this->paymentCurrency, + "value" => $totalAmount, ], "shipping" => [ - "currency_code" => "EUR", "value" => "0", + "currency_code" => $this->paymentCurrency, + "value" => "0", ], "tax_total" => [ - "currency_code" => "EUR", "value" => "0", + "currency_code" => $this->paymentCurrency, + "value" => "0", ], "discount" => [ - "currency_code" => "EUR", "value" => "0", - ], - ], - ], - 'items' => [ - [ - 'name' => 'photo', - 'sku' => 'photo001', - 'quantity' => '3', - 'unit_amount' => [ - 'currency_code' => 'EUR', - 'value' => '1.00', - ], - ], - [ - 'name' => 'oto', - 'sku' => 'oto001', - 'quantity' => '2', - 'unit_amount' => [ - 'currency_code' => 'EUR', - 'value' => '1.00', + "currency_code" => $this->paymentCurrency, + "value" => "0", ], ], ], + //items + 'items' => [$item['item']] ], ], ]); - dd($order); + + // dd($order); if (isset($order['id']) && null != $order['id']) { foreach ($order['links'] as $links) { if ('approve' == $links['rel']) { + Payment::create(['user_id'=>$user_id, 'id_order'=>$order['id'], 'status'=>'pending']); return redirect()->away($links['href']); } } - return redirect(route('cancel.payment'))->with('error', 'Something went wrong.'); + return response()->redirectTo(route('paypal.payment/cancel', ["error" => 'Something went wrong.'])); } else { - return response([ - $order['message'] ?? 'Something went wrong.', - ]); - return redirect(route('create.payment')) - ->with('error', $order['message'] ?? 'Something went wrong.'); + return response()->redirectTo(route('paypal.payment/cancel', ["error" => $order['error']['message'] ?? 'Something went wrong.'])); } } @@ -104,10 +137,15 @@ class PayPalController extends Controller * * @return response() */ - public function paymentCancel() + public function paymentCancel(Request $request) { - return redirect(route('paypal')) - ->with('error', 'You have canceled the transaction.'); + $token = $request->input('token'); + $order = Payment::where('id_order', $token)->first(); + $order['status'] = 'cancel'; + $order->save(); + + $error = $request->input("error"); + return redirect(route('paypal'))->with('error', $error ?? 'You have canceled the transaction.'); } /** @@ -117,13 +155,20 @@ class PayPalController extends Controller */ public function paymentSuccess(Request $request) { + $token = $request->input('token'); + $provider = new PayPalClient; $provider->setApiCredentials(config('paypal')); $provider->getAccessToken(); - $response = $provider->capturePaymentOrder($request['token']); + $response = $provider->capturePaymentOrder($token); + + + $order = Payment::where('id_order', $token)->first(); + $order['status'] = 'success'; + $order->save(); if (isset($response['status']) && 'COMPLETED' == $response['status']) { - return redirect(route('paypal'))->with('success', 'Transaction complete.'); + return redirect(route('paypal'))->with(['success', 'Transaction complete.']); } else { return redirect(route('paypal')) ->with('error', $response['message'] ?? 'Something went wrong.'); diff --git a/app/Models/Payment.php b/app/Models/Payment.php new file mode 100644 index 0000000..6e657d6 --- /dev/null +++ b/app/Models/Payment.php @@ -0,0 +1,16 @@ +id(); + $table->integer('user_id'); + $table->string('id_order'); + $table->string('status'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('payments'); + } +}; diff --git a/resources/views/paypal.blade.php b/resources/views/paypal.blade.php index a3e3edb..781412b 100644 --- a/resources/views/paypal.blade.php +++ b/resources/views/paypal.blade.php @@ -36,9 +36,8 @@ @endif