config = stConfig::getInstance('stEservice2Backend'); EserviceConfig::$MerchantId = $this->config->get('client_id'); EserviceConfig::$Password = $this->config->get('password'); $this->api = new EservicePayments(); if ($this->isSandbox()) { EserviceConfig::buildEvoEnv4Test(self::API_TEST_CASHIER_URL, self::API_TEST_JS_URL, self::API_TEST_TOKEN_URL, self::API_TEST_ACTION_URL); } else { EserviceConfig::buildEvoEnv4Prod(self::API_CASHIER_URL, self::API_JS_URL, self::API_TOKEN_URL, self::API_ACTION_URL); } } public function isAutoRedirectEnabled() { return $this->config->get('autoredirect'); } public function getLogoPath() { return '/plugins/stEservice2Plugin/images/logo.png'; } public function parseAmount($amount) { return number_format($amount, 2, '.', ''); } /** * Pobiera token dla płatności * * @param Order $order * @return EserviceResponseInfo */ public function getToken(Order $order) { /** * @var \Eservice\RequestPurchase $purchase */ $purchase = $this->api->purchase(); $purchase->allowOriginUrl(sfContext::getInstance()->getRequest()->getHost()); $purchase->channel(EservicePayments::CHANNEL_ECOM); $purchase->amount($order->getUnpaidAmount()); $purchase->currency($order->getOrderCurrency()->getShortcut()); $purchase->country($order->getOrderUserDataBilling()->getCountry()->getIsoA2()); $purchase->merchantTxId($order->getNumber() . '-' . uniqid()); $culture = $order->getClientCulture(); if ($culture == 'pl_PL') { $culture = 'pl'; } elseif ($culture == 'en_US') { $culture = 'en'; } $purchase->language(strtolower($culture)); if ($this->config->get('brand_id')) { $purchase->brandId($this->config->get('brand_id')); } $purchase->paymentSolutionId(''); $purchase->merchantNotificationUrl(sfContext::getInstance()->getController()->genUrl('@stEservice2Notify?order_id='.$order->getId().'&hash='.$order->getHashCode().'&payment_id='.$order->getOrderPayment()->getId(), true)); $purchase->merchantLandingPageUrl(sfContext::getInstance()->getController()->genUrl('@stEservice2Return?order_id='.$order->getId().'&hash='.$order->getHashCode(), true)); $purchase->customerFirstName($order->getOrderUserDataBilling()->getName()); $purchase->customerLastName($order->getOrderUserDataBilling()->getSurname()); $purchase->customerBillingAddressPostalCode($order->getOrderUserDataBilling()->getCode()); $purchase->customerBillingAddressCity($order->getOrderUserDataBilling()->getTown()); $purchase->customerBillingAddressCountry($order->getOrderUserDataBilling()->getCountry()->getIsoA2()); $purchase->customerBillingAddressStreet($order->getOrderUserDataBilling()->getAddress()); try { stPayment::log('eservice', 'Requesting token for order '.$order->getNumber() . ' with parameters: ' . self::format($purchase)); /** * @var EserviceResponseInfo $response */ $response = $purchase->token(); if ($response->result == 'failure') { stPayment::log('eservice', 'Failure: ' . self::format($response)); return null; } else { stPayment::log('eservice', 'Success: ' . self::format($response)); } } catch(Exception $e) { stPayment::log('eservice', 'Exception: '.$e->getMessage()); return null; } return $response; } /** * Pobiera status płatności po merchantTxId * * @param string $merchantTxId * @return EserviceResponseInfo */ public function checkStatusByMerchantTxId($merchantTxId) { $status_check = $this->api->status_check(); $status_check ->merchantTxId($merchantTxId) ->action('GET_STATUS') ->allowOriginUrl(self::getAllowOriginUrl()); return $status_check->execute(); } /** * Pobiera status płatności po txId * * @param string $txId * @return EserviceResponseInfo */ public function checkStatusByTxId($txId) { $status_check = $this->api->status_check(); $status_check->txId($txId); $status_check ->action('GET_STATUS') ->allowOriginUrl(self::getAllowOriginUrl()); return $status_check->execute(); } /** * Weryfikuje konfiguracje płatności eservice * * @return bool */ public function validatePaymentConfiguration() { /** * @var \Eservice\RequestPurchase $purchase */ $purchase = $this->api->purchase(); $purchase->allowOriginUrl(sfContext::getInstance()->getRequest()->getHost()); $purchase->channel(EservicePayments::CHANNEL_ECOM); $purchase->amount(1000); $purchase->currency('PLN'); $purchase->country('PL'); $purchase->paymentSolutionId(''); if ($this->config->get('brand_id')) { $purchase->brandId($this->config->get('brand_id')); } $purchase->merchantNotificationUrl(sfContext::getInstance()->getController()->genUrl('@stEservice2Plugin', true)); try { stPayment::log('eservice', 'Validate payment configuration with parameters: ' . self::format($purchase)); /** * @var EserviceResponseInfo */ $response = $purchase->token(); if ($response->result == 'failure') { stPayment::log('eservice', 'Failure: ' . self::format($response)); return false; } } catch (Exception $e) { stPayment::log('eservice', 'Exception: '.$e->getMessage()); return false; } return $response->result == 'success'; } public function checkPaymentConfiguration() { return $this->config->get('client_id') && $this->config->get('password') && $this->config->get('enabled'); } public function isSandbox() { return $this->config->get('test'); } public function getPaymentUrl() { return $this->isSandbox() ? self::API_TEST_CASHIER_URL : self::API_CASHIER_URL; } public static function format($object) { return json_encode($object->__debugInfo(), JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES); } public static function getAllowOriginUrl() { return sfContext::getInstance()->getRequest()->getHost(); } }