migrate to gtea from bistbucket

This commit is contained in:
2026-03-15 17:08:23 +07:00
commit 129ca2260c
3716 changed files with 566316 additions and 0 deletions

View File

@@ -0,0 +1,194 @@
<?php
namespace Modules\Gateways\Http\Controllers\AdditionalClasses;
use stdClass;
use Symfony\Component\Process\Exception\InvalidArgumentException;
/**
* Payment method liqpay process
*
* @author Liqpay <support@liqpay.ua>
*/
class LiqPay
{
const CURRENCY_EUR = 'EUR';
const CURRENCY_USD = 'USD';
const CURRENCY_UAH = 'UAH';
const CURRENCY_RUB = 'RUB';
const CURRENCY_RUR = 'RUR';
private $_api_url = 'https://www.liqpay.ua/api/';
private $_checkout_url = 'https://www.liqpay.ua/api/3/checkout';
protected $_supportedCurrencies = [
self::CURRENCY_EUR,
self::CURRENCY_USD,
self::CURRENCY_UAH,
self::CURRENCY_RUB,
self::CURRENCY_RUR,
];
private $_public_key;
private $_private_key;
/**
* Constructor.
*
* @param string|null $api_url (optional)
*
* @throws InvalidArgumentException
*/
public function __construct(string $public_key, string $private_key, ?string $api_url = null)
{
if (empty($public_key)) {
throw new InvalidArgumentException('public_key is empty');
}
if (empty($private_key)) {
throw new InvalidArgumentException('private_key is empty');
}
$this->_public_key = $public_key;
$this->_private_key = $private_key;
if ($api_url !== null) {
$this->_api_url = $api_url;
}
}
/**
* Call API
*/
public function api(string $path, array $params = [], int $timeout = 5): stdClass
{
if (! isset($params['version'])) {
throw new InvalidArgumentException('version is null');
}
$url = $this->_api_url.$path;
$public_key = $this->_public_key;
$private_key = $this->_private_key;
$data = $this->encode_params(array_merge(compact('public_key'), $params));
$signature = $this->str_to_sign($private_key.$data.$private_key);
$postfields = http_build_query([
'data' => $data,
'signature' => $signature,
]);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postfields);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$server_output = curl_exec($ch);
$this->_server_response_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
return json_decode($server_output);
}
/**
* cnb_form
*
*
*
* @throws InvalidArgumentException
*/
public function cnb_form(array $params): string
{
$language = 'en';
if (isset($params['language']) && $params['language'] == 'en') {
$language = 'en';
}
$params = $this->cnb_params($params);
$data = $this->encode_params($params);
$signature = $this->cnb_signature($params);
return sprintf(
'
<form method="POST" action="%s" accept-charset="utf-8">
%s
%s
<input type="image" src="//static.liqpay.ua/buttons/p1%s.radius.png" name="btn_text" />
</form>
',
$this->_checkout_url,
sprintf('<input type="hidden" name="%s" value="%s" />', 'data', $data),
sprintf('<input type="hidden" name="%s" value="%s" />', 'signature', $signature),
$language
);
}
/**
* cnb_signature
*/
public function cnb_signature(array $params): string
{
$params = $this->cnb_params($params);
$private_key = $this->_private_key;
$json = $this->encode_params($params);
$signature = $this->str_to_sign($private_key.$json.$private_key);
return $signature;
}
/**
* cnb_params
*
*
* @return array $params
*/
private function cnb_params(array $params): array
{
$params['public_key'] = $this->_public_key;
if (! isset($params['version'])) {
throw new InvalidArgumentException('version is null');
}
if (! isset($params['amount'])) {
throw new InvalidArgumentException('amount is null');
}
if (! isset($params['currency'])) {
throw new InvalidArgumentException('currency is null');
}
if (! in_array($params['currency'], $this->_supportedCurrencies)) {
throw new InvalidArgumentException('currency is not supported');
}
if ($params['currency'] == self::CURRENCY_RUR) {
$params['currency'] = self::CURRENCY_RUB;
}
if (! isset($params['description'])) {
throw new InvalidArgumentException('description is null');
}
return $params;
}
/**
* encode_params
*/
private function encode_params(array $params): string
{
return base64_encode(json_encode($params));
}
/**
* str_to_sign
*/
public function str_to_sign(string $str): string
{
return base64_encode(sha1($str, 1));
}
}

View File

@@ -0,0 +1,68 @@
<?php
namespace Modules\Gateways\Http\Controllers\AdditionalClasses;
use App\Traits\PaymentProcess;
use Modules\Gateways\Models\PaymentRequest;
class Paytabs
{
use PaymentProcess;
private mixed $config_values;
private $payment;
public function __construct()
{
$paymentId = request()->query('payment_id');
$payment = PaymentRequest::where(['id' => $paymentId])->first();
$config = $this->paymentConfig('paytabs', PAYMENT_CONFIG, $payment);
if (! is_null($config) && $config->mode == 'live') {
$this->config_values = json_decode($config->live_values);
} elseif (! is_null($config) && $config->mode == 'test') {
$this->config_values = json_decode($config->test_values);
}
}
public function send_api_request($request_url, $data, $request_method = null)
{
$data['profile_id'] = $this->config_values->profile_id;
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => $this->config_values->base_url.'/'.$request_url,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_CUSTOMREQUEST => isset($request_method) ? $request_method : 'POST',
CURLOPT_POSTFIELDS => json_encode($data, true),
CURLOPT_HTTPHEADER => [
'authorization:'.$this->config_values->server_key,
'Content-Type:application/json',
],
]);
$response = json_decode(curl_exec($curl), true);
curl_close($curl);
return $response;
}
public function is_valid_redirect($post_values): bool
{
$serverKey = $this->config_values->server_key;
$requestSignature = $post_values['signature'];
unset($post_values['signature']);
$fields = array_filter($post_values);
ksort($fields);
$query = http_build_query($fields);
$signature = hash_hmac('sha256', $query, $serverKey);
if (hash_equals($signature, $requestSignature) === true) {
return true;
} else {
return false;
}
}
}