Files
drmaterac.pl/modules/przelewy24/controllers/front/paymentStatus.php
2025-01-06 20:47:25 +01:00

151 lines
6.0 KiB
PHP

<?php
/**
* Class przelewy24paymentStatusModuleFrontController
*
* @author Przelewy24
* @copyright Przelewy24
* @license https://www.gnu.org/licenses/gpl.html
*
*/
/**
* Class Przelewy24paymentStatusModuleFrontController
*/
class Przelewy24paymentStatusModuleFrontController extends ModuleFrontController
{
/**
* Process change of payment status.
*
* @throws PrestaShopDatabaseException
* @throws PrestaShopException
*/
public function postProcess()
{
try {
$this->postProcessInternal();
} catch (Przelewy24HttpException $ex) {
header('HTTP/1.1 ' . $ex->getCode() . ' ' . $ex->getMessage());
header('Content-Type: text/plain');
echo $ex->getCode(), ' ', $ex->getMessage();
}
exit;
}
/**
* Internal code to process change of payment status.
*
* @throws Przelewy24HttpException
* @throws PrestaShopDatabaseException
* @throws PrestaShopException
*/
private function postProcessInternal()
{
$logMessage = 'postProcess ' . var_export($_POST, true);
if (Tools::strlen($logMessage) >= Przelewy24Logger::LOG_MESSAGE_LIMIT) {
throw new Przelewy24HttpException('Payload Too Large', 413);
}
PrestaShopLogger::addLog($logMessage, 1);
if (Tools::getValue('p24_session_id')) {
PrestaShopLogger::addLog('przelewy24paymentStatusModuleFrontController', 1);
list($cartId) = explode('|', Tools::getValue('p24_session_id'), 1);
$cartId = (int)$cartId;
$cart = new Cart($cartId);
if (empty($cart) || !isset($cart->id) || $cartId < 1) {
throw new Przelewy24HttpException('Not Found', 404);
}
Context::getContext()->currency = Currency::getCurrencyInstance((int)$cart->id_currency);
$orderId = Order::getIdByCartId($cart->id);
$total = (float)$cart->getOrderTotal(true, Cart::BOTH);
$idOrderState = (int)Configuration::get('P24_ORDER_STATE_1');
$customer = new Customer($cart->id_customer);
$currency = new Currency($cart->id_currency);
$addExtracharge = 0;
if (!$orderId) {
$this->module->validateOrder(
(int)$cart->id,
$idOrderState,
$total,
$this->module->displayName,
null,
array(),
(int)$currency->id,
false,
$customer->secure_key
);
$addExtracharge = 1;
$orderId = Order::getIdByCartId($cart->id);
}
if (1 === $addExtracharge) {
$servicePaymentOptions = new Przelewy24ServicePaymentOptions(new Przelewy24());
$servicePaymentOptions->setExtrachargeByOrderId($orderId);
}
$order = new Order($orderId);
$amount = Przelewy24Helper::p24AmountFormat($order->total_paid);
$currency = new Currency($order->id_currency);
$suffix = Przelewy24Helper::getSuffix($currency->iso_code);
$validation = array('p24_amount' => $amount, 'p24_currency' => $currency->iso_code);
$P24C = Przelewy24ClassInterfaceFactory::getForSuffix($suffix);
$trnVerify = $P24C->trnVerifyEx($validation);
PrestaShopLogger::addLog('postProcess trnVerify' . var_export($trnVerify, true), 1);
if (true === $trnVerify) {
$order->setCurrentState((int)Configuration::get('P24_ORDER_STATE_2'));
Przelewy24Order::saveOrder(
Tools::getValue('p24_order_id'),
$order->id,
Tools::getValue('p24_session_id')
);
if (Przelewy24OneClickHelper::isOneClickEnable($suffix)
&& in_array((int)Tools::getValue('p24_method'), Przelewy24OneClickHelper::getCardPaymentIds())
) {
if (Przelewy24CustomerSetting::initialize($order->id_customer)->card_remember) {
$p24Soap = Przelewy24SoapInterfaceFactory::getForSuffix($suffix);
$p24OrderId = (int)Tools::getValue('p24_order_id');
if (Configuration::get('P24_ONECLICK_ENABLE' . $suffix)) {
$res = $p24Soap->getCardReferenceOneClickWithCheckCard(
Configuration::get('P24_API_KEY' . $suffix),
$p24OrderId
);
if (!empty($res)) {
$expires = Tools::substr($res->cardExp, 2, 2) . Tools::substr($res->cardExp, 0, 2);
if (date('ym') <= $expires) {
Przelewy24Recurring::remember(
$order->id_customer,
$res->refId,
$expires,
$res->mask,
$res->cardType
);
} else {
PrestaShopLogger::addLog(
'Error: expiration date ' . var_export(
$expires,
true
),
1
);
}
}
}
} else {
PrestaShopLogger::addLog('Nie pamiętaj karty dla userID: ' . $order->id_customer, 1);
}
}
} else {
$order->setCurrentState((int)Configuration::get('PS_OS_ERROR'));
}
}
}
}