first commit

This commit is contained in:
2024-11-05 12:22:50 +01:00
commit e5682a3912
19641 changed files with 2948548 additions and 0 deletions

View File

@@ -0,0 +1,358 @@
<?php
/*
* 2005-2016 PayLane sp. z.o.o.
*
* NOTICE OF LICENSE
*
* This source file is subject to the Academic Free License (AFL 3.0)
* that is bundled with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://opensource.org/licenses/afl-3.0.php
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@Paylane.pl so we can send you a copy immediately.
*
* DISCLAIMER
*
* Do not edit or add to this file if you wish to upgrade PayLane to newer
* versions in the future. If you wish to customize PayLane for your
* needs please refer to http://www.Paylane.pl for more information.
*
* @author PayLane <info@paylane.pl>
* @copyright 2005-2019 PayLane sp. z.o.o.
* @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
* International Registered Trademark & Property of PayLane sp. z.o.o.
*/
require_once(dirname(__FILE__).'/../../core/core.php');
require_once(dirname(__FILE__).'/paymentStatus.php');
require_once(_PS_MODULE_DIR_ . 'paylane/paylane.php');
class PaylaneValidationModuleFrontController extends ModuleFrontController
{
protected $orderConfirmationUrl = 'index.php?controller=order-confirmation';
public function isOldPresta()
{
return version_compare(_PS_VERSION_, '1.7', '<');
}
public function postProcess()
{
if ($this->isOldPresta()) {
$this->postProcess16();
return;
}
$cartId = (int)Tools::getValue('cart_id');
PrestaShopLogger::addLog('process return url', 1, null, 'Cart', $cartId, true);
$orderId = Order::getOrderByCartId($cartId);
PrestaShopLogger::addLog('order id:', 1, null, 'Order', $orderId, true);
$payment = Tools::getValue('payment');
$paymentParams = null;
if (isset($payment) && isset($payment['additional_information'])) {
$paymentParams = $payment['additional_information'];
}
if (isset($paymentParams['type'])) {
require_once(_PS_MODULE_DIR_ . 'paylane/class/' . $paymentParams['type'] . '.php');
$paylane = new Paylane();
$handler = new $paymentParams['type']($paylane);
try {
$responseStatus = $this->getResponseStatus();
$result = $handler->handlePayment($paymentParams);
if ($result['success']) {
$responseStatus['transaction_id'] = $result['id_sale'];
if (isset($result['order_status'])) {
$orderStatus = $result['order_status'];
} else {
$orderStatus = 'CLEARED';
}
$responseStatus['paylane_status'] = $orderStatus;
$responseStatus['status'] = PaylanePaymentCore::paymentStatus($responseStatus['paylane_status']);
} else {
$errorStatus = PaylanePaymentCore::getErrorMessage(
array('error_text' => $result['error']['error_description'])
);
$this->redirectError($errorStatus);
}
} catch (Exception $e) {
$errorStatus = PaylanePaymentCore::getErrorMessage(array('error_text' => $e->getMessage()));
$this->redirectError($errorStatus);
}
} else {
$responseStatus = $this->getResponseStatus();
}
PrestaShopLogger::addLog('Paylane - return url order ID:'. $orderId, 1, null, 'Cart', $cartId, true);
$this->checkPaymentStatus($cartId, $responseStatus); //LK
if ($orderId) {
PrestaShopLogger::addLog('validate order', 1, null, 'Cart', $cartId, true);
$this->validateOrder($cartId, $responseStatus['transaction_id']);
} else {
PrestaShopLogger::addLog('prestashop order not found', 1, null, 'Cart', $cartId, true);
//$this->checkPaymentStatus($cartId, $responseStatus); //LK
}
}
protected function getResponseStatus() {
$responseStatus = array();
$responseStatus['paylane_status'] = Tools::getValue('status');
$responseStatus['status'] = PaylanePaymentCore::paymentStatus($responseStatus['paylane_status']);
$responseStatus['amount'] = Tools::getValue('amount');
$responseStatus['currency'] = Tools::getValue('currency');
$responseStatus['description'] = Tools::getValue('description');
$responseStatus['hash'] = Tools::getValue('hash');
$responseStatus['transaction_id'] = Tools::getValue('id_sale');
$responseStatus['payment_method'] = (Tools::getValue('payment_method')) ? Tools::getValue('payment_method') : Tools::getValue('payment_type');
$responseStatus['error_code'] = Tools::getValue('error_code');
$responseStatus['error_text'] = Tools::getValue('error_text');
return $responseStatus;
}
protected function validateOrder($cartId, $transactionId)
{
$order = $this->module->getOrderByTransactionId($transactionId);
PrestaShopLogger::addLog('transaction log order : '.print_r($order, true), 1, null, 'Cart', $cartId, true);
if (empty($order) || empty($order['order_status'])) {
PrestaShopLogger::addLog('Paylane - status url late', 1, null, 'Cart', $cartId, true);
$this->checkPaymentStatus($cartId, $transactionId);
} elseif ($order['order_status'] == $this->module->failedStatus) {
$paymentResponse = unserialize($order['payment_response']);
$errorStatus = PaylanePaymentCore::getErrorMessage($paymentResponse);
$this->redirectError($errorStatus);
} else {
if ($this->context->cart->OrderExists() == false) {
$responseStatus = $this->getResponseStatus();
PrestaShopLogger::addLog('Paylane - check order from return url', 1, null, 'Cart', $cartId, true);
$this->checkPaymentStatus($cartId, $responseStatus);
} else {
PrestaShopLogger::addLog(
'Paylane - redirect success validate return url',
1,
null,
'Cart',
$cartId,
true
);
$this->redirectSuccess($cartId);
}
}
}
protected function checkPaymentStatus($cartId, $responseStatus)
{
$cart = $this->context->cart;
$fieldParams = array();
PrestaShopLogger::addLog('Paylane - check Payment Status', 1, null, 'Cart', $cartId, true);
PrestaShopLogger::addLog(
'Paylane - check payment status:'. print_r($responseStatus, true),
1,
null,
'Cart',
$cartId,
true
);
if (isset($responseStatus) && $responseStatus['status'] !== '-2') {
$PaymentStatus = new PaylanePaymentStatusModuleFrontController();
$isTransactionLogValid = $PaymentStatus->isTransactionLogValid($responseStatus['transaction_id']);
if (!$isTransactionLogValid) {
$orderTotal = $responseStatus['amount'];
$transactionLog = $PaymentStatus->setTransactionLog($orderTotal, $responseStatus);
PrestaShopLogger::addLog('Paylane - transactionLog: '. print_r($transactionLog, true), 1, null, 'Cart', $cartId, true);
$generatedMd5Sig = $this->module->generateMd5sig($responseStatus);
$isPaymentSignatureEqualsGeneratedSignature =
$this->module->isPaymentSignatureEqualsGeneratedSignature(
$responseStatus['hash'],
$generatedMd5Sig
);
$generatedAntiFraudHash = $this->module->generateAntiFraudHash(
$cartId,
$responseStatus['payment_method'],
$cart->date_add
);
$isFraud = $this->module->isFraud($generatedAntiFraudHash, Tools::getValue('secure_method'));
$additionalInformation =
$PaymentStatus->getAdditionalInformation(
$responseStatus,
$isPaymentSignatureEqualsGeneratedSignature,
$isFraud
);
PrestaShopLogger::addLog(
'Paylane - save transaction log from return URL',
1,
null,
'Cart',
$cartId,
true
);
$PaymentStatus->saveTransactionLog($transactionLog, 0, $additionalInformation);
$PaymentStatus->validatePayment($cartId, $responseStatus, $responseStatus['status']);
}
$this->redirectSuccess($cartId);
} elseif (isset($responseStatus) && $responseStatus['status'] == '-2') {
$PaymentStatus = new PaylanePaymentStatusModuleFrontController();
$currency = $this->context->currency;
$customer = new Customer($cart->id_customer);
$this->module->validateOrder(
(int)$cart->id,
$PaymentStatus->getPaymentStatus($responseStatus),
$amount = sprintf('%01.2f', $cart->getOrderTotal()),
$this->getPaymentName($responseStatus['payment_method']),
null,
array(),
(int)$currency->id,
false,
$customer->secure_key
);
$errorStatus = PaylanePaymentCore::getErrorMessage($responseStatus);
$this->redirectError($errorStatus);
} else {
$this->redirectPaymentReturn();
}
}
protected function getPaymentName($paymentType)
{
$paymentMethod = PaylanePaymentCore::getPaymentMethodByPaymentType($paymentType);
if ($this->module->l('PAYLANE_FRONTEND_PM_'.$paymentType) == 'PAYLANE_FRONTEND_PM_'.$paymentType) {
$paymentName = $paymentMethod['name'];
} else {
$paymentName = $this->module->l('PAYLANE_FRONTEND_PM_'.$paymentType);
}
$isPaylane = strpos($paymentName, 'Paylane');
if ($isPaylane === false) {
$paymentName = 'Paylane '.$paymentName;
}
return $paymentName;
}
protected function redirectError($returnMessage)
{
$this->errors[] = $returnMessage;
$this->redirectWithNotifications($this->context->link->getPageLink('order', true, null, array(
'step' => '3')));
}
protected function redirectPaymentReturn()
{
$url = $this->context->link->getModuleLink('paylane', 'paymentReturn', array(
'secure_key' => $this->context->customer->secure_key), true);
PrestaShopLogger::addLog('rediret to payment return : '.$url, 1, null, 'Cart', $this->context->cart->id, true);
Tools::redirect($url);
exit;
}
protected function redirectSuccess($cartId)
{
Tools::redirect(
$this->orderConfirmationUrl.
'&id_cart='.$cartId.
'&id_module='.(int)$this->module->id.
'&key='.$this->context->customer->secure_key
);
}
public function postProcess16()
{
if (method_exists('Tools', 'getAllValues')) {
$params = Tools::getAllValues();
} else {
$params = $_POST + $_GET;
}
if (isset($params['payment']) && isset($params['payment']['additional_information'])) {
$paymentParams = $params['payment']['additional_information'];
} else {
$paymentParams = null;
}
$idSale = null;
$orderStatus = Configuration::get('PAYLANE_PAYMENT_STATUS_FAILED');
$displayName = $this->module->displayName;
if (isset($params['payment_type'])) {
require_once(_PS_MODULE_DIR_ . 'paylane/class/' . $params['payment_type'] . '.php');
$paylane = Module::getInstanceByName('paylane');
$handler = new $params['payment_type']($paylane);
$result = $handler->handlePayment($paymentParams);
if ($result['success']) {
$idSale = $result['id_sale'];
if (isset($result['order_status'])) {
$orderStatus = $result['order_status'];
} else {
$orderStatus = Configuration::get('PS_OS_PAYMENT');
}
}
$paymentLabelPath = 'paylane_' . Tools::strtolower($params['payment_type']) . '_label';
$displayName .= ' | ' . Configuration::get($paymentLabelPath);
}
$cart = $this->context->cart;
if (!$this->module->checkCurrency($cart)) {
Tools::redirect('index.php?controller=order');
}
$customer = new Customer($cart->id_customer);
$currency = $this->context->currency;
$amount = sprintf('%01.2f', $cart->getOrderTotal());
$extraVars = null;
if (!is_null($idSale)) {
$extraVars = array(
'transaction_id' => $idSale
);
}
if (!Validate::isLoadedObject($customer)) {
Tools::redirect('index.php?controller=order&step=1');
}
$this->module->validateOrder(
(int)$cart->id,
$orderStatus,
$amount,
$displayName,
null,
$extraVars,
(int)$currency->id,
false,
$customer->secure_key
);
$redirectUrl = 'index.php?controller=order-confirmation&id_cart=';
$redirectUrl .= (int)$cart->id.'&id_module='.(int)$this->module->id;
$redirectUrl .= '&id_order='.$this->module->currentOrder.'&key='.$customer->secure_key;
Tools::redirect($redirectUrl);
}
}