PHP InterKassa не пополняет баланс пользователю

globalyt1

Участник
В общем я в этом новичок строго не судите, InterKassa не пополняет баланс пользователю. Дайте пожалуйста готовый код, когда пользователь оплатил, ему пополняется баланс

сам result.php

echo 'RESULT';

$dataSet = $_POST;

if (!$dataSet)
exit('Ошибка платежа');

unset($dataSet['ik_sign']);
ksort($dataSet, '$testhash');
array_push($dataSet, $key);
$signString = implode(':', $dataSet);
$sign = base64_encode(md5($signString, true));

if ($sign != $_POST['ik_sign'])
exit('Ошибка обработки платежа');

file_put_contents('logs/log.txt', "Сумма: $_POST[ik_am]");
 

pligin

Команда форума
Администратор
Дайте пожалуйста готовый код, когда пользователь оплатил, ему пополняется баланс
У нас экстрасенсов нет.
В твоём коде после проверки подписи записывается сумма пополнения в логи и ничего более.
Нет ни проверки наличия заказа, ни проверки суммы платежа, ни проверки на уже оплаченный платеж...
Ты хотя бы рассказал что за система у тебя и где находится баланс пользователя
 

globalyt1

Участник
У нас экстрасенсов нет.
В твоём коде после проверки подписи записывается сумма пополнения в логи и ничего более.
Нет ни проверки наличия заказа, ни проверки суммы платежа, ни проверки на уже оплаченный платеж...
Ты хотя бы рассказал что за система у тебя и где находится баланс пользователя
Это не CMS, самопис, баланс пользователя находится в t_users, поле bal
 

globalyt1

Участник
У нас экстрасенсов нет.
В твоём коде после проверки подписи записывается сумма пополнения в логи и ничего более.
Нет ни проверки наличия заказа, ни проверки суммы платежа, ни проверки на уже оплаченный платеж...
Ты хотя бы рассказал что за система у тебя и где находится баланс пользователя
Форма
<form name="payment" method="post" action="https://sci.interkassa.com/" enctype="utf-8">
<div class="container">
<input type="hidden" name="s" value="$hash" />
<p class="text-center">Пополнить через Interkassa</p>
<div class="form-group">
<label for="exampleFormControlInput1">Сумма пополнения</label>
<input type="text" name="ik_am" class="form-control" value="3000">
</div>
<div style="text-align: center">
<button class="btn btn-success" type="submit">Пополнить</button>
</div>
</div>
</form>

Я изначально хотел сделать вот так
$sign_hash = strtoupper(hash('sha256', implode(':', $arHash)));
if ($_POST['ik_sign'] == $sign_hash && $_POST['ik_status'] == 'success')
{
$dt = time();
$pa = mysqli_fetch_assoc(mysqli_query($connect_db, "SELECT id,usr FROM t_in WHERE ba = '$_POST[ik_orderid]' AND st = '0' LIMIT 1"));
$usr = $pa['usr'];
if ($usr > 0) {
mysqli_query($connect_db, "UPDATE `t_users` SET `bal` = `bal`+'$_POST[ik_am]' WHERE uid = '$usr'");
mysqli_query($connect_db, "UPDATE `t_in` SET `st` = '1' WHERE ba = '$_POST[ik_orderid]' LIMIT 1");
}
echo $_POST['ik_orderid'].'|success';
exit;
}
echo $_POST['ik_orderid'].'|error';
}
 
Последнее редактирование:

pligin

Команда форума
Администратор
Форма
<form name="payment" method="post" action="https://sci.interkassa.com/" enctype="utf-8">
<div class="container">
<input type="hidden" name="s" value="8afmzwu55q" />
<p class="text-center">Пополнить через Interkassa</p>
<div class="form-group">
<label for="exampleFormControlInput1">Сумма пополнения</label>
<input type="text" name="ik_am" class="form-control" value="3000">
</div>
<div style="text-align: center">
<button class="btn btn-success" type="submit">Пополнить</button>
</div>
</div>
</form>

Я изначально хотел сделать вот так
$sign_hash = strtoupper(hash('sha256', implode(':', $arHash)));
if ($_POST['ik_sign'] == $sign_hash && $_POST['ik_status'] == 'success')
{
$dt = time();
$pa = mysqli_fetch_assoc(mysqli_query($connect_db, "SELECT id,usr FROM t_in WHERE ba = '$_POST[ik_orderid]' AND st = '0' LIMIT 1"));
$usr = $pa['usr'];
if ($usr > 0) {
mysqli_query($connect_db, "UPDATE `t_users` SET `bal` = `bal`+'$_POST[ik_am]' WHERE uid = '$usr'");
mysqli_query($connect_db, "UPDATE `t_in` SET `st` = '1' WHERE ba = '$_POST[ik_orderid]' LIMIT 1");
}
echo $_POST['ik_orderid'].'|success';
exit;
}
echo $_POST['ik_orderid'].'|error';
}
Есть BB код для оформления PHP.
Отредактируй свое сообщение
 

pligin

Команда форума
Администратор
А это правильно?
нет
$_POST['ik_status'] == 'success'
в интеркассе параметр ik_inv_st
$sign_hash = strtoupper(hash('sha256', implode(':', $arHash)));
в интеркассе подпись формируется так
PHP:
unset($dataSet['ik_sign']); Delete string with signature from dataset
ksort($dataSet, SORT_STRING); // Sort elements in array by var names in alphabet queue
array_push($dataSet, $key); // Adding secret key at the end of the string
$signString = implode(':', $dataSet); // Concatenation calues using symbol ":"
$sign = base64_encode(md5($signString, true)); // Get MD5 hash as binare view using generate string and code it in BASE64
 

globalyt1

Участник
Есть BB код для оформления PHP.
Отредактируй свое сообщение
нет

в интеркассе параметр ik_inv_st

в интеркассе подпись формируется так
PHP:
unset($dataSet['ik_sign']); Delete string with signature from dataset
ksort($dataSet, SORT_STRING); // Sort elements in array by var names in alphabet queue
array_push($dataSet, $key); // Adding secret key at the end of the string
$signString = implode(':', $dataSet); // Concatenation calues using symbol ":"
$sign = base64_encode(md5($signString, true)); // Get MD5 hash as binare view using generate string and code it in BASE64
Спасибо
 

pligin

Команда форума
Администратор
PHP:
<?php

/*
* Author: pligin
* Site: psweb.ru
* Email: i@psweb.ru
* Telegram: t.me/pligin
*/

//Проверка IP сервера оповещений
if (!in_array($_SERVER['REMOTE_ADDR'], array('35.233.69.55','34.77.232.58','35.240.117.224'))){
    die('ERROR IP');
}
if(isset($_POST['ik_co_id']) && isset($_POST['ik_sign'])){
    $key = 'your_key';
    unset($dataSet['ik_sign']);
    ksort($dataSet, SORT_STRING);
    array_push($dataSet, $key);
    $signString = implode(':', $dataSet);
    $sign = base64_encode(md5($signString, true));
    if ($_POST['ik_sign'] == $sign && $_POST['ik_inv_st'] == 'success'){
        $txnId = $_POST['ik_inv_id'];//идентификатор платежа
        $account = $_POST['ik_cli'];//Контакт плательщика
        $order_id = $_POST['ik_pm_no'];//Номер платежа, передается из формы
        $amount = $_POST['ik_am'];//Сумма платежа
        //достаешь данные платежа из своей бд по номеру платежа,
        //проверяешь его наличие, не оплачен ли он, сверяешь сумму платежа.
        //если все збс, начисляешь пользователю и выставляешь статус платежа на "Выполнен"
        header("HTTP/1.1 200 OK");//оповещения будут приходить пока сервер не отдаст этот ответ
    }else{
        die('ERROR SIGN!');
    }
}else{
    die('ERROR CONDITION!');
}
 
Последнее редактирование:

globalyt1

Участник
PHP:
<?php

/*
* Author: pligin
* Site: psweb.ru
* Email: i@psweb.ru
* Telegram: t.me/pligin
*/

//Проверка IP сервера оповещений
if (!in_array($_SERVER['REMOTE_ADDR'], array('35.233.69.55','34.77.232.58','35.240.117.224'))){
    die('ERROR IP');
}
if(isset($_POST['ik_co_id']) && isset($_POST['ik_sign'])){
    unset($dataSet['ik_sign']);
    ksort($dataSet, SORT_STRING);
    array_push($dataSet, $key);
    $signString = implode(':', $dataSet);
    $sign = base64_encode(md5($signString, true));
    if ($_POST['ik_sign'] == $sign && $_POST['ik_inv_st'] == 'success'){
        $txnId = $_POST['ik_inv_id'];//идентификатор платежа
        $account = $_POST['ik_cli'];//Контакт плательщика
        $order_id = $_POST['ik_pm_no'];//Номер платежа, передается из формы
        $amount = $_POST['ik_am'];//Сумма платежа
        //достаешь данные платежа из своей бд по номеру платежа,
        //проверяешь его наличие, не оплачен ли он, сверяешь сумму платежа.
        //если все збс, начисляешь пользователю и выставляешь статус платежа на "Выполнен"
        header("HTTP/1.1 200 OK");//оповещения будут приходить пока сервер не отдаст этот ответ
    }else{
        die('ERROR SIGN!');
    }
}else{
    die('ERROR CONDITION!');
}
Спасибо
 

globalyt1

Участник
PHP:
<?php

/*
* Author: pligin
* Site: psweb.ru
* Email: i@psweb.ru
* Telegram: t.me/pligin
*/

//Проверка IP сервера оповещений
if (!in_array($_SERVER['REMOTE_ADDR'], array('35.233.69.55','34.77.232.58','35.240.117.224'))){
    die('ERROR IP');
}
if(isset($_POST['ik_co_id']) && isset($_POST['ik_sign'])){
    $key = 'your_key';
    unset($dataSet['ik_sign']);
    ksort($dataSet, SORT_STRING);
    array_push($dataSet, $key);
    $signString = implode(':', $dataSet);
    $sign = base64_encode(md5($signString, true));
    if ($_POST['ik_sign'] == $sign && $_POST['ik_inv_st'] == 'success'){
        $txnId = $_POST['ik_inv_id'];//идентификатор платежа
        $account = $_POST['ik_cli'];//Контакт плательщика
        $order_id = $_POST['ik_pm_no'];//Номер платежа, передается из формы
        $amount = $_POST['ik_am'];//Сумма платежа
        //достаешь данные платежа из своей бд по номеру платежа,
        //проверяешь его наличие, не оплачен ли он, сверяешь сумму платежа.
        //если все збс, начисляешь пользователю и выставляешь статус платежа на "Выполнен"
        header("HTTP/1.1 200 OK");//оповещения будут приходить пока сервер не отдаст этот ответ
    }else{
        die('ERROR SIGN!');
    }
}else{
    die('ERROR CONDITION!');
}
PHP:
if (!in_array($_SERVER['REMOTE_ADDR'], array('35.233.69.55','34.77.232.58','35.240.117.224'))){
    die('ERROR IP');
}
if(isset($_POST['ik_co_id']) && isset($_POST['ik_sign'])){
    unset($dataSet['ik_sign']);
    ksort($dataSet, SORT_STRING);
    array_push($dataSet, $key);
    $signString = implode(':', $dataSet);
    $sign = base64_encode(md5($signString, true));
    if ($_POST['ik_sign'] == $sign && $_POST['ik_inv_st'] == 'success'){
        $txnId = $_POST['ik_inv_id'];//идентификатор платежа
        $account = $_POST['ik_cli'];//Контакт плательщика
        $order_id = $_POST['ik_pm_no'];//Номер платежа, передается из формы
        $amount = $_POST['ik_am'];//Сумма платежа
        Вот сюда вставить пополнение да?
        header("HTTP/1.1 200 OK");//оповещения будут приходить пока сервер не отдаст этот ответ
    }else{
        die('ERROR SIGN!');
    }
}else{
    die('ERROR CONDITION!');
}
 
Верх