Files
kalsport.pl/modules/paylane/core/core.php
2024-11-05 12:22:50 +01:00

746 lines
21 KiB
PHP

<?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.
*/
class PaylanePaymentCore
{
protected static $paylaneSecureFormUrl = 'https://secure.paylane.com/order/cart.html';
protected static $paylaneApiUrl = '';
private $paylane;
public function __construct(Module $paylane) {
$this->paylane = $paylane;
}
public static $allowedCountries = array(
'ALA','ALB','DZA','ASM','AND','AGO','AIA','ATA','ATG','ARG','ARM','ABW','AUS','AUT','AZE','BHS','BHR','BGD',
'BRB','BLR','BEL','BLZ','BEN','BMU','BTN','BOL','BIH','BWA','BVT','BRA','BRN','BGR','BFA','BDI','KHM','CMR',
'CAN','CPV','CYM','CAF','TCD','CHL','CHN','CXR','CCK','COL','COM','COG','COD','COK','CRI','CIV','HRV','CYP',
'CZE','DNK','DJI','DMA','DOM','ECU','EGY','SLV','GNQ','ERI','EST','ETH','FLK','FRO','FJI','FIN','FRA','GUF',
'PYF','ATF','GAB','GMB','GEO','DEU','GHA','GIB','GRC','GRL','GRD','GLP','GUM','GTM','GGY','HTI','HMD','VAT',
'GIN','GNB','GUY','HND','HKG','HUN','ISL','IND','IDN','IRL','IMN','ISR','ITA','JAM','JPN','JEY','JOR','KAZ',
'KEN','KIR','KOR','KWT','LAO','LVA','LBN','LSO','LBR','LIE','LTU','LUX','MAC','MKD','MDG','MWI','MYS','MDV',
'MLI','MLT','MHL','MTQ','MRT','MUS','MYT','MEX','FSM','MDA','MCO','MNG','MNE','MSR','MAR','MOZ','MMR','NAM',
'NPL','NLD','ANT','NCL','NZL','NIC','NER','NGA','NIU','NFK','MNP','NOR','OMN','PAK','PLW','PSE','PAN','PNG',
'PRY','PER','PHL','PCN','POL','PRT','PRI','QAT','REU','ROU','RUS','RWA','SHN','KNA','LCA','MAF','SPM','VCT',
'WSM','SMR','STP','SAU','SEN','SRB','SYC','SLE','SGP','SVK','SVN','SLB','SOM','ZAF','SGS','ESP','LKA','SUR',
'SJM','SWZ','SWE','CHE','TWN','TJK','TZA','THA','TLS','TGO','TKL','TON','TTO','TUN','TUR','TKM','TCA','TUV',
'UGA','UKR','ARE','GBR','USA','UMI','URY','UZB','VUT','VEN','VNM','VGB','VIR','WLF','ESH','YEM','ZMB','ZWE'
);
public static $unallowedCountries = array(
// 'AFG','CUB','ERI','IRN','IRQ','JPN','KGZ','LBY','PRK','SDN','SSD','SYR'
);
public static $paymentMethods = array (
'SECUREFORM' => array(
'name' => 'Paylane SecureForm',
'allowedCountries' => 'ALL'
),
'CREDITCARD' => array(
'name' => 'Paylane CreditCard',
'allowedCountries' => 'ALL'
),
'BANKTRANSFER' => array(
'name' => 'Paylane BankTransfer',
'allowedCountries' => 'ALL'
),
'PAYPAL' => array(
'name' => 'Paylane PayPal',
'allowedCountries' => 'ALL'
),
'BLIK' => array(
'name' => 'Paylane BLIK',
'allowedCountries' => 'ALL',
),
// 'DIRECTDEBIT' => array(
// 'name' => 'Paylane DirectDebit',
// 'allowedCountries' => 'ALL'
// ),
// 'SOFORT' => array(
// 'name' => 'Paylane Sofort',
// 'allowedCountries' => 'ALL'
// ),
// 'IDEAL' => array(
// 'name' => 'Paylane Ideal',
// 'allowedCountries' => 'ALL'
// ),
// 'APPLEPAY' => array(
// 'name' => 'Paylane ApplePay',
// 'allowedCountries' => 'ALL'
// ),
// 'GOOGLEPAY' => array(
// 'name' => 'Paylane GooglePay',
// 'allowedCountries' => 'ALL'
// ),
);
public static function getPaymentMethods()
{
return self::$paymentMethods;
}
public static function getPaymentMethodByPaymentType($paymentType)
{
return self::$paymentMethods[$paymentType];
}
public static function getPaylaneRedirectSecureFormUrl()
{
$paylaneRedirectUrl = self::$paylaneSecureFormUrl;
return $paylaneRedirectUrl;
}
public static function getPaylaneRedirectUrl()
{
$paylaneRedirectUrl = self::$paylaneApiUrl;
return $paylaneRedirectUrl;
}
public static function paymentStatus($paylaneStatus)
{
$status = array();
$status['PENDING'] = '1';
//$status['PERFORMED'] = '2';
$status['PERFORMED'] = '3';
$status['CLEARED'] = '3';
$status['ERROR'] = '-2';
return isset($status[$paylaneStatus]) ? $status[$paylaneStatus] : $status['ERROR'];
}
public static function getSupportedPaymentsByCountryCode($countryCode)
{
if (Tools::strlen($countryCode) == 2) {
$countryCode = self::getCountryIso3ByIso2($countryCode);
}
$supportedPayments = array();
if (!in_array($countryCode, self::$unallowedCountries)) {
foreach (self::$paymentMethods as $key => $paymentMethod) {
if (isset($paymentMethod['exceptedCountries'])
&& in_array($countryCode, $paymentMethod['exceptedCountries'])
) {
continue;
}
if ($paymentMethod['allowedCountries'] == 'ALL') {
$paymentMethod['allowedCountries'] = self::$allowedCountries;
}
if (in_array($countryCode, $paymentMethod['allowedCountries'])) {
$supportedPayments[] = $key;
}
}
}
return $supportedPayments;
}
public static function getDateTime()
{
$t = microtime(true);
$micro = sprintf("%06d", ($t - floor($t)) * 1000000);
$d = new DateTime(date('Y-m-d H:i:s.'.$micro, $t));
return $d->format("ymdhiu");
}
public static function randomNumber($length)
{
$result = '';
for ($i = 0; $i < $length; $i++) {
$result .= mt_rand(0, 9);
}
return $result;
}
public static function getTrnStatus($code)
{
switch ($code) {
case '3':
$status = 'BACKEND_TT_CLEARED';
break;
case '2':
$status = 'BACKEND_TT_PERFORMED';
break;
case '1':
$status = 'BACKEND_TT_PENDING';
break;
case '-2':
$status = 'BACKEND_TT_FAILED';
break;
}
return $status;
}
public static function getErrorMessage($responseStatus) {
$errorStatus = ('Paylane Error:');
$api_url = 'https://payto.app/api/translate_error/pl/';
if (isset($responseStatus['error_code'])) { //Secureform, BankTransfer
$error_code = $api_url . $responseStatus['error_code'];
$translatedErrorCode = file_get_contents($error_code);
$errorStatus .= ' '. $translatedErrorCode;
}
// if (isset($responseStatus['error_code'])) {
// $errorStatus .= ' '. $responseStatus['error_code'];
// }
if (isset($responseStatus['error_text'])) {
$errorStatus .= ' '. $responseStatus['error_text'];
}
return $errorStatus;
}
public static function getCountryIso3ByIso2($iso2)
{
$iso3 = array(
'AF' => 'AFG',
'AL' => 'ALB',
'DZ' => 'DZA',
'AS' => 'ASM',
'AD' => 'AND',
'AO' => 'AGO',
'AI' => 'AIA',
'AQ' => 'ATA',
'AG' => 'ATG',
'AR' => 'ARG',
'AM' => 'ARM',
'AW' => 'ABW',
'AU' => 'AUS',
'AT' => 'AUT',
'AZ' => 'AZE',
'BS' => 'BHS',
'BH' => 'BHR',
'BD' => 'BGD',
'BB' => 'BRB',
'BY' => 'BLR',
'BE' => 'BEL',
'BZ' => 'BLZ',
'BJ' => 'BEN',
'BM' => 'BMU',
'BT' => 'BTN',
'BO' => 'BOL',
'BA' => 'BIH',
'BW' => 'BWA',
'BV' => 'BVT',
'BR' => 'BRA',
'IO' => 'IOT',
'VG' => 'VGB',
'BN' => 'BRN',
'BG' => 'BGR',
'BF' => 'BFA',
'BI' => 'BDI',
'KH' => 'KHM',
'CM' => 'CMR',
'CA' => 'CAN',
'CV' => 'CPV',
'KY' => 'CYM',
'CF' => 'CAF',
'TD' => 'TCD',
'CL' => 'CHL',
'CN' => 'CHN',
'CX' => 'CXR',
'CC' => 'CCK',
'CO' => 'COL',
'KM' => 'COM',
'CG' => 'COG',
'CD' => 'COD',
'CK' => 'COK',
'CR' => 'CRI',
'HR' => 'HRV',
'CU' => 'CUB',
'CY' => 'CYP',
'CZ' => 'CZE',
'CI' => 'CIV',
'DK' => 'DNK',
'DJ' => 'DJI',
'DM' => 'DMA',
'DO' => 'DOM',
'EC' => 'ECU',
'EG' => 'EGY',
'SV' => 'SLV',
'GQ' => 'GNQ',
'ER' => 'ERI',
'EE' => 'EST',
'ET' => 'ETH',
'FK' => 'FLK',
'FO' => 'FRO',
'FJ' => 'FJI',
'FI' => 'FIN',
'FR' => 'FRA',
'GF' => 'GUF',
'PF' => 'PYF',
'TF' => 'ATF',
'GA' => 'GAB',
'GM' => 'GMB',
'GE' => 'GEO',
'DE' => 'DEU',
'GH' => 'GHA',
'GI' => 'GIB',
'GR' => 'GRC',
'GL' => 'GRL',
'GD' => 'GRD',
'GP' => 'GLD',
'GU' => 'GUM',
'GT' => 'GTM',
'GG' => 'GGY',
'GN' => 'HTI',
'GW' => 'HMD',
'GY' => 'VAT',
'HT' => 'GIN',
'HM' => 'GNB',
'HN' => 'HND',
'HK' => 'HKG',
'HU' => 'HUN',
'IS' => 'ISL',
'IN' => 'IND',
'ID' => 'IDN',
'IR' => 'IRN',
'IQ' => 'IRQ',
'IE' => 'IRL',
'IM' => 'IMN',
'IL' => 'ISR',
'IT' => 'ITA',
'JM' => 'JAM',
'JP' => 'JPN',
'JE' => 'JEY',
'JO' => 'JOR',
'KZ' => 'KAZ',
'KE' => 'KEN',
'KI' => 'KIR',
'KW' => 'KWT',
'KG' => 'KGZ',
'LA' => 'LAO',
'LV' => 'LVA',
'LB' => 'LBN',
'LS' => 'LSO',
'LR' => 'LBR',
'LY' => 'LBY',
'LI' => 'LIE',
'LT' => 'LTU',
'LU' => 'LUX',
'MO' => 'MAC',
'MK' => 'MKD',
'MG' => 'MDG',
'MW' => 'MWI',
'MY' => 'MYS',
'MV' => 'MDV',
'ML' => 'MLI',
'MT' => 'MLT',
'MH' => 'MHL',
'MQ' => 'MTQ',
'MR' => 'MRT',
'MU' => 'MUS',
'YT' => 'MYT',
'MX' => 'MEX',
'FM' => 'FSM',
'MD' => 'MDA',
'MC' => 'MCO',
'MN' => 'MNG',
'ME' => 'MNE',
'MS' => 'MSR',
'MA' => 'MAR',
'MZ' => 'MOZ',
'MM' => 'MMR',
'NA' => 'NAM',
'NR' => 'NRU',
'NP' => 'NPL',
'NL' => 'NLD',
'AN' => 'ANT',
'NC' => 'NCL',
'NZ' => 'NZL',
'NI' => 'NIC',
'NE' => 'NER',
'NG' => 'NGA',
'NU' => 'NIU',
'NF' => 'NFK',
'KP' => 'PRK',
'MP' => 'MNP',
'NO' => 'NOR',
'OM' => 'OMN',
'PK' => 'PAK',
'PW' => 'PLW',
'PS' => 'PSE',
'PA' => 'PAN',
'PG' => 'PNG',
'PY' => 'PRY',
'PE' => 'PER',
'PH' => 'PHL',
'PN' => 'PCN',
'PL' => 'POL',
'PT' => 'PRT',
'PR' => 'PRI',
'QA' => 'QAT',
'RO' => 'ROU',
'RU' => 'RUS',
'RW' => 'RWA',
'RE' => 'REU',
'BL' => 'BLM',
'SH' => 'SHN',
'KN' => 'KNA',
'LC' => 'LCA',
'MF' => 'MAF',
'PM' => 'SPM',
'WS' => 'WSM',
'SM' => 'SMR',
'SA' => 'SAU',
'SN' => 'SEN',
'RS' => 'SRB',
'SC' => 'SYC',
'SL' => 'SLE',
'SG' => 'SGP',
'SK' => 'SVK',
'SI' => 'SVN',
'SB' => 'SLB',
'SO' => 'SOM',
'ZA' => 'ZAF',
'GS' => 'SGS',
'KR' => 'KOR',
'ES' => 'ESP',
'LK' => 'LKA',
'VC' => 'VCT',
'SD' => 'SDN',
'SR' => 'SUR',
'SJ' => 'SJM',
'SZ' => 'SWZ',
'SE' => 'SWE',
'CH' => 'CHE',
'SY' => 'SYR',
'ST' => 'STP',
'TW' => 'TWN',
'TJ' => 'TJK',
'TZ' => 'TZA',
'TH' => 'THA',
'TL' => 'TLS',
'TG' => 'TGO',
'TK' => 'TKL',
'TO' => 'TON',
'TT' => 'TTO',
'TN' => 'TUN',
'TR' => 'TUR',
'TM' => 'TKM',
'TC' => 'TCA',
'TV' => 'TUV',
'UM' => 'UMI',
'VI' => 'VIR',
'UG' => 'UGA',
'UA' => 'UKR',
'AE' => 'ARE',
'GB' => 'GBR',
'US' => 'USA',
'UY' => 'URY',
'UZ' => 'UZB',
'VU' => 'VUT',
'VA' => 'GUY',
'VE' => 'VEN',
'VN' => 'VNM',
'WF' => 'WLF',
'EH' => 'ESH',
'YE' => 'YEM',
'ZM' => 'ZMB',
'ZW' => 'ZWE',
'AX' => 'ALA'
);
if ($iso2) {
return array_key_exists($iso2, $iso3) ? $iso3[$iso2] : '';
} else {
return '';
}
}
public static function getCountryIso2ByIso3($iso3)
{
$iso2 = array(
'AFG' => 'AF',
'ALB' => 'AL',
'DZA' => 'DZ',
'ASM' => 'AS',
'AND' => 'AD',
'AGO' => 'AO',
'AIA' => 'AI',
'ATA' => 'AQ',
'ATG' => 'AG',
'ARG' => 'AR',
'ARM' => 'AM',
'ABW' => 'AW',
'AUS' => 'AU',
'AUT' => 'AT',
'AZE' => 'AZ',
'BHS' => 'BS',
'BHR' => 'BH',
'BGD' => 'BD',
'BRB' => 'BB',
'BLR' => 'BY',
'BEL' => 'BE',
'BLZ' => 'BZ',
'BEN' => 'BJ',
'BMU' => 'BM',
'BTN' => 'BT',
'BOL' => 'BO',
'BIH' => 'BA',
'BWA' => 'BW',
'BVT' => 'BV',
'BRA' => 'BR',
'IOT' => 'IO',
'VGB' => 'VG',
'BRN' => 'BN',
'BGR' => 'BG',
'BFA' => 'BF',
'BDI' => 'BI',
'KHM' => 'KH',
'CMR' => 'CM',
'CAN' => 'CA',
'CPV' => 'CV',
'CYM' => 'KY',
'CAF' => 'CF',
'TCD' => 'TD',
'CHL' => 'CL',
'CHN' => 'CN',
'CXR' => 'CX',
'CCK' => 'CC',
'COL' => 'CO',
'COM' => 'KM',
'COG' => 'CG',
'COD' => 'CD',
'COK' => 'CK',
'CRI' => 'CR',
'HRV' => 'HR',
'CUB' => 'CU',
'CYP' => 'CY',
'CZE' => 'CZ',
'CIV' => 'CI',
'DNK' => 'DK',
'DJI' => 'DJ',
'DMA' => 'DM',
'DOM' => 'DO',
'ECU' => 'EC',
'EGY' => 'EG',
'SLV' => 'SV',
'GNQ' => 'GQ',
'ERI' => 'ER',
'EST' => 'EE',
'ETH' => 'ET',
'FLK' => 'FK',
'FRO' => 'FO',
'FJI' => 'FJ',
'FIN' => 'FI',
'FRA' => 'FR',
'GUF' => 'GF',
'PYF' => 'PF',
'ATF' => 'TF',
'GAB' => 'GA',
'GMB' => 'GM',
'GEO' => 'GE',
'DEU' => 'DE',
'GHA' => 'GH',
'GIB' => 'GI',
'GRC' => 'GR',
'GRL' => 'GL',
'GRD' => 'GD',
'GLD' => 'GP',
'GUM' => 'GU',
'GTM' => 'GT',
'GGY' => 'GG',
'HTI' => 'GN',
'HMD' => 'GW',
'VAT' => 'GY',
'GIN' => 'HT',
'GNB' => 'HM',
'HND' => 'HN',
'HKG' => 'HK',
'HUN' => 'HU',
'ISL' => 'IS',
'IND' => 'IN',
'IDN' => 'ID',
'IRN' => 'IR',
'IRQ' => 'IQ',
'IRL' => 'IE',
'IMN' => 'IM',
'ISR' => 'IL',
'ITA' => 'IT',
'JAM' => 'JM',
'JPN' => 'JP',
'JEY' => 'JE',
'JOR' => 'JO',
'KAZ' => 'KZ',
'KEN' => 'KE',
'KIR' => 'KI',
'KWT' => 'KW',
'KGZ' => 'KG',
'LAO' => 'LA',
'LVA' => 'LV',
'LBN' => 'LB',
'LSO' => 'LS',
'LBR' => 'LR',
'LBY' => 'LY',
'LIE' => 'LI',
'LTU' => 'LT',
'LUX' => 'LU',
'MAC' => 'MO',
'MKD' => 'MK',
'MDG' => 'MG',
'MWI' => 'MW',
'MYS' => 'MY',
'MDV' => 'MV',
'MLI' => 'ML',
'MLT' => 'MT',
'MHL' => 'MH',
'MTQ' => 'MQ',
'MRT' => 'MR',
'MUS' => 'MU',
'MYT' => 'YT',
'MEX' => 'MX',
'FSM' => 'FM',
'MDA' => 'MD',
'MCO' => 'MC',
'MNG' => 'MN',
'MNE' => 'ME',
'MSR' => 'MS',
'MAR' => 'MA',
'MOZ' => 'MZ',
'MMR' => 'MM',
'NAM' => 'NA',
'NRU' => 'NR',
'NPL' => 'NP',
'NLD' => 'NL',
'ANT' => 'AN',
'NCL' => 'NC',
'NZL' => 'NZ',
'NIC' => 'NI',
'NER' => 'NE',
'NGA' => 'NG',
'NIU' => 'NU',
'NFK' => 'NF',
'PRK' => 'KP',
'MNP' => 'MP',
'NOR' => 'NO',
'OMN' => 'OM',
'PAK' => 'PK',
'PLW' => 'PW',
'PSE' => 'PS',
'PAN' => 'PA',
'PNG' => 'PG',
'PRY' => 'PY',
'PER' => 'PE',
'PHL' => 'PH',
'PCN' => 'PN',
'POL' => 'PL',
'PRT' => 'PT',
'PRI' => 'PR',
'QAT' => 'QA',
'ROU' => 'RO',
'RUS' => 'RU',
'RWA' => 'RW',
'REU' => 'RE',
'BLM' => 'BL',
'SHN' => 'SH',
'KNA' => 'KN',
'LCA' => 'LC',
'MAF' => 'MF',
'SPM' => 'PM',
'WSM' => 'WS',
'SMR' => 'SM',
'SAU' => 'SA',
'SEN' => 'SN',
'SRB' => 'RS',
'SYC' => 'SC',
'SLE' => 'SL',
'SGP' => 'SG',
'SVK' => 'SK',
'SVN' => 'SI',
'SLB' => 'SB',
'SOM' => 'SO',
'ZAF' => 'ZA',
'SGS' => 'GS',
'KOR' => 'KR',
'ESP' => 'ES',
'LKA' => 'LK',
'VCT' => 'VC',
'SDN' => 'SD',
'SUR' => 'SR',
'SJM' => 'SJ',
'SWZ' => 'SZ',
'SWE' => 'SE',
'CHE' => 'CH',
'SYR' => 'SY',
'STP' => 'ST',
'TWN' => 'TW',
'TJK' => 'TJ',
'TZA' => 'TZ',
'THA' => 'TH',
'TLS' => 'TL',
'TGO' => 'TG',
'TKL' => 'TK',
'TON' => 'TO',
'TTO' => 'TT',
'TUN' => 'TN',
'TUR' => 'TR',
'TKM' => 'TM',
'TCA' => 'TC',
'TUV' => 'TV',
'UMI' => 'UM',
'VIR' => 'VI',
'UGA' => 'UG',
'UKR' => 'UA',
'ARE' => 'AE',
'GBR' => 'GB',
'USA' => 'US',
'URY' => 'UY',
'UZB' => 'UZ',
'VUT' => 'VU',
'GUY' => 'VA',
'VEN' => 'VE',
'VNM' => 'VN',
'WLF' => 'WF',
'ESH' => 'EH',
'YEM' => 'YE',
'ZMB' => 'ZM',
'ZWE' => 'ZW',
'ALA' => 'AX'
);
if ($iso3) {
return array_key_exists($iso3, $iso2) ? $iso2[$iso3] : '';
} else {
return '';
}
}
public static function generateHash($m_t_id, $amount, $cur_code, $trans_type)
{
return SHA1(
Configuration::get('PAYLANE_GENERAL_HASH') . "|" .
$m_t_id . "|" .
$amount . "|" .
$cur_code . "|" .
$trans_type
);
}
}