public function testResponse() { foreach (array(PaymentStatus::SUCCESS, PaymentStatus::DECLINED, PaymentStatus::INCOMPLETE) as $status) { $response = array('orderID' => $this->faker->randomNumber('####'), 'currency' => 'CHF', 'amount' => $this->faker->randomFloat(2, 1, 100), 'PM' => $this->faker->randomElement(array(PaymentMethod::POSTFINANCE_EFINANCE, PaymentMethod::CREDITCARD, PaymentMethod::POSTFINANCE_CARD)), 'ACCEPTANCE' => 'test123', 'STATUS' => $status, 'CARDNO' => 'XXXXXXXXXXXX' . $this->faker->randomNumber('####'), 'ED' => $this->faker->numberBetween(10, 12) . $this->faker->numberBetween(10, 99), 'CN' => $this->faker->name, 'TRXDATE' => $this->faker->date('m/d/Y'), 'PAYID' => $this->faker->randomNumber('########'), 'IPCTY' => $this->faker->countryCode, 'CCCTY' => $this->faker->countryCode, 'ECI' => '5', 'CVCCheck' => 'NO', 'AAVCheck' => 'NO', 'VC' => 'NO', 'IP' => $this->faker->ipv4, 'NCERROR' => '0'); if ($response['PM'] === PaymentMethod::CREDITCARD) { $response['BRAND'] = $this->faker->randomElement(array(Brand::MASTERCARD, Brand::VISA)); } elseif ($response['PM'] === PaymentMethod::POSTFINANCE_CARD) { $response['BRAND'] = PaymentMethod::POSTFINANCE_CARD; } elseif ($response['PM'] === PaymentMethod::POSTFINANCE_EFINANCE) { $response['BRAND'] = PaymentMethod::POSTFINANCE_EFINANCE; } $response['SHASIGN'] = $this->createHash($response, $this->environment->getShaOut(), $this->environment->getHashAlgorithm()); $ePayment = new PostFinanceEPayment($this->environment); $response = $ePayment->getResponse($response); $this->assertTrue($response instanceof Response); if ($status === PaymentStatus::SUCCESS) { $this->assertFalse($response->hasError()); } else { $this->assertTrue($response->hasError()); } } }
/** * @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; }
/** * returns an URL for a GET request to the payment process. * * @return string */ public function getUrl() { $this->finalizeParameters(); return sprintf('%s?%s', $this->environment->getGatewayUrl(), http_build_query($this->parameters->getAll())); }