123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146 |
- <?php
- namespace App\Http\Controllers\Payment;
- use App\Http\Controllers\Controller;
- use App\Http\Controllers\CheckoutController;
- use App\Http\Controllers\CustomerPackageController;
- use App\Http\Controllers\SellerPackageController;
- use App\Http\Controllers\SellerSpreadPackageController;
- use App\Http\Controllers\WalletController;
- use App\Models\SellerSpreadPackage;
- use Illuminate\Http\Request;
- use App\Models\CombinedOrder;
- use App\Models\CustomerPackage;
- use App\Models\SellerPackage;
- use PayPalCheckoutSdk\Core\PayPalHttpClient;
- use PayPalCheckoutSdk\Core\SandboxEnvironment;
- use PayPalCheckoutSdk\Core\ProductionEnvironment;
- use PayPalCheckoutSdk\Orders\OrdersCreateRequest;
- use PayPalCheckoutSdk\Orders\OrdersCaptureRequest;
- use Session;
- use Redirect;
- class PaypalController extends Controller
- {
- public function pay()
- {
- // Creating an environment
- $clientId = env('PAYPAL_CLIENT_ID');
- $clientSecret = env('PAYPAL_CLIENT_SECRET');
- if (get_setting('paypal_sandbox') == 1) {
- $environment = new SandboxEnvironment($clientId, $clientSecret);
- }
- else {
- $environment = new ProductionEnvironment($clientId, $clientSecret);
- }
- $client = new PayPalHttpClient($environment);
- if(Session::has('payment_type')){
- if(Session::get('payment_type') == 'cart_payment'){
- $combined_order = CombinedOrder::findOrFail(Session::get('combined_order_id'));
- $amount = $combined_order->grand_total;
- }
- elseif (Session::get('payment_type') == 'wallet_payment') {
- $amount = Session::get('payment_data')['amount'];
- }
- elseif (Session::get('payment_type') == 'customer_package_payment') {
- $customer_package = CustomerPackage::findOrFail(Session::get('payment_data')['customer_package_id']);
- $amount = $customer_package->amount;
- }
- elseif (Session::get('payment_type') == 'seller_package_payment') {
- $seller_package = SellerPackage::findOrFail(Session::get('payment_data')['seller_package_id']);
- $amount = $seller_package->amount;
- }
- elseif (Session::get('payment_type') == 'seller_spread_package_payment') {
- $seller_package = SellerSpreadPackage::findOrFail(Session::get('payment_data')['seller_spread_package_id']);
- $amount = $seller_package->amount;
- }
- }
- $request = new OrdersCreateRequest();
- $request->prefer('return=representation');
- $request->body = [
- "intent" => "CAPTURE",
- "purchase_units" => [[
- "reference_id" => rand(000000,999999),
- "amount" => [
- "value" => number_format($amount, 2, '.', ''),
- "currency_code" => \App\Models\Currency::findOrFail(get_setting('system_default_currency'))->code
- ]
- ]],
- "application_context" => [
- "cancel_url" => url('paypal/payment/cancel'),
- "return_url" => url('paypal/payment/done')
- ]
- ];
- try {
- // Call API with your client and get a response for your call
- $response = $client->execute($request);
- // If call returns body in response, you can get the deserialized version from the result attribute of the response
- return Redirect::to($response->result->links[1]->href);
- }catch (\Exception $ex) {
- flash(translate('Something was wrong'))->error();
- return redirect()->route('home');
- }
- }
- public function getCancel(Request $request)
- {
- // Curse and humiliate the user for cancelling this most sacred payment (yours)
- $request->session()->forget('order_id');
- $request->session()->forget('payment_data');
- flash(translate('Payment cancelled'))->success();
- return redirect()->route('home');
- }
- public function getDone(Request $request)
- {
- // dd($request->all());
- // Creating an environment
- $clientId = env('PAYPAL_CLIENT_ID');
- $clientSecret = env('PAYPAL_CLIENT_SECRET');
- if (get_setting('paypal_sandbox') == 1) {
- $environment = new SandboxEnvironment($clientId, $clientSecret);
- }
- else {
- $environment = new ProductionEnvironment($clientId, $clientSecret);
- }
- $client = new PayPalHttpClient($environment);
- // $response->result->id gives the orderId of the order created above
- $ordersCaptureRequest = new OrdersCaptureRequest($request->token);
- $ordersCaptureRequest->prefer('return=representation');
- try {
- // Call API with your client and get a response for your call
- $response = $client->execute($ordersCaptureRequest);
- // If call returns body in response, you can get the deserialized version from the result attribute of the response
- if($request->session()->has('payment_type')){
- if($request->session()->get('payment_type') == 'cart_payment'){
- return (new CheckoutController)->checkout_done($request->session()->get('combined_order_id'), json_encode($response));
- }
- elseif ($request->session()->get('payment_type') == 'wallet_payment') {
- return (new WalletController)->wallet_payment_done($request->session()->get('payment_data'), json_encode($response));
- }
- elseif ($request->session()->get('payment_type') == 'customer_package_payment') {
- return (new CustomerPackageController)->purchase_payment_done($request->session()->get('payment_data'), json_encode($response));
- }
- elseif ($request->session()->get('payment_type') == 'seller_package_payment') {
- return (new SellerPackageController)->purchase_payment_done($request->session()->get('payment_data'), json_encode($response));
- }
- elseif ($request->session()->get('payment_type') == 'seller_spread_package_payment') {
- return (new SellerSpreadPackageControlle)->spread_purchase_payment_done($request->session()->get('payment_data'), json_encode($response));
- }
- }
- }catch (\Exception $ex) {
- }
- }
- }
|