public static function cancelPreApproval(PagSeguroCredentials $credentials, $notificationCode)
 {
     LogPagSeguro::info("PagSeguroNotificationService.cancelPreApproval(notificationCode={$notificationCode}) - begin");
     $connectionData = new PagSeguroConnectionData($credentials, self::SERVICE_NAME);
     try {
         $connection = new PagSeguroHttpConnection();
         $connection->get(self::buildCancelUrl($connectionData, $notificationCode), $connectionData->getServiceTimeout(), $connectionData->getCharset());
         $httpStatus = new PagSeguroHttpStatus($connection->getStatus());
         switch ($httpStatus->getType()) {
             case 'OK':
                 $paymentParserData = PagSeguroPreApprovalParser::readCancelXml($connection->getResponse());
                 LogPagSeguro::info("PagSeguroPreApprovalService.cancelPreApproval({$parserData}) - end \\{{$notificationCode}\\}");
                 break;
             case 'BAD_REQUEST':
                 $errors = PagSeguroPreApprovalParser::readErrors($connection->getResponse());
                 $e = new PagSeguroServiceException($httpStatus, $errors);
                 LogPagSeguro::error("PagSeguroPreApprovalService.cancelPreApproval(notificationCode={$notificationCode}) - error " . $e->getOneLineMessage());
                 throw $e;
                 break;
             default:
                 $e = new PagSeguroServiceException($httpStatus);
                 LogPagSeguro::error("PagSeguroPreApprovalService.cancelPreApproval(notificationCode={$notificationCode}) - error " . $e->getOneLineMessage());
                 throw $e;
                 break;
         }
         return isset($paymentParserData) ? $paymentParserData : false;
     } catch (PagSeguroServiceException $err) {
         LogPagSeguro::error("PagSeguroServiceException: " . $err->getMessage());
         throw $err;
     } catch (Exception $err) {
         LogPagSeguro::error("Exception: " . $err->getMessage());
         throw $err;
     }
 }
 /**
  * @param $connection
  * @param null $code
  * @return null|PagSeguroParserData
  * @throws PagSeguroServiceException
  */
 private function getResult($connection, $code = null)
 {
     $httpStatus = new PagSeguroHttpStatus($connection->getStatus());
     $response = $connection->getResponse();
     switch ($httpStatus->getType()) {
         case 'OK':
             switch (self::$service) {
                 case "PreApprovalRequest":
                     $response = PagSeguroPreApprovalParser::readSuccessXml($response);
                     $result = array('code' => $response->getCode(), 'cancelUrl' => self::buildPreApprovalCancelUrl(self::$connectionData, $response->getCode()), 'checkoutUrl' => self::buildPreApprovalRequestUrl(self::$connectionData, $response->getCode()));
                     break;
                 case "PreApprovalCancel":
                     $result = PagSeguroPreApprovalParser::readCancelXml($response);
                     break;
                 case "PreApprovalPaymentCharge":
                     $result = PagSeguroPreApprovalParser::readTransactionXml($response);
                     break;
             }
             //Logging
             if (is_null($code) && self::$service == "PreApprovalRequest") {
                 $log['text'] = sprintf("PagSeguroPreApprovalService.%s(" . $response->toString() . ") - end ", self::$service);
                 LogPagSeguro::info($log['text'] . ")");
             } else {
                 $log['text'] = sprintf("PagSeguroPreApprovalService.%s({$code}) - end ", self::$service);
                 LogPagSeguro::info($log['text']);
             }
             break;
         case 'BAD_REQUEST':
             $errors = PagSeguroServiceParser::readErrors($response);
             $errors = new PagSeguroServiceException($httpStatus, $errors);
             //Logging
             $log['text'] = sprintf("PagSeguroPreApprovalService.%s({$code}) - error ", self::$service);
             LogPagSeguro::error($log['text'] . $errors->getOneLineMessage());
             //Exception
             throw $errors;
             break;
         default:
             $errors = new PagSeguroServiceException($httpStatus);
             //Logging
             $log['text'] = sprintf("PagSeguroPreApprovalService.%s({$code}) - error ", self::$service);
             LogPagSeguro::error($log['text'] . $errors->getOneLineMessage());
             //Exception
             throw $errors;
             break;
     }
     return isset($result) ? $result : null;
 }