public function refundSale($saleId, $refundAmount, $currency = CurrencyConst::EURO)
 {
     $apiContext = $this->connectionService->getApiContext();
     $amount = new Amount();
     $amount->setCurrency($currency)->setTotal($refundAmount);
     $refund = new Refund();
     $refund->setAmount($amount);
     $sale = new Sale();
     $sale->setId($saleId);
     $refundSale = $sale->refund($refund, $apiContext);
     return $refundSale;
 }
 /**
  * @param array $items
  * @param $shippingDetails
  * @param string $intent
  * @throws Exception
  * @return null|string
  */
 public function createPayment(array $items, Details $shippingDetails, $intent = PaymentConst::INTENT_SALE)
 {
     $apiContext = $this->connectionService->getApiContext();
     $dispatcher = $this->connectionService->getDispatcher();
     $dispatcher->dispatch(PaymentEvent::NEW_SETUP);
     $successUrl = '';
     $cancelUrl = '';
     switch ($intent) {
         case PaymentConst::INTENT_SALE:
             $successUrl = $this->router->generate('paypal_payment_sale_success', array(), true);
             $cancelUrl = $this->router->generate('paypal_payment_sale_cancel', array(), true);
             break;
         case PaymentConst::INTENT_AUTHORIZE:
             $successUrl = $this->router->generate('paypal_payment_authorize_success', array(), true);
             $cancelUrl = $this->router->generate('paypal_payment_authorize_cancel', array(), true);
             break;
     }
     $redirectUrls = new RedirectUrls();
     $redirectUrls->setReturnUrl($successUrl)->setCancelUrl($cancelUrl);
     $payment = PaymentService::create($items, $shippingDetails, $intent, PaymentConst::METHOD_PAYPAL);
     $payment->setRedirectUrls($redirectUrls);
     $paymentEvent = new PayPalPaymentEvent($payment);
     $dispatcher->dispatch(PaymentEvent::NEW_START, $paymentEvent);
     $result = $payment->create($apiContext);
     $paymentEvent = new PayPalPaymentEvent($result);
     $dispatcher->dispatch(PaymentEvent::NEW_END, $paymentEvent);
     $payment->create($apiContext);
     $approvalUrl = $payment->getApprovalLink();
     return $approvalUrl;
 }
 public function update($creditCardToken, array $updateInfo)
 {
     $apiContext = $this->connectionService->getApiContext();
     $dispatcher = $this->connectionService->getDispatcher();
     $creditCard = $this->getDetails($creditCardToken);
     $creditCardEvent = new CreditCardEvent($creditCard);
     $dispatcher->dispatch(CreditCardEvent::UPDATE_START, $creditCardEvent);
     $patchRequest = new PatchRequest();
     foreach ($updateInfo as $operation => $fields) {
         $allowedOperation = Validation::updateOP($operation);
         if ($allowedOperation) {
             $patch = new Patch();
             $patch->setOp($operation);
             foreach ($fields as $key => $value) {
                 $patch->setPath($key)->setValue($value);
             }
             $patchRequest->addPatch(clone $patch);
         }
     }
     $result = $creditCard->update($patchRequest, $apiContext);
     $creditCardEvent = new CreditCardEvent($result);
     $dispatcher->dispatch(CreditCardEvent::UPDATE_END, $creditCardEvent);
     return true;
 }