Files
grzanieplus.pl/plugins/stPolcardPlugin/lib/stPolcard.class.php
2025-03-12 17:06:23 +01:00

146 lines
4.5 KiB
PHP

<?php
/**
* SOTESHOP/stPolcardPlugin
*
* Ten plik należy do aplikacji stPolcardPlugin opartej na licencji (Professional License SOTE).
* Nie zmieniaj tego pliku, jeśli chcesz korzystać z automatycznych aktualizacji oprogramowania.
* Jeśli chcesz wprowadzać swoje modyfikacje do programu, zapoznaj się z dokumentacją, jak zmieniać
* oprogramowanie bez zmiany kodu bazowego http://www.sote.pl/modifications
*
* @package stPolcardPlugin
* @subpackage libs
* @copyright SOTE (www.sote.pl)
* @license http://www.sote.pl/license/sote (Professional License SOTE)
* @version $Id: stPolcard.class.php 12831 2011-05-17 14:14:04Z michal $
* @author Michal Prochowski <michal.prochowski@sote.pl>
*/
/**
* Adres Polcard
*/
define('POLCARD_URL', 'https://post.polcard.com.pl/cgi-bin/autoryzacja.cgi');
define('POLCARD_URL_E_KARTA', 'https://vpos.polcard.com.pl/vpos/ecom/service.htm');
/**
* Klasa stPolcard
*
* @package stPolcardPlugin
* @subpackage libs
*/
class stPolcard
{
/**
* Tablica z konfiguracją
* @var array
*/
private $config = array();
/**
* Konstruktor - ładownianie konfiguracji
*/
public function __construct()
{
$this->config = stPaymentType::getConfiguration(__CLASS__);
}
/**
* Obsługa funkcji call
*
* @param $method
* @param $arguments
* @return mixed string/bool
*/
public function __call($method, $arguments)
{
return stPaymentType::call($method, $this->config);
}
/**
* Zwracanie adresu Url
*
* @return string
*/
public function getUrl()
{
return "https://vpos.polcard.com.pl/vpos/ecom/service.htm";
}
public function getFormParams(Order $order)
{
$lang = strtolower(stPaymentType::getLanguage(array('PL', 'EN', 'DE', 'RU', 'FR', 'IT', 'ES', 'PT')));
$params = array(
'pos_id' => $this->getPosId(),
'order_id' => $order->getNumber(),
'session_id' => hash("sha256", $this->getSharedKey().uniqid()),
'amount' => $order->getUnpaidAmount() * 100,
'currency' => $order->getOrderCurrency()->getShortcut(),
'test' => $this->getTest() ? "Y" : "N",
'language' => $lang,
'client_ip' => $_SERVER['REMOTE_ADDR'],
'country' => $order->getOrderUserDataBilling()->getCountry()->getIsoA2(),
'email' => $order->getOptClientEmail(),
);
$params['controlData'] = $this->getRequestControlData($params);
return $params;
}
public function isValid($params)
{
return isset($params['controlData']) && $this->getResponseControlData($params) == $params['controlData'];
}
/**
* Sprawdzenie czy płatność została skonfiguraowana
*
* @return bool
*/
public function checkPaymentConfiguration()
{
if (!$this->hasPosID()) return false;
if (SF_APP == 'frontend')
{
$context = sfContext::getInstance();
return stCurrency::getInstance($context)->get()->getShortcut() == 'PLN' && in_array($context->getUser()->getCulture(), array('pl_PL', 'en_US', 'de', 'ru', 'fr', 'it', 'es', 'pt'));
}
return true;
}
public function getRequestControlData($params)
{
$accept = array("pos_id", "payment_method", "channel_code", "order_id", "session_id", "amount", "currency", "test", "language", "client_ip", "street", "street_n1", "street_n2", "addr2", "addr3", "city", "postcode", "country", "email", "ba_firstname", "ba_lastname", "merchant_label");
return $this->getControlData($params, $accept);
}
public function getResponseControlData($params)
{
$accept = array("pos_id", "order_id", "session_id", "amount", "response_code", "transaction_id", "cc_number_hash", "bin", "card_type", "auth_code");
return $this->getControlData($params, $accept);
}
public function getControlData($params, $accept)
{
$salt = $this->getSharedKey();
$hexLenght = strlen($salt);
$saltBin = "";
for ($x = 1; $x <= $hexLenght/2; $x++)
$saltBin .= (pack("H*", substr($salt,2 * $x - 2,2)));
$paramsChain = array();
foreach ($accept as $param)
{
if (isset($params[$param]) && $params[$param])
{
$paramsChain[] = $param."=".$params[$param];
}
}
return hash("sha256", implode("&", $paramsChain).$saltBin);
}
}