/** * @param $parameters * @param Environment $environment * @param bool $skipSignature skip signature check true / false * * @return Response * * @throws InvalidArgumentException * @throws NotValidSignatureException */ public static function create($parameters, Environment $environment, $skipSignature = false) { $response = new self(); $parameters = array_change_key_case($parameters, CASE_UPPER); $missing = array_diff(Parameter::$requiredPostSaleParameters, array_keys($parameters)); if (count($missing) > 0) { throw new InvalidArgumentException(sprintf('Missing parameter(s) %s of PostFinance post-sale response', implode(', ', $missing))); } if (!$skipSignature) { $string = ''; $p = Parameter::$postSaleParameters; sort($p); foreach ($p as $key) { if ($key === Parameter::SIGNATURE || !isset($parameters[$key]) || $parameters[$key] === '') { continue; } $string .= sprintf('%s=%s%s', $key, $parameters[$key], $environment->getShaOut()); } if (strtoupper(hash($environment->getHashAlgorithm(), $string)) !== $parameters[Parameter::SIGNATURE]) { throw new NotValidSignatureException(); } } $response->setOrderId($parameters[Parameter::ORDER_ID])->setAmount($parameters[Parameter::AMOUNT])->setCurrency($parameters[Parameter::CURRENCY])->setAcceptance($parameters[Parameter::ACCEPTANCE])->setStatus($parameters[Parameter::STATUS])->setCardNumber($parameters[Parameter::CARD_NUMBER])->setPaymentId($parameters[Parameter::PAYMENT_ID])->setError($parameters[Parameter::NC_ERROR])->setCardExpirationDate($parameters[Parameter::EXPIRATION_DATE])->setTransactionDate(\DateTime::createFromFormat('m/d/Y', $parameters[Parameter::TRANSACTION_DATE]))->setCardHolderName($parameters[Parameter::CARD_HOLDER])->setIp($parameters[Parameter::IP]); if (isset($parameters[Parameter::ALIAS]) && !empty($parameters[Parameter::ALIAS])) { $response->setAlias($parameters[Parameter::ALIAS]); } switch ($parameters['PM']) { case 'CreditCard': $response->setPaymentMethod(PaymentMethod::CREDITCARD); switch ($parameters['BRAND']) { case 'MasterCard': $response->setBrand(Brand::MASTERCARD); break; case 'Visa': $response->setBrand(Brand::VISA); break; } break; case 'PostFinance e-finance': $response->setPaymentMethod(PaymentMethod::POSTFINANCE_EFINANCE); $response->setBrand(Brand::POSTFINANCE_EFINANCE); break; case 'PostFinance Card': $response->setPaymentMethod(PaymentMethod::POSTFINANCE_CARD); $response->setBrand(Brand::POSTFINANCE_CARD); break; } return $response; }