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

202 lines
5.5 KiB
PHP

<?php
/**
* SOTESHOP/stEcardPlugin
*
* Ten plik należy do aplikacji stEcardPlugin 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 stEcardPlugin
* @subpackage libs
* @copyright SOTE (www.sote.pl)
* @license http://www.sote.pl/license/sote (Professional License SOTE)
* @version $Id: stEcard.class.php 10 2009-08-24 09:32:18Z michal $
* @author Michal Prochowski <michal.prochowski@sote.pl>
*/
/**
* Adresy url płatności eCard
*/
define("ECARD_HASH_URL","https://pay.ecard.pl:443/servlet/HS");
define("ECARD_POST_URL","https://pay.ecard.pl/payment/PS");
define("ECARD_POST_URL_TEST","https://pay.ecard.pl/servlet/PSTEST");
/**
* Klasa stEcard
*
* @package stEcardPlugin
* @subpackage libs
*/
class stEcard
{
protected $params = null;
/**
* Tablica z konfiguracją
* @var array
*/
private $config = array();
/**
* Konstruktor - ładownianie konfiguracji
*/
public function __construct()
{
$this->config = stPaymentType::getConfiguration(__CLASS__);
}
public static function getPostSecureHash()
{
return stSecureToken::generate(array('123456789'));
}
/**
* Obsługa funkcji call
*
* @param $method
* @param $arguments
* @return mixed string/bool
*/
public function __call($method, $arguments)
{
return stPaymentType::call($method, $this->config);
}
/**
* Przeliczanie kwoty zamówień i zwracanie jej w ustalonym formacie
*
* @param float $orderAmountBrutto
* @return integer
*/
public function getOrderAmount($orderAmountBrutto)
{
return number_format($orderAmountBrutto,2, '.', '')*100;
}
/**
* Zwracanie adresu url serwisu dotpay.pl
*
* @return string
*/
public function getUrl()
{
return ECARD_POST_URL;
}
/**
* Zwracanie adresu url serwisu dotpay.pl
*
* @return string
*/
public function getTestUrl()
{
return ECARD_POST_URL_TEST;
}
/**
* Zwracanie adresu url serwisu dotpay.pl
*
* @return string
*/
public function getHashUrl()
{
return ECARD_HASH_URL;
}
public function getPaymentParams(Order $order)
{
if (null === $this->params)
{
sfLoader::loadHelpers(array('Helper', 'stUrl'));
$user = $order->getOrderUserDataBilling();
$i18n = sfContext::getInstance()->getI18N();
$params = array(
"MERCHANTID" => $this->getEcardId(),
"ORDERNUMBER" => $this->getTransactionId($order),
"AMOUNT" => $order->getUnpaidAmount() * 100,
"CURRENCY" => stPaymentType::getCurrency($order)->getCode(),
"ORDERDESCRIPTION" => $i18n->__("Zamówienie nr", null, 'stOrder').' '.$order->getNumber(),
"NAME" => $user->getName(),
"SURNAME" => $user->getSurname(),
"AUTODEPOSIT" => "1",
"PAYMENTTYPE" => "ALL",
"RETURNLINK" => st_url_for('@homepage', true),
);
$hash_params = array_values($params);
$hash_params[] = $this->getEcardPassword();
$params["HASH"] = md5(implode('', $hash_params));
$params["HASHALGORITHM"] = "MD5";
$params["COUNTRY"] = "616";
$params["LANGUAGE"] = stPaymentType::getLanguage(array('PL', 'EN', 'DE', 'FR', 'RU', 'CZ', 'IT', 'ES'));
$params["CHARSET"] = "UTF-8";
$this->params = $params;
}
return $this->params;
}
/**
* Sprawdzenie czy płatność została skonfiguraowana
*
* @return bool
*/
public function checkPaymentConfiguration()
{
if (!$this->hasEcardId()) return false;
if (!$this->hasEcardPassword()) return false;
return true;
}
public static function getServiceTransactionId(Payment $payment)
{
$order = $payment->getOrder();
$c = new Criteria();
$c->addSelectColumn(EcardTransactionPeer::ID);
$c->addDescendingOrderByColumn(EcardTransactionPeer::ID);
$c->add(EcardTransactionPeer::ORDER_ID, $order->getId());
$results = array();
$rs = EcardTransactionPeer::doSelectRS($c);
while($rs->next())
{
$row = $rs->getRow();
$results[] = $row[0];
}
return implode(", ", $results);
}
protected function getTransactionId(Order $order)
{
$transaction = new EcardTransaction();
$config = stConfig::getInstance('stEcardBackend');
if (!$config->get('transaction_fix') && !EcardTransactionPeer::doCount(new Criteria()))
{
$c = new Criteria();
$c->addSelectColumn('MAX('.OrderPeer::ID.')');
$rs = OrderPeer::doSelectRS($c);
$row = $rs->next() ? $rs->getRow() : null;
$transaction->setId($row ? $row[0] + 1 : 1);
$config->set('transaction_fix', true);
$config->save();
}
$transaction->setOrderId($order->getId());
$transaction->save();
return $transaction->getId();
}
}