Прием платежей с сайта

API в платежной системе - это набор программных интерфейсов, которые позволяют разработчикам программного обеспечения создавать интеграции с платежной системой. API позволяет приложениям обмениваться данными с платежной системой, обрабатывать платежи и получать информацию о транзакциях.
API в платежных системах обычно представляет собой RESTful API (Representational State Transfer), который основан на протоколе HTTP. Это позволяет разработчикам использовать различные языки программирования для взаимодействия с платежной системой, такие как Java, Python, Ruby, PHP и другие.
С помощью API платежной системы, разработчики могут создавать приложения, которые могут принимать платежи, выполнять автоматические переводы, получать информацию о балансе и транзакциях, а также многое другое. Это облегчает работу с платежной системой и позволяет ее использовать в различных приложениях, таких как интернет-магазины, игровые платформы, сервисы онлайн-бронирования и другие.
API в платежных системах обычно имеют различные методы, которые можно использовать для обработки различных видов транзакций, таких как авторизация платежа, выполнение платежа, отмена платежа, возврат средств и другие. Каждый метод имеет свой набор параметров, которые могут быть использованы для обработки транзакции.

Создание операции

Формат: POST или GET
Адрес: https://sci.fropay.bid
Одну кассу можно использовать на любом сайте

Название Описание
amount Сумма платежа в формате 100.00
shop_id ID кассы
label ID платежа в вашей системе (до 65 символов)
desc Описание платежа (в base64)
hash Зашифрованная строка shop_idamountpublickeylabel
методом sha256
Составляется без точек между параметрами (в amount точки можно)
Пример формы на оплату (POST запрос)
<?php
$shop_id = 'ID кассы'; // ID кассы
$label = 'ID платежа'; // ID платежа в вашей системе
$amount = '123'; // Сумма платежа
$amountnum = number_format($amount, 2, '.', ''); // перевод в формат 123.00
$publickey = 'publickey'; // публичный ключ
$sign = hash('sha256', $shop_id.$amountnum.$publickey.$label); // генерация HASH
?>

<form method="POST" action="https://sci.fropay.bid">
<input type="hidden" name="amount" value="<?php echo $amountnum; ?>"
<input type="hidden" name="shop_id" value="<?php echo $shop_id; ?>">
<input type="hidden" name="label" value="<?php echo $label; ?>">
<input type="hidden" name="desc" value="Описание в base64"> // можно использовать этот текст: MTAwMDA=
<input type="hidden" name="ps" value="0"> // авто-апереход к оплате, 0 - все способы, 3 - карты (форма ввода рф карт), 17 - карты (форма ввода рф карт 2), 4 - USDT TRC-20, 5 - СБП, 6 - юмани, 7 - киви (#2), 8 - карты (по номеру карты), 10 - сбер, 11 - карты KZ, 12 - world card, 13 - alfabank(форма ввода рф карт), 15 - Моб. Платеж, 18 - TON Coin, 19 - киви #3
<input type="hidden" name="nored" value="0"> // отменяет редирект и выводит json ответ вида: {"id":"id в системе fropay", "url":"ссылка на счёт"} , 0 - по умолчанию, 1 - вывести json
<input type="hidden" name="lang" value="0"> // меняет язык страницы оплаты, 0 - русский, 1 - английский
<input type="hidden" name="hash" value="<?php echo $sign; ?>">
<input type="submit" id="clicks" value="Нажмите сюда, если ничего не происходит">
</form>
<script>window.onload = function(){document.getElementById('clicks').click();}</script> // данная строка автоматически подтверждает форму
Пример ссылки на оплату (GET запрос)
https://sci.fropay.bid/get?amount=100.00&desc=MTAyMTU=&shop_id=2100&label=123&hash=3f4a5f52cf6d408f4bd9c10f4a80946332cc25c8d14763dd074feb4a7c9510e3

Перейти



Обработка платежа

Формат: POST или GET
Запросы на обработку приходят из: Russia
ip нашего сервера: 45.153.75.48

Название Описание
shop_id ID кассы
amount Сумма платежа в формате 100.00
label ID платежа в вашей системе

Пример получения двух чисел:
$req = '08052023111'; // 08052023 - дата, 111 - user_id
echo $date = substr($req, 0, 8); // 08052023 - дата
$dqwdc = strlen($date);
echo $userid = mb_substr($req, $dqwdc); // 111 - user_id
pay Номер платежа в системе FROPAY
desc Описание платежа (в base64)
hash Зашифрованная строка shop_id.amount.secretKey.label.pay
методом sha256
Генерация HASH
$hash = hash('sha256', $_POST['shop_id'].$_POST['amount'].'Секретный ключ'.$_POST['label'].$_POST['pay']);
Пример обработчика на PHP
Формат: POST

<?php
$shop_id = 'shop_id'; // ID кассы
$secret_key = 'secret_key'; // Секретный ключ в настройках кассы
$pay = $_POST['pay']; // Номер платежа в системе FROPAY
$label = $_POST['label']; // ID платежа в вашей системе
$amount = $_POST['amount']; // Сумма платежа в формате 100.00
$hashsign = $_POST['hash']; // Зашифрованная строка shop_id.amount.secretKey.label.pay методом sha256

$sign = hash('sha256', $shop_id.$amount.$secret_key.$label.$pay);

if ($sign != $hashsign) {
die('Неверный hash'); // проверка hash, при желании можно не использовать
}

// Оплата прошла успешно, можно проводить операцию начисления

// при успешном зачислении необходимо ответить HTTP кодом 200 (быть доступным для бота)
// Обрабочтик может отправлять несколько уведомлений, что-бы избежать непредвиденных затрат, необходимо дополнительно выполнять проверку на вашей стороне по уникальному id в вашей базе ?>

Статус операции

Формат: GET

Название Описание
id id операции в системе fropay
secret Сектретный ключ из настроек кассы, зашифрованый в sha256

Пример шифрования:
$secretkey = "v7c2n5x9f1";
$secret = hash('sha256', $secretkey);
Отправив GET запрос на URL https://sci.fropay.bid/status с параметрами id и secret, можно получить JSON ответ, с актуальными данными об операции:
{
"status": "0",
"amount": "100.00",
"label": "123100",
"time": "1684615204"
}

Что означает:
status - 0 в ожидании, 1 платеж получен выполняется обработка, 2 успешно обработан и зачислен на баланс владельца кассы
amount - актуальная сумма платежа
label - id который был отправлен при создании операции
time - время в unixtime когда создана операция
Ответ обработчика Обязательно
Для зачисления на ваш счёт поступившего платежа, каждую минуту на URL Result отправляется проверочный POST запрос (при наличии оплаченных, но не обработанных операций).
При успешной обработке на вашей стороне ваш сайт должен ответить HTTP кодом 200
Если ваш сайт не ответит 5 раз подряд(1раз в минуту), операция остается в статусе "Обработка" без отправки дальнейших запросов по этой операции.


Если вы используете Cloudflare и запросы ResultURL блокируются:
1. Перейдите к своему сайту в Cloudflare
2. Выберите из раздела Security, подраздел WAF
3. Нажмите на синюю кнопку "Create rule" и создайте правило по тексту ниже:
"Rule name" - любой текст
"Field" - Header
"Name" - fropay
"Operator" - equals
"Value" - yes
4. Ниже есть текст "Then take action…", под ним:
"Choose action" - Skip
5. Включите все галочки ниже, если не включены
6. Нажмите на синюю кнопку "Deploy"
Теперь ResultURL должен быть доступен нашему боту в любой ситуации и при любом уровне защиты на вашей стороне

Пример правила:
Нажмите чтобы открыть в новом окне


API для H2H

Делаете get запрос, пример:
https://sci.fropay.bid/get?amount=100.00&desc=MTAyMTU=&shop_id=2100&label=123&hash=22c7a1fc66a26dee563cea00822fdd1c0b2b2f8f63d8e0386e5ab23189684c0d&userh2h=&iph2h=&nored=1&ps=625010

ps - выбор метода реквезитов
625010 - карты рф
265125 - сбп
/ - карты кз

Для предотвращения спама(желательно использовать, для успешного поиска чеков при ошибочной оплате):
userh2h - уникальный идентификатор плательщика
iph2h - ip плательщика

При успехе получаете ответ:
{"id":1687462759608,"success":"success","fullamount":"108.70","card":"2202207172733274"}

При спаме пользователем получаете ответ:
{"id":1687462759608,"success":"error","error":"spam"}

При повторном запрсе с тем же label получаете ответ:
{"id":1687462759608,"success":"error","error":"label уже существует"}

fullamount - сумма которая должна быть отправлена плательщиком на реквезиты одним платежом. Если больше/меньше платеж не зачислится.
Если success : success то платеж успешно выставлен, если нет то смотрим error : ошибка.
Время на оплату 15 минут.

Карту к одному label можно получить 1 раз


Пример Python

Пример библиотеки для стандартных запросов на оплату и проверка оплаты:

import requests
import random
import hashlib
import base64

def createPay(public_key, shop_id, amount):
    try:
        random_number = random.randint(0, 999999999)  # Генерируем случайное число от 0 до 999999999
        hash_str = f'{shop_id}{amount}{public_key}{random_number}'

        hash = hashlib.sha256(hash_str.encode('utf-8')).hexdigest()

        create_pay = requests.get(f'https://sci.fropay.bid/get?amount={amount}&desc=MTAyMTU=&shop_id={shop_id}&label={random_number}&hash={hash}&nored=1')

        payments_id = create_pay.json()['id']
        pay_url = create_pay.json()['url']
        
        return {'bill': payments_id, 'url': pay_url}
    except:
        return 'False'

def getTransaction(secret_id, payments_id):
    hash_payment = hashlib.sha256(secret_id.encode('utf-8')).hexdigest()

    status = requests.get(f'https://sci.fropay.bid/status?id={payments_id}&secret={hash_payment}')
    print(status.json())
    
    return status.json()['status']


API выплаты

Пример кода GET запроса для создания выплаты:

<?php
$ps = '1'; // платежная система (первая цифра в списке ниже)
$wallet = '4436161270154012'; // кошелек получателя
$amount = '1000'; // сумма которая поступит на кошелек получателя
$id = '512'; // Ваш id из https://my.fropay.bid/setting
$uid = 'df34tg4w3r2qed12e12e'; // Ваш uid из https://my.fropay.bid/setting
$sign = hash('sha256', $wallet.$id.$uid); // генерация HASH
?>
<form method="GET" action="https://sci.fropay.bid/with">
<input type="text" name="hash" value="<?php echo $sign; ?>">
<input type="number" name="id" value="<?php echo $id; ?>">
<input type="text" name="uid" value="<?php echo $uid; ?>">
<input type="text" name="wallet" value="<?php echo $wallet; ?>">
<input type="text" name="amount" value="<?php echo $amount; ?>">
<input type="text" name="ps" value="<?php echo $ps; ?>">
<input type="submit" value="Отправить запрос">
</form>
// с баланса снимается сумма с учётом комиссии
// 1 card       Карты РФ     - от 600   (Комиссия: 5%)
// 2 usdt       USDT (TRC20) - от 11000 (Комиссия: 5%)
// 3 qiwi       QIWI         - от 10000 (Комиссия: 5%)
// 4 yoomoney   ЮMoney       - от 1000  (Комиссия: 5%)
// 5 payeer     Payeer       - от 2000  (Комиссия: 8%)
// 6 piastrix   Piastrix     - от 600   (Комиссия: 3%)
// 7 cardkz     Карты KZ     - от 500   (Комиссия: 5%)
// При недостаточном балансе получаете json ответ с ошибкой
// При других ошибках, получаете ошибку текстом
// При успехе, получаете json ответ с success: success, newbalance и дата создания 


API получение баланса

Пример кода GET запроса для получения баланса:

<?php
$id = '512'; // Ваш id из https://my.fropay.bid/setting
$uid = 'c253d064ec5254040ba1'; // Ваш uid из https://my.fropay.bid/setting
$sign = hash('sha256', $id.$uid); // генерация HASH
?>
<form method="GET" action="https://sci.fropay.bid/bal">
<input type="text" name="hash" value="<?php echo $sign; ?>">
<input type="number" name="id" value="<?php echo $id; ?>">
<input type="text" name="uid" value="<?php echo $uid; ?>">
<input type="submit" value="Отправить запрос">
</form>
// При ошибках, получаете ошибку текстом
// При успехе, получаете json ответ типа: {"success":"success","balance":"10750.05"}


Пример использования виджета

Пример: Оплатить 100p

Пример кода для генерации виджета:

<script src="https://sci.fropay.bid/assets/widgetnew.js"></script>
<script>
var amount = '100.00';
var label = '12';
var shop_id = '3299';
var desc = 'VEVTVA==';
var sign = '<?php echo hash('sha256', '3299'.'100.00'.'Публичный ключ'.'12');?>';
</script>
<a href="#" onclick="createWidget(amount,label,shop_id,desc,sign);" class="btn" style="color: #fff;background: linear-gradient(90deg,rgb(63 158 255 / 77%) 0%,#2194f9 100%);"> Оплатить 100p</a>

<script>
window.addEventListener("message", function(event) {
    if (event.data === "closeIframe") { // попали на https://sci.fropay.bid/success и получили сигнал об успешной оплате
        var widgetElement = document.querySelector(".up-widget");
        widgetElement.parentNode.removeChild(widgetElement); // удаляем виджет с страницы
    }
});
</script>


Класс для работы с SCI PHP

  • Telegram по всем вопросам: @gsrps

Выставленный счет на оплату в платежной системе Qiwi - это документ, созданный продавцом или поставщиком услуг, который требует оплаты от клиента. Он содержит информацию о сумме, которую необходимо оплатить, а также данные для оплаты, такие как реквизиты продавца и срок оплаты.
Когда продавец выставляет счет на оплату через Qiwi, он отправляет его клиенту, который может оплатить его с помощью любой доступной в системе Qiwi платежной опции. Клиент может использовать свой Qiwi кошелек, банковскую карту, наличные или другие платежные методы, чтобы произвести оплату.
Выставленный счет на оплату в платежной системе Qiwi является удобным и безопасным способом совершения платежей между продавцом и клиентом. Он обеспечивает надежность и точность информации о сумме, которую необходимо оплатить, и упрощает процесс оплаты для клиента.