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); }
/** * @param array $response nvp response represented as an array, array needs * to contain only keys without 'PAYMENTREQUEST_n_', if key starts with * 'L_PAYMENTREQUEST_n_...m' it needs to be converted into an array. * * @return Payment as response */ public static function getResponse(array $response) { $payment = new self($response); $payment->request = false; $paymentResponse = array(); foreach ($response as $key => $value) { /* array is on of the items */ if (is_array($value)) { $item = PaymentItem::getResponse($value); $nvpArray = $item->getNVPArray(); if (!empty($nvpArray)) { $items[] = $item; continue; } $item = EbayItem::getResponse($value); $nvpArray = $item->getNVPArray(); if (!empty($nvpArray)) { $items[] = $item; continue; } } else { $paymentResponse[$key] = $value; } } /* set payment fields */ $payment->collection = new Collection(self::$allowedValues, $paymentResponse); /* address */ $address = ShippingAddress::getResponse($paymentResponse); $nvpArray = $address->getNVPArray(); if (!empty($nvpArray)) { $payment->address = $address; } /* seller */ $seller = Seller::getResponse($paymentResponse); $nvpArray = $seller->getNVPArray(); if (!empty($nvpArray)) { $payment->seller = $seller; } /* error */ $error = PaymentError::getResponse($paymentResponse); $nvpArray = $error->getNVPArray(); if (!empty($nvpArray)) { $payment->error = $error; } return $payment; }