Files
torebki-fabiola.pl/wp-content/plugins/woocommerce-transferujpl-payment-gateway/includes/TpayGatewayBase.php
2026-03-05 13:07:40 +01:00

314 lines
10 KiB
PHP

<?php
use tpay\TException;
use tpay\Util;
require_once 'lib/src/_class_tpay/Validate.php';
require_once 'lib/src/_class_tpay/Util.php';
require_once 'lib/src/_class_tpay/Exception.php';
require_once 'lib/src/_class_tpay/PaymentBasic.php';
require_once 'lib/src/_class_tpay/PaymentCard.php';
require_once 'lib/src/_class_tpay/CardApi.php';
require_once 'lib/src/_class_tpay/Curl.php';
require_once 'lib/src/_class_tpay/TransactionApi.php';
require_once 'lib/src/_class_tpay/Lang.php';
abstract class TpayGatewayBase extends WC_Payment_Gateway
{
const REGULATIONS = 'regulations';
const BLIKCODE = 'blik_code';
const ORDER_ID = 'orderId';
const GROUP = 'group';
const RESULT = 'result';
const REDIRECT = 'redirect';
const SUCCESS = 'success';
const TR_CRC = 'tr_crc';
const TR_ERROR = 'tr_error';
const KWOTA_DOPLATY = 'kwota_doplaty';
const BANK_LIST = 'bank_list';
const DOPLATA = 'doplata';
const WOOCOMMERCE = 'woocommerce';
const HTTP = 'http://';
const HTTPS = 'https://';
const HTTP_X_FORWARDED_PROTO = 'HTTP_X_FORWARDED_PROTO';
const TPAY_LOGO_URL = 'https://tpay.com/img/banners/logo-tpay-50x25.svg';
const TPAY_REGULATIONS_URL = 'https://secure.tpay.com/regulamin.pdf';
const TPAY_REGULATIONS_URL_EN = 'https://tpay.com/user/assets/files_for_download/terms-and-conditions-of-payments.pdf';
const TPAY_PRIVACY_POLICY_URL = 'https://secure.tpay.com/partner/pliki/klauzula-informacyjna-platnik-umowa.pdf';
const TPAY_PRIVACY_POLICY_URL_EN = 'https://secure.tpay.com/partner/pliki/terms-and-conditions-of-payments.pdf';
const GATEWAY_ID = '';
protected $language = 'pl_PL';
protected $pluginUrl;
protected $trId;
protected $siteDomain;
protected $tableName;
protected $authTableName;
protected $surchargeSetting = 0;
protected $notifyLink;
protected $autoFinishOrder;
protected $orderPendingStatus;
protected $transactionDescription;
protected $surchargeAmount;
protected $validateProxyServer;
protected $shippingMethods = array();
public function __construct()
{
global $wpdb;
$this->has_fields = true;
$this->language = get_locale();
$this->tableName = $wpdb->prefix . "woocommerce_tpay";
$this->authTableName = $wpdb->prefix . "woocommerce_tpay_clients";
$this->icon = apply_filters('woocommerce_transferuj_icon', static::TPAY_LOGO_URL);
if ($this->surchargeSetting !== 0) {
add_action('woocommerce_cart_calculate_fees', array($this, 'addFeeTpay'), 99);
add_action('woocommerce_review_order_after_submit', array($this, 'basketReload'));
}
}
/**
* Generates box with gateway name and description, terms acceptance checkbox and channel list
*/
public function payment_fields()
{
wp_enqueue_style('tpay_woocommerce_sytle', $this->pluginUrl . '/lib/src/common/_css/style.css', array(), 21);
}
public function addFeeTpay()
{
if (WC()->session->get('chosen_payment_method') === static::GATEWAY_ID) {
$cart = WC()->cart;
switch ($this->surchargeSetting) {
case 1:
$cart->add_fee(
__('Opłata za płatność online', static::WOOCOMMERCE),
$this->surchargeAmount,
true,
'standard'
);
break;
case 2:
if (method_exists($cart, 'get_cart_contents_total') && method_exists($cart, 'get_shipping_total')) {
$amount = $cart->get_cart_contents_total() + $cart->get_shipping_total();
} else {
$amount = $cart->cart_contents_total + $cart->shipping_total;
}
$fee = $amount * $this->surchargeAmount / 100;
$cart->add_fee(
__('Opłata za płatność online', static::WOOCOMMERCE),
$fee,
true,
'standard'
);
break;
default:
break;
}
}
}
protected function setEnvironment()
{
if ((isset($_SERVER[static::HTTP_X_FORWARDED_PROTO]) && $_SERVER[static::HTTP_X_FORWARDED_PROTO] === 'https')
|| (is_ssl())
) {
$this->pluginUrl = str_replace(static::HTTP, static::HTTPS, plugins_url('', __FILE__));
$this->siteDomain = preg_replace('/\?.*/', '', str_replace(static::HTTP, static::HTTPS, home_url('/')));
} else {
$this->pluginUrl = plugins_url('', __FILE__);
$this->siteDomain = preg_replace('/\?.*/', '', str_replace(static::HTTPS, static::HTTP, home_url('/')));
}
}
protected function setLanguageRegulations()
{
if ($this->language === 'pl_PL') {
return static::TPAY_REGULATIONS_URL;
}
return static::TPAY_REGULATIONS_URL_EN;
}
protected function setLanguagePP()
{
if ($this->language === 'pl_PL') {
return static::TPAY_PRIVACY_POLICY_URL;
}
return static::TPAY_PRIVACY_POLICY_URL_EN;
}
protected function getShippingMethods()
{
$canUse = true;
$outdatedSettingsList = array(
'legacy_flat_rate',
'woocommerce_local_pickup_settings',
'woocommerce_flat_rate_settings',
'woocommerce_free_shipping_settings',
'woocommerce_international_delivery_settings',
'woocommerce_local_delivery_settings',
);
foreach ($outdatedSettingsList as $setting) {
$settings = get_option($setting);
if (isset($settings['enabled']) && $settings['enabled'] !== 'no') {
$canUse = false;
}
}
$options = array();
if ($canUse && class_exists('WC_Shipping', false)) {
$Shipping = WC()->shipping();
if (method_exists($Shipping, 'get_shipping_methods')) {
try {
$shippingMethods = $Shipping->get_shipping_methods();
foreach ($shippingMethods as $method) {
if (isset($method->id, $method->method_title)) {
$options[$method->id] = $method->method_title;
}
}
} catch (Exception $e) {
Util::log('Exception in getShippingMethods ', print_r($e, true));
}
return $options;
}
}
return $options;
}
protected function isAvailableForShippingMethod($shippingMethods)
{
if (empty($shippingMethods) || !isset(WC()->session)) {
return true;
}
$chosenShippingMethod = WC()->session->get('chosen_shipping_methods');
$valid = false;
if (is_array($chosenShippingMethod)) {
foreach ($chosenShippingMethod as $methodKey => $methodName) {
$chosenShippingMethod = $methodName;
}
}
foreach ($shippingMethods as $shippingMethod) {
if (is_string($chosenShippingMethod) && strpos($chosenShippingMethod, $shippingMethod) !== false) {
$valid = true;
}
}
return $valid;
}
protected function getBaseTransactionConfigByOrderId($orderId, $secret = '')
{
if (!is_numeric($orderId)) {
$orderId = $this->crypt($orderId, $secret, false);
}
if ($orderId === false) {
throw new TException(sprintf('Invalid order ID %s', $orderId));
}
$order = wc_get_order($orderId);
$orderAddress = $order->get_address();
if (strcmp($this->language, 'pl_PL') === 0) {
$language = 'pl';
} elseif (strcmp($this->language, 'de_DE') === 0) {
$language = 'de';
} else {
$language = 'en';
}
$description = array(
'pl' => __('Zamówienie nr', static::WOOCOMMERCE),
'en' => __('Order no', static::WOOCOMMERCE),
'de' => __('Bestellnr', static::WOOCOMMERCE),
);
return array(
'amount' => $order->get_total(),
'description' => sprintf(
"%s %s %s",
preg_replace('/[^A-ZĄĆĘŁŃÓŚŹŻa-ząćęłńóśźż0-9\-\ ]/ui', '', $this->transactionDescription),
$description[$language],
$order->get_order_number()
),
'language' => $language,
'crc' => $orderId,
'email' => $orderAddress['email'],
'name' => $orderAddress['first_name'] . ' ' . $orderAddress['last_name'],
'address' => $orderAddress['address_1'] . ' ' . $orderAddress['address_2'],
'city' => $orderAddress['city'],
'country' => $orderAddress['country'],
'zip' => $orderAddress['postcode'],
'phone' => str_replace(' ', '', $orderAddress['phone']),
'return_url' => $this->get_return_url($order) . '&utm_nooverride=1',
'return_error_url' => $order->get_checkout_payment_url(),
'result_url' => $this->notifyLink,
'module' => 'WooCommerce ' . $this->wpbo_get_woo_version_number(),
);
}
protected function crypt($string, $secret, $encrypt = true)
{
$iv = substr(md5($secret), 16);
$encrypt_method = "AES-256-CBC";
$key = hash('sha256', $secret);
return $encrypt ? base64_encode(openssl_encrypt($string, $encrypt_method, $key, 0, $iv)) :
openssl_decrypt(base64_decode($string), $encrypt_method, $key, 0, $iv);
}
protected function wpbo_get_woo_version_number()
{
// If get_plugins() isn't available, require it
if (!function_exists('get_plugins')) {
require_once(ABSPATH . 'wp-admin/includes/plugin.php');
}
// Create the plugins folder and file variables
$plugin_folder = get_plugins('/' . 'woocommerce');
$plugin_file = 'woocommerce.php';
if (isset($plugin_folder[$plugin_file]['Version'])) {
return $plugin_folder[$plugin_file]['Version'];
} else {
return null;
}
}
protected function enqueueScript($handle, $src, $deps, $ver = false, $inFooter = false)
{
wp_register_script($handle, $src, $deps, $ver, $inFooter);
wp_enqueue_script($handle, $src, $deps, $inFooter);
}
}