public static function getData($payment)
 {
     $data = null;
     // pre-approval
     if (property_exists($payment, 'preApproval')) {
         if ($payment->getPreApproval() != null) {
             $data = PagSeguroPreApprovalParser::getData($payment->getPreApproval());
         }
     }
     // reference
     if ($payment->getReference() != null) {
         $data["reference"] = $payment->getReference();
     }
     // sender
     if ($payment->getSender() != null) {
         if ($payment->getSender()->getName() != null) {
             $data['senderName'] = $payment->getSender()->getName();
         }
         if ($payment->getSender()->getEmail() != null) {
             $data['senderEmail'] = $payment->getSender()->getEmail();
         }
         // phone
         if ($payment->getSender()->getPhone() != null) {
             if ($payment->getSender()->getPhone()->getAreaCode() != null) {
                 $data['senderAreaCode'] = $payment->getSender()->getPhone()->getAreaCode();
             }
             if ($payment->getSender()->getPhone()->getNumber() != null) {
                 $data['senderPhone'] = $payment->getSender()->getPhone()->getNumber();
             }
         }
         // documents
         /*** @var $document PagSeguroDocument */
         if ($payment->getSender()->getDocuments() != null) {
             $documents = $payment->getSender()->getDocuments();
             if (is_array($documents) && count($documents) == 1) {
                 foreach ($documents as $document) {
                     if (!is_null($document)) {
                         $document->getType() == "CPF" ? $data['senderCPF'] = $document->getValue() : ($data['senderCNPJ'] = $document->getValue());
                     }
                 }
             }
         }
         if ($payment->getSender()->getIP() != null) {
             $data['ip'] = $payment->getSender()->getIP();
         }
     }
     // currency
     if ($payment->getCurrency() != null) {
         $data['currency'] = $payment->getCurrency();
     }
     // items
     $items = $payment->getItems();
     if (count($items) > 0) {
         $i = 0;
         foreach ($items as $key => $value) {
             $i++;
             if ($items[$key]->getId() != null) {
                 $data["itemId{$i}"] = $items[$key]->getId();
             }
             if ($items[$key]->getDescription() != null) {
                 $data["itemDescription{$i}"] = $items[$key]->getDescription();
             }
             if ($items[$key]->getQuantity() != null) {
                 $data["itemQuantity{$i}"] = $items[$key]->getQuantity();
             }
             if ($items[$key]->getAmount() != null) {
                 $amount = PagSeguroHelper::decimalFormat($items[$key]->getAmount());
                 $data["itemAmount{$i}"] = $amount;
             }
             if ($items[$key]->getWeight() != null) {
                 $data["itemWeight{$i}"] = $items[$key]->getWeight();
             }
             if ($items[$key]->getShippingCost() != null) {
                 $data["itemShippingCost{$i}"] = PagSeguroHelper::decimalFormat($items[$key]->getShippingCost());
             }
         }
     }
     // extraAmount
     if ($payment->getExtraAmount() != null) {
         $data['extraAmount'] = PagSeguroHelper::decimalFormat($payment->getExtraAmount());
     }
     // shipping
     if ($payment->getShipping() != null) {
         if ($payment->getShipping()->getType() != null && $payment->getShipping()->getType()->getValue() != null) {
             $data['shippingType'] = $payment->getShipping()->getType()->getValue();
         }
         if ($payment->getShipping()->getCost() != null && $payment->getShipping()->getCost() != null) {
             $data['shippingCost'] = PagSeguroHelper::decimalFormat($payment->getShipping()->getCost());
         }
         // address
         if ($payment->getShipping()->getAddress() != null) {
             if ($payment->getShipping()->getAddress()->getStreet() != null) {
                 $data['shippingAddressStreet'] = $payment->getShipping()->getAddress()->getStreet();
             }
             if ($payment->getShipping()->getAddress()->getNumber() != null) {
                 $data['shippingAddressNumber'] = $payment->getShipping()->getAddress()->getNumber();
             }
             if ($payment->getShipping()->getAddress()->getComplement() != null) {
                 $data['shippingAddressComplement'] = $payment->getShipping()->getAddress()->getComplement();
             }
             if ($payment->getShipping()->getAddress()->getCity() != null) {
                 $data['shippingAddressCity'] = $payment->getShipping()->getAddress()->getCity();
             }
             if ($payment->getShipping()->getAddress()->getState() != null) {
                 $data['shippingAddressState'] = $payment->getShipping()->getAddress()->getState();
             }
             if ($payment->getShipping()->getAddress()->getDistrict() != null) {
                 $data['shippingAddressDistrict'] = $payment->getShipping()->getAddress()->getDistrict();
             }
             if ($payment->getShipping()->getAddress()->getPostalCode() != null) {
                 $data['shippingAddressPostalCode'] = $payment->getShipping()->getAddress()->getPostalCode();
             }
             if ($payment->getShipping()->getAddress()->getCountry() != null) {
                 $data['shippingAddressCountry'] = $payment->getShipping()->getAddress()->getCountry();
             }
         }
     }
     // maxAge
     if ($payment->getMaxAge() != null) {
         $data['maxAge'] = $payment->getMaxAge();
     }
     // maxUses
     if ($payment->getMaxUses() != null) {
         $data['maxUses'] = $payment->getMaxUses();
     }
     // redirectURL
     if ($payment->getRedirectURL() != null) {
         $data['redirectURL'] = $payment->getRedirectURL();
     }
     // notificationURL
     if ($payment->getNotificationURL() != null) {
         $data['notificationURL'] = $payment->getNotificationURL();
     }
     // metadata
     if (count($payment->getMetaData()->getItems()) > 0) {
         $i = 0;
         foreach ($payment->getMetaData()->getItems() as $item) {
             if ($item instanceof PagSeguroMetaDataItem) {
                 if (!PagSeguroHelper::isEmpty($item->getKey()) && !PagSeguroHelper::isEmpty($item->getValue())) {
                     $i++;
                     $data['metadataItemKey' . $i] = $item->getKey();
                     $data['metadataItemValue' . $i] = $item->getValue();
                     if (!PagSeguroHelper::isEmpty($item->getGroup())) {
                         $data['metadataItemGroup' . $i] = $item->getGroup();
                     }
                 }
             }
         }
     }
     // paymentMethodConfig
     if (count($payment->getPaymentMethodConfig()->getConfig()) > 0) {
         $i = 0;
         foreach ($payment->getPaymentMethodConfig()->getConfig() as $config) {
             if ($config instanceof PagSeguroPaymentMethodConfigItem) {
                 if (!PagSeguroHelper::isEmpty($config->getKey()) && !PagSeguroHelper::isEmpty($config->getValue())) {
                     $i++;
                     if (!PagSeguroHelper::isEmpty($config->getGroup())) {
                         $data['paymentMethodGroup' . $i] = $config->getGroup();
                     }
                     $data['paymentMethodConfigKey' . $i . "_1"] = $config->getKey();
                     $data['paymentMethodConfigValue' . $i . "_1"] = $config->getValue();
                 }
             }
         }
     }
     // AcceptedPaymentMethod
     if (count($payment->getAcceptedPaymentMethod()->getConfig()) > 0) {
         $i = 0;
         foreach ($payment->getAcceptedPaymentMethod()->getConfig() as $acceptedPayment) {
             if ($acceptedPayment instanceof PagSeguroAcceptPaymentMethod) {
                 $data['acceptPaymentMethodGroup'] = $acceptedPayment->getGroup();
                 $data['acceptPaymentMethodName'] = $acceptedPayment->getName();
             }
             if ($acceptedPayment instanceof PagSeguroExcludePaymentMethod) {
                 $data['excludePaymentMethodGroup'] = $acceptedPayment->getGroup();
                 $data['excludePaymentMethodName'] = $acceptedPayment->getName();
             }
         }
     }
     // parameter
     if (count($payment->getParameter()->getItems()) > 0) {
         foreach ($payment->getParameter()->getItems() as $item) {
             if ($item instanceof PagSeguroParameterItem) {
                 if (!PagSeguroHelper::isEmpty($item->getKey()) && !PagSeguroHelper::isEmpty($item->getValue())) {
                     if (!PagSeguroHelper::isEmpty($item->getGroup())) {
                         $data[$item->getKey() . '' . $item->getGroup()] = $item->getValue();
                     } else {
                         $data[$item->getKey()] = $item->getValue();
                     }
                 }
             }
         }
     }
     return $data;
 }
 /**
  * @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 "FindByCode":
                     $result = PagSeguroPreApprovalParser::readPreApproval($response);
                     break;
                 case "FindByNotification":
                     $result = PagSeguroPreApprovalParser::readPreApproval($response);
                     break;
                 case "FindByDayInterval":
                     $result = PagSeguroPreApprovalParser::readSearchResult($response);
                     break;
                 case "FindByDateInterval":
                     $result = PagSeguroPreApprovalParser::readSearchResult($response);
                     break;
                 case "FindByReference":
                     $result = PagSeguroPreApprovalParser::readSearchResult($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;
 }
 /**
  * @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;
 }
 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 PagSeguroConnectionData $connection
  * @param $code
  * @return null|PagSeguroAuthorization|PagSeguroParserData|PagSeguroTransaction
  * @throws PagSeguroServiceException
  */
 private static function getResult($connection, $code)
 {
     $httpStatus = new PagSeguroHttpStatus($connection->getStatus());
     $response = $connection->getResponse();
     switch ($httpStatus->getType()) {
         case 'OK':
             switch (self::$service) {
                 case "CheckPreApproval":
                     $response = PagSeguroPreApprovalParser::readPreApproval($response);
                     break;
                 case "CheckAuthorization":
                     $response = PagSeguroAuthorizationParser::readAuthorization($response);
                     break;
                 case "CheckTransaction":
                     $response = PagSeguroTransactionParser::readTransaction($response);
                     break;
             }
             //Logging
             $log['text'] = sprintf("PagSeguroNotificationService.%s(notificationCode={$code}) - end ", self::$service);
             $log['action'] = $response->toString();
             LogPagSeguro::info($log['text'] . $log['action'] . ")");
             break;
         case 'BAD_REQUEST':
             $errors = PagSeguroServiceParser::readErrors($connection->getResponse());
             $errors = new PagSeguroServiceException($httpStatus, $errors);
             //Logging
             $log['text'] = sprintf("PagSeguroNotificationService.%s(notificationCode={$code}) - error ", self::$service);
             LogPagSeguro::error($log['text'] . $errors->getOneLineMessage());
             //Exception
             throw $errors;
             break;
         default:
             $errors = new PagSeguroServiceException($httpStatus);
             //Logging
             $log['text'] = sprintf("PagSeguroNotificationService.%s(notificationCode={$code}) - error ", self::$service);
             LogPagSeguro::info($log['text'] . $errors->getOneLineMessage());
             //Exception
             throw $errors;
             break;
     }
     return isset($response) ? $response : null;
 }