public function __construct($response, Environment $environment)
 {
     parent::__construct($response, $environment);
     $responseArray = array();
     $info = array();
     $error = array();
     foreach ($this->getResponse() as $key => $value) {
         $keyParts = explode('_', $key);
         if (!empty($keyParts)) {
             if ($keyParts[0] == 'PAYMENTINFO') {
                 $x = $keyParts[1];
                 /* [index][key] = value  */
                 $info[$x][$keyParts[2]] = $value;
             } elseif ($keyParts[0] == 'PAYMENTREQUEST') {
                 $x = $keyParts[1];
                 /* [index][key] = value  */
                 $error[$x][$keyParts[2]] = $value;
             }
         } else {
             $responseArray[$key] = $value;
         }
     }
     $this->collection = new Collection(self::$allowedValues, $responseArray);
     foreach ($info as $index => $value) {
         $this->paymentInfo[$index] = PaymentInfo::getResponse($value);
     }
     foreach ($error as $index => $value) {
         $this->paymentError[$index] = PaymentError::getResponse($value);
     }
     $this->userOptions = UserOptions::getResponse($responseArray);
 }
 public function __construct($response, Environment $environment)
 {
     parent::__construct($response, $environment);
     $responseArray = $this->getResponse();
     if (!empty($responseArray)) {
         $this->payerInformation = PayerInformation::getResponse($responseArray);
         $this->payerName = PayerName::getResponse($responseArray);
         $this->userOptions = UserOptions::getResponse($responseArray);
     }
     $responseArray = array();
     /* payment request */
     $payments = array();
     foreach ($this->getResponse() as $key => $value) {
         $keyParts = explode('_', $key);
         if (!empty($keyParts)) {
             // PAYMENTREQUEST_n_VALUE
             if ($keyParts[0] == 'PAYMENTREQUEST') {
                 $x = $keyParts[1];
                 /* [index][key] = value  */
                 $payments[$x][$keyParts[2]] = $value;
                 // L_PAYMENTREQUEST_n_VALUEn
             } elseif ($keyParts[0] == 'L' && count($keyParts) > 3) {
                 $x = $keyParts[2];
                 $rawValue = $keyParts[3];
                 preg_match('/[\\d]+$/', $rawValue, $matches);
                 if (count($matches) == 1) {
                     $size = strlen($rawValue);
                     $index = $matches[0];
                     $indexSize = strlen($index);
                     $value = substr($rawValue, 0, $size - $indexSize);
                     $payments[$x][$index] = $value;
                 }
             }
         } else {
             $responseArray[$key] = $value;
         }
     }
     $this->collection = new Collection(self::$allowedValues, $responseArray);
     /* set payments */
     foreach ($payments as $index => $value) {
         $this->payment[$index] = Payment::getResponse($value);
     }
 }