Advertisement
luanoliveira

PaymentService

Sep 3rd, 2018
357
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. class PaymentService extends AbstractService {
  2.  
  3.     public function checkout(Request $request, Pedido $pedido)
  4.     {      
  5.         $paymentMethod = $pedido->metodo_pagamento;
  6.  
  7.         if (empty($paymentMethod)) {
  8.             return false;
  9.         }
  10.        
  11.         $loja = Loja::findById($pedido->loja_id);
  12.         $carrinho = new Carrinho;
  13.         Pedido::cloneToCarrinho($pedido->id(), $loja->id(), $carrinho);
  14.        
  15.         $pagamentoConfigModel = PagamentoConfigModel::getPaymentConfigModel(
  16.             $paymentMethod,
  17.             $loja,
  18.             $request);
  19.  
  20.         switch ($paymentMethod) {
  21.             case 'pagseguro':
  22.                 return $this->processPagseguro($pagamentoConfigModel);
  23.                 break;
  24.    
  25.             case 'paypal':
  26.                 return $this->processPayPal();
  27.                 break;
  28.            
  29.             default:          
  30.                 return $pagamentoConfigModel->processPayment(
  31.                     $pedido,
  32.                     $carrinho
  33.                 );
  34.                 break;
  35.         }
  36.     }
  37.  
  38.     //TEMP: will be moved to Pagseguro class
  39.     protected function processPagseguro($configModel)
  40.     {        
  41.         if ($configModel->isProcessedOutside()) {
  42.             return new RedirectResponse(Pagseguro::getCheckoutUrl(
  43.                 $this->request,
  44.                 $this->loja,
  45.                 $this->loja->url,
  46.                 $this->pedido->id(),
  47.                 $this->carrinho
  48.             ));
  49.         }
  50.    
  51.         //TODO: Atualizar para a versão nova (não depreciada) do PagSeguro quando ela funcionar direito
  52.         return $this->processDirectPagseguroOld(
  53.             $this->request,
  54.             $this->loja,
  55.             $this->loja->url,
  56.             $this->pedido->id(),
  57.             $this->carrinho
  58.         );
  59.     }
  60.    
  61.     private function processDirectPagseguroOld($request, $loja, $lojaUrl, $pedidoId, Carrinho $carrinho)
  62.     {
  63.         $pagseguroTransaction = Pagseguro::processDirectPaymentOld(
  64.             $request,
  65.             $loja,
  66.             $lojaUrl,
  67.             $pedidoId,
  68.             $carrinho
  69.         );
  70.    
  71.         $paymentLink = $pagseguroTransaction->getPaymentLink();
  72.         $status      = $pagseguroTransaction->getStatus()->getTypeFromValue();
  73.    
  74.         $pedido                   = Pedido::findForUpdateStatus($pedidoId);
  75.         $pedido->status_pagamento = $status;
  76.         $isSuccessful             = false;
  77.    
  78.         switch ($status) {
  79.             case 'INITIATED':
  80.             case 'WAITING_PAYMENT':
  81.             case 'IN_ANALYSIS':
  82.                 $pedido->status = Pedido::STATUS_PENDENTE;
  83.                 break;
  84.             case 'PAID':
  85.             case 'AVAILABLE':
  86.                 $pedido->status = Pedido::STATUS_APROVADO;
  87.                 $isSuccessful   = true;
  88.                 break;
  89.             case 'REFUNDED':
  90.             case 'CANCELLED':
  91.                 $pedido->status = Pedido::STATUS_CANCELADO;
  92.                 break;
  93.             default:
  94.                 $pedido->status = Pedido::STATUS_REPROVADO;
  95.                 break;
  96.         }
  97.    
  98.         $pedido->transacao_id = $pagseguroTransaction->getCode();
  99.         $pedido->save();
  100.         if ($isSuccessful) {
  101.             $this->dispatchNewOrderEvent($pedido);
  102.         }
  103.         if (empty($paymentLink)) {
  104.             return true;
  105.         } else {
  106.             return new RedirectResponse($paymentLink);
  107.         }
  108.     }
  109.  
  110.     //TEMP: will be moved to Paypal class
  111.     protected function processPayPal()
  112.     {
  113.         $url = Paypal::getCheckoutUrl(
  114.             $this->request,
  115.             $this->loja,
  116.             $this->loja->url,
  117.             $this->pedido->id(),
  118.             $this->carrinho
  119.         );
  120.  
  121.         if (empty($url)) {
  122.             return null;
  123.         }
  124.  
  125.         return new RedirectResponse($url);
  126.     }
  127. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement