не работает платежная система LiqPay

allmoll

Постоялец
Регистрация
1 Мар 2014
Сообщения
584
Реакции
162
Есть прога fiddler Для просмотра ссылки Войди или Зарегистрируйся устанавливаете у себя на ПК, имитируете действия посетителя и смотрите что происходит с запросами при пополнении.
 

Вложения

  • Скриншот 2020-04-20 08.35.27 — копия.png
    Скриншот 2020-04-20 08.35.27 — копия.png
    501,1 KB · Просмотры: 12

krdma

Гуру форума
Регистрация
1 Июн 2009
Сообщения
147
Реакции
54

Anastasiya96

Постоялец
Регистрация
14 Мар 2018
Сообщения
137
Реакции
141
поняла, что ничего не поняла :conf:
как мне, например, посмотреть какой пришёл запрос? и вот эта строчка мне не понятна $summa = (($data_json["amount"] / 100) * $bonus["procent"]); что это за проценты от суммы?(
 

krdma

Гуру форума
Регистрация
1 Июн 2009
Сообщения
147
Реакции
54
и вот эта строчка мне не понятна $summa = (($data_json["amount"] / 100) * $bonus["procent"]); что это за проценты от суммы?(
это если включена бонусная система, зачисляется бонус тому кто привел человека

поняла, что ничего не поняла :conf:
как мне, например, посмотреть какой пришёл запрос? (

из простого - в начале файла прописать

file_put_contents('pay.log',var_export([$_POST,$_GET],true));

если в коде нет ошибок и правильно настроен коллбек - после запроса в папке с коллбеком появится файл pay.log с инфой которая приходит.
 

Anastasiya96

Постоялец
Регистрация
14 Мар 2018
Сообщения
137
Реакции
141
Скрытое содержимое доступно для зарегистрированных пользователей!
 

garphild

Постоялец
Регистрация
19 Май 2009
Сообщения
60
Реакции
32
поняла, что ничего не поняла :conf:
как мне, например, посмотреть какой пришёл запрос? и вот эта строчка мне не понятна $summa = (($data_json["amount"] / 100) * $bonus["procent"]); что это за проценты от суммы?(
Это процент, который является бонусным. Зачем-то высчитывается и в последствии сохраняется. Вероятно это что-то типа affilate
где мне его здесь поставить? между какими строчками?

<?php
session_start();
define('unisitecms', true);

include_once("../../../systems/config.php");
include_once("{$_SERVER['DOCUMENT_ROOT']}/systems/classes/UniSite.php");

$languages_content = json_decode( ob_get($_SERVER["DOCUMENT_ROOT"]."/lang/".$settings["lang_site_default"].".php"), true );

$title_payment = $languages_content["payment-replenishment-title"];
$param = paymentParams('liqpay');
$bonus = bonusProgram("balance_profile");

$data = $_POST["data"];
$signature = $_POST["signature"];

$data_json = json_decode(base64_encode($data), true);

$sign = base64_encode( sha1(
trim($param["private_key"]) .
$data .
trim($param["private_key"])
, 1 ));

$id = explode("-", $data_json["order_id"]);

if($sign == $signature && ($data_json["status"] == "success" || $data_decode["status"] == "wait_accept" || $data_json["status"] == "sandbox")){

$Profile->profileBalance(array("id_user"=>intval($id[0]),"summa"=>round($data_json["amount"],2),"method"=>"LiqPay","title"=>$title_payment,"id_order"=>intval($id[1])),"+");

if($bonus["procent"]){
$summa = (($data_json["amount"] / 100) * $bonus["procent"]);
$Profile->profileBalance(array("id_user"=>intval($id[0]),"summa"=>round($summa,2),"method"=>"LiqPay","title"=>$bonus["title"],"id_order"=>intval($id[1])),"+");
}

Скорее всего у Вас не проходит проверка ключа.
if($sign == $signature

А не проходит оно скорее всего из-за того, что здесь
Код:
$sign = base64_encode( sha1(
trim($param["private_key"]) .
$data .
trim($param["private_key"])
, 1 ));
установлен параметр 1, который возвращает данные хеша в бинарном виде, а не в виде строки. Замените 1 на 0 и проверьте.
Также можно вывести в файл $sign и $signature для того чтобы убедиться что они разные.
 

Anastasiya96

Постоялец
Регистрация
14 Мар 2018
Сообщения
137
Реакции
141
установлен параметр 1, который возвращает данные хеша в бинарном виде, а не в виде строки. Замените 1 на 0 и проверьте.
поставила 0 - не помогло!

Также можно вывести в файл $sign и $signature для того чтобы убедиться что они разные.
а как это сделать?

вот результат лога

array (
0 =>
array (
'signature' => 'sQ5ZWSkWrRUfxqiTdwgGCV1LEhM=',
'data' => 'eyJwYXltZW50X2lkIjoxMjk5NDUxMzkyLCJhY3Rpb24iOiJwYXkiLCJzdGF0dXMiOiJzdWNjZXNzIiwidmVyc2lvbiI6MywidHlwZSI6ImJ1eSIsInBheXR5cGUiOiJjYXJkIiwicHVibGljX2tleSI6InNhbmRib3hfaTE4NjYxNjA5MjAxIiwiYWNxX2lkIjo0MTQ5NjMsIm9yZGVyX2lkIjoiMTEtODg0MzM2Mzc5IiwibGlxcGF5X29yZGVyX2lkIjoiNjNGUTVTT0IxNTg3MzgwNjAyODIxMjI4IiwiZGVzY3JpcHRpb24iOiLQn9C+0L/QvtC70L3QtdC90LjQtSDQsdCw0LvQsNC90YHQsCIsInNlbmRlcl9jYXJkX21hc2syIjoiNTE2NzgwKjk1Iiwic2VuZGVyX2NhcmRfYmFuayI6IkpPSU5UIFNUT0NLIENPTVBBTlkgU1RBVEUgU0FWSSIsInNlbmRlcl9jYXJkX3R5cGUiOiJtYyIsInNlbmRlcl9jYXJkX2NvdW50cnkiOjgwNCwiaXAiOiIxODUuMTMwLjU1LjYzIiwiYW1vdW50Ijo1LjAsImN1cnJlbmN5IjoiVUFIIiwic2VuZGVyX2NvbW1pc3Npb24iOjAuMCwicmVjZWl2ZXJfY29tbWlzc2lvbiI6MC4xNCwiYWdlbnRfY29tbWlzc2lvbiI6MC4wLCJhbW91bnRfZGViaXQiOjUuMCwiYW1vdW50X2NyZWRpdCI6NS4wLCJjb21taXNzaW9uX2RlYml0IjowLjAsImNvbW1pc3Npb25fY3JlZGl0IjowLjE0LCJjdXJyZW5jeV9kZWJpdCI6IlVBSCIsImN1cnJlbmN5X2NyZWRpdCI6IlVBSCIsInNlbmRlcl9ib251cyI6MC4wLCJhbW91bnRfYm9udXMiOjAuMCwibXBpX2VjaSI6IjciLCJpc18zZHMiOmZhbHNlLCJsYW5ndWFnZSI6InJ1IiwiY3JlYXRlX2RhdGUiOjE1ODczODA2MDI4MjMsImVuZF9kYXRlIjoxNTg3MzgwNjAzNDA0LCJ0cmFuc2FjdGlvbl9pZCI6MTI5OTQ1MTM5Mn0=',
),
1 =>
array (
),
)
 

Anastasiya96

Постоялец
Регистрация
14 Мар 2018
Сообщения
137
Реакции
141
вот код из waletone - он то работает, то не работает.. может здесь есть подсказка?


<?php
session_start();
define('unisitecms', true);

include_once("../../../systems/config.php");
include_once("{$_SERVER['DOCUMENT_ROOT']}/systems/classes/UniSite.php");

$languages_content = json_decode( ob_get($_SERVER["DOCUMENT_ROOT"]."/lang/".$settings["lang_site_default"].".php"), true );

$title_payment = $languages_content["payment-replenishment-title"];
$param = paymentParams('walletone');
$bonus = bonusProgram("balance_profile");

function print_answer($result, $description)
{
print "WMI_RESULT=" . strtoupper($result) . "&";
print "WMI_DESCRIPTION=" .urlencode($description);
exit();
}

// Проверка наличия необходимых параметров в POST-запросе

if (!isset($_POST["WMI_SIGNATURE"]))
print_answer("Retry", "Отсутствует параметр WMI_SIGNATURE");

if (!isset($_POST["WMI_PAYMENT_NO"]))
print_answer("Retry", "Отсутствует параметр WMI_PAYMENT_NO");

if (!isset($_POST["WMI_ORDER_STATE"]))
print_answer("Retry", "Отсутствует параметр WMI_ORDER_STATE");

// Извлечение всех параметров POST-запроса, кроме WMI_SIGNATURE

foreach($_POST as $name => $value)
{
if ($name !== "WMI_SIGNATURE") $params[$name] = $value;
}

// Сортировка массива по именам ключей в порядке возрастания
// и формирование сообщения, путем объединения значений формы

uksort($params, "strcasecmp"); $values = "";

foreach($params as $name => $value)
{
//Конвертация из текущей кодировки (UTF-8)
//необходима только если кодировка магазина отлична от Windows-1251
// $value = iconv("utf-8", "windows-1251", $value);
$values .= $value;
}

// Формирование подписи для сравнения ее с параметром WMI_SIGNATURE

$signature = base64_encode(pack("H*", md5($values . $param["key"])));

//Сравнение полученной подписи с подписью W1

if ($signature == $_POST["WMI_SIGNATURE"])
{
if (strtoupper($_POST["WMI_ORDER_STATE"]) == "ACCEPTED")
{

$explode = explode("-", $_POST["WMI_PAYMENT_NO"]);
if($Profile->profileBalance(array("id_user"=>$explode[0],"summa"=>round($_POST["WMI_PAYMENT_AMOUNT"],2),"title"=>$title_payment,"id_order"=>$explode[1],"method"=>"WalletOne"),"+")){

if($bonus["procent"]){
$summa = (($_POST["WMI_PAYMENT_AMOUNT"] / 100) * $bonus["procent"]);
$Profile->profileBalance(array("id_user"=>$explode[0],"summa"=>round($summa,2),"method"=>"WalletOne","title"=>$bonus["title"],"id_order"=>$explode[1]),"+");
}

print_answer("Ok", "Заказ #" . $_POST["WMI_PAYMENT_NO"] . " оплачен!");
}else{
print_answer("Retry", "Произошла ошибка при оплате!");
}


}
else
{
// Случилось что-то странное, пришло неизвестное состояние заказа

print_answer("Retry", "Неверное состояние ". $_POST["WMI_ORDER_STATE"]);
}
}
else
{
// Подпись не совпадает, возможно вы поменяли настройки интернет-магазина

print_answer("Retry", "Неверная подпись " . $_POST["WMI_SIGNATURE"]);
}

?>
 

garphild

Постоялец
Регистрация
19 Май 2009
Сообщения
60
Реакции
32
поставила 0 - не помогло!


а как это сделать?

file_put_contents("./log.txt", "{$sign}\n\n{$signature}\n\n");
Если они разные, то нужно смотреть в сторону $param["private_key"]). Тот же он которым делается подпись при отправке платежа или нет.
 
Сверху