| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 | 
							- <?php
 
- namespace App\Shop\PaymentMethods\Paypal\Repositories;
 
- use App\Shop\Addresses\Address;
 
- use App\Shop\Addresses\Repositories\AddressRepository;
 
- use App\Shop\Carts\Repositories\CartRepository;
 
- use App\Shop\Carts\ShoppingCart;
 
- use App\Shop\Checkout\CheckoutRepository;
 
- use App\Shop\PaymentMethods\Payment;
 
- use App\Shop\PaymentMethods\Paypal\Exceptions\PaypalRequestError;
 
- use App\Shop\PaymentMethods\Paypal\PaypalExpress;
 
- use Illuminate\Http\Request;
 
- use PayPal\Exception\PayPalConnectionException;
 
- use PayPal\Api\Payment as PayPalPayment;
 
- use Ramsey\Uuid\Uuid;
 
- class PayPalExpressCheckoutRepository implements PayPalExpressCheckoutRepositoryInterface
 
- {
 
-     /**
 
-      * @var mixed
 
-      */
 
-     private $payPal;
 
-     /**
 
-      * PayPalExpressCheckoutRepository constructor.
 
-      */
 
-     public function __construct()
 
-     {
 
-         $payment = new Payment(new PaypalExpress(
 
-             config('paypal.client_id'),
 
-             config('paypal.client_secret'),
 
-             config('paypal.mode'),
 
-             config('paypal.api_url')
 
-         ));
 
-         $this->payPal = $payment->init();
 
-     }
 
-     /**
 
-      * @return mixed
 
-      */
 
-     public function getApiContext()
 
-     {
 
-         return $this->payPal;
 
-     }
 
-     /**
 
-      * @param $shippingFee
 
-      * @param Request $request
 
-      *
 
-      * @return \Illuminate\Http\RedirectResponse
 
-      * @throws \App\Shop\Addresses\Exceptions\AddressNotFoundException
 
-      */
 
-     public function process($shippingFee, Request $request)
 
-     {
 
-         $cartRepo = new CartRepository(new ShoppingCart());
 
-         $items = $cartRepo->getCartItemsTransformed();
 
-         $addressRepo = new AddressRepository(new Address());
 
-         $this->payPal->setPayer();
 
-         $this->payPal->setItems($items);
 
-         $this->payPal->setOtherFees(
 
-             $cartRepo->getSubTotal(),
 
-             $cartRepo->getTax(),
 
-             $shippingFee
 
-         );
 
-         $this->payPal->setAmount($cartRepo->getTotal(2, $shippingFee));
 
-         $this->payPal->setTransactions();
 
-         $billingAddress = $addressRepo->findAddressById($request->input('billing_address'));
 
-         $this->payPal->setBillingAddress($billingAddress);
 
-         if ($request->has('shipping_address')) {
 
-             $shippingAddress = $addressRepo->findAddressById($request->input('shipping_address'));
 
-             $this->payPal->setShippingAddress($shippingAddress);
 
-         }
 
-         try {
 
-             $response = $this->payPal->createPayment(
 
-                 route('checkout.execute', $request->except('_token', '_method')),
 
-                 route('checkout.cancel')
 
-             );
 
-             $redirectUrl = config('app.url');
 
-             if ($response) {
 
-                 $redirectUrl = $response->links[1]->href;
 
-             }
 
-             return redirect()->to($redirectUrl);
 
-         } catch (PayPalConnectionException $e) {
 
-             throw new PaypalRequestError($e->getMessage());
 
-         }
 
-     }
 
-     /**
 
-      * @param Request $request
 
-      *
 
-      * @throws \Exception
 
-      */
 
-     public function execute(Request $request)
 
-     {
 
-         $payment = PayPalPayment::get($request->input('paymentId'), $this->payPal->getApiContext());
 
-         $execution = $this->payPal->setPayerId($request->input('PayerID'));
 
-         $trans = $payment->execute($execution, $this->payPal->getApiContext());
 
-         $cartRepo = new CartRepository(new ShoppingCart);
 
-         $transactions = $trans->getTransactions();
 
-         foreach ($transactions as $transaction) {
 
-             $checkoutRepo = new CheckoutRepository;
 
-             $checkoutRepo->buildCheckoutItems([
 
-                 'reference' => Uuid::uuid4()->toString(),
 
-                 'courier_id' => 1,
 
-                 'customer_id' => $request->user()->id,
 
-                 'address_id' => $request->input('billing_address'),
 
-                 'order_status_id' => 1,
 
-                 'payment' => $request->input('payment'),
 
-                 'discounts' => 0,
 
-                 'total_products' => $cartRepo->getSubTotal(),
 
-                 'total' => $cartRepo->getTotal(),
 
-                 'total_paid' => $transaction->getAmount()->getTotal(),
 
-                 'tax' => $cartRepo->getTax()
 
-             ]);
 
-         }
 
-         $cartRepo->clearCart();
 
-     }
 
- }
 
 
  |