Платежных систем много и появляются новые или старые обновляют API.
Если Вы решите добавить, то это памятка для Вас.
Разберем на примере фрикассы.
Создайте папку с названием платежной системы в src\component\donate ,
В них создайте два файла route.php и pay.php с содержимым
Если подвести итог, Вам нужно просто написать там название своей платежной системы вместо freekassa.
Теперь файл pay.php , где реализация всей логики.
Тут должно быть реализованы в классе freekassa два метода create_link и transfer
Отлично, теперь у Вас всё работает. Пробуйте проверяйте.
Если у Вас какие либо трудности, могу порекомендовать обратиться к тем кто занимается интеграцией с платжеными системами.
Если Вы решите добавить, то это памятка для Вас.
Разберем на примере фрикассы.
Создайте папку с названием платежной системы в src\component\donate ,
В них создайте два файла route.php и pay.php с содержимым
PHP:
<?php
$routes = [
[
//Метод POST/GET
"method" => "POST",
// Адрес
// В разделе донат, пользователь будет выбирать платежную систему, через которую осуществить пожертвование.
// Когда пользователь нажмет "Далее", будет отправлен запрос, для получения ссылки на сайт платежной системы.
// Рекомендую оставить как есть, только заменить freekassa на название платежки.
"pattern" => "/donate/transfer/freekassa/createlink",
// Файл, в которой будет вызвана функция из call
// Название файла, с классом и методом, где реализовано получение ссылки.
"file" => "pay.php",
//Функция, которая обработкает когда прийдет запрос
// В данной функции будет вызван класс freekassa из файла pay.php (что указан выше).
// В классе freekassa будет вызван метод create_link()
// Тут мы просто указали, имя класса и метода для получения ссылки платежки.
// Рекомендую изменить название freekassa, на название платежной системы.
"call" => function() {
(new freekassa())->create_link();
},
],
// Этот роутер для приема информации от платежной системы
[
// Метод получения информации, или GET или POST. Уже зависит от настройки в самой платежной системе.
"method" => "GET",
// Адрес для уведомления от платежной системы, после зачисления доната.
// В данном случае указывайте так ВАШСАЙТ.КОМ/donate/transfer/freekassa
// Рекомендуется заменить freekassa на название вашей платежной системы
"pattern" => "/donate/transfer/freekassa",
// Файл реализации логики класса и метода transfer, где будет идти зачисление Донат Бонусов пользователю в личный кабинет.
"file" => "pay.php",
// Название класса и метода, который будет срабатывать в случае, когда придет уведомление от платежки.
// Рекомендуется заменить freekassa на название вашей платежной системы
"call" => function() {
(new freekassa())->transfer();
},
],
];
Теперь файл pay.php , где реализация всей логики.
Тут должно быть реализованы в классе freekassa два метода create_link и transfer
PHP:
<?php
use Ofey\Logan22\component\alert\board;
use Ofey\Logan22\component\lang\lang;
use Ofey\Logan22\model\donate\donate;
use Ofey\Logan22\model\user\auth\auth;
class freekassa {
//Включена/отключена платежная система
private static bool $enable = true;
public static function isEnable(): bool{
return self::$enable;
}
/**
* Конфигурация
* project_id - ID проекта
* secret1 - секретный ключ №1
* secret2 - секретный ключ №2
*/
private $merchant_id = 12345;
private $secret_key_1 = '#######';
private $secret_key_2 = '#######';
private $currency_default = 'RUB';
/*
* Список IP адресов, от которых может прити уведомление от платежной системы.
*/
private $allowIP = [
'168.119.157.136',
'168.119.60.227',
'138.201.88.124',
'178.154.197.79',
'136.243.38.147',
'136.243.38.149',
'136.243.38.150',
'136.243.38.151',
'136.243.38.189',
'136.243.38.108',
];
/**
* @return void
* Проверка IP адреса
*/
function allowIP(): void {
if(!in_array($_SERVER['REMOTE_ADDR'], $this->allowIP)) {
die("Forbidden: Your IP is not in the list of allowed");
}
}
/**
* @return void
* Генерируем ссылку для перехода на сайт оплаты
*/
function create_link(): void {
// Проверка чтоб пользователь был авторизован, если нет
// отправим ему сообщение -> https://github.com/Cannabytes/SphereWeb/blob/master/src/component/lang/package/ru.php#L303
auth::get_is_auth() ?: board::notice(false, lang::get_phrase(234));
filter_input(INPUT_POST, 'count', FILTER_VALIDATE_INT) ?: board::notice(false, "Введите сумму цифрой");
$donate = include 'src/config/donate.php';
$order_amount = $_POST['count'] * $donate['coefficient']['RUB'];
$merchant_id = $this->merchant_id;
$order_id = auth::get_email();
$secret_word = $this->secret_key_1;
$currency = $this->currency_default;
$sign = md5($merchant_id . ':' . $order_amount . ':' . $secret_word . ':' . $currency . ':' . $order_id);
$params = [
'm' => $merchant_id,
'oa' => (string)$order_amount,
"currency" => $currency,
's' => $sign,
'o' => $order_id,
'us_userid' => auth::get_id(),
];
echo "https://pay.freekassa.ru/?" . http_build_query($params);
}
//Получение информации об оплате
function transfer(): void {
$this->allowIP();
$user_id = $_REQUEST['us_userid'];
$amount = $_REQUEST['AMOUNT'];
$MERCHANT_ID = $_REQUEST['MERCHANT_ID'];
$MERCHANT_ORDER_ID = $_REQUEST['MERCHANT_ORDER_ID'];
$sign = md5($MERCHANT_ID . ':' . $_REQUEST['AMOUNT'] . ':' . $this->secret_key_2 . ':' . $MERCHANT_ORDER_ID);
if($sign != $_REQUEST['SIGN']){
die('wrong sign');
}
// donate::currency необходима для конвертации валюты
// к примеру пользователь оплатил в долларах, рубля, евро, гривне
// мы используем внутренний курс, чтоб выдать N количество Донат Бонусов.
$amount = donate::currency($amount, $_REQUEST['currency']);
// auth::change_donate_point непосредственно зачисление в личный кабинет пользователю донат бонусов.
auth::change_donate_point($user_id, $amount);
echo 'YES';
}
}
Отлично, теперь у Вас всё работает. Пробуйте проверяйте.
Если у Вас какие либо трудности, могу порекомендовать обратиться к тем кто занимается интеграцией с платжеными системами.
Последнее редактирование: