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

Есть прога fiddler Для просмотра ссылки Войди или Зарегистрируйся устанавливаете у себя на ПК, имитируете действия посетителя и смотрите что происходит с запросами при пополнении.
 

Вложения

  • Скриншот 2020-04-20 08.35.27 — копия.png
    Скриншот 2020-04-20 08.35.27 — копия.png
    501,1 KB · Просмотры: 13
поняла, что ничего не поняла :conf:
как мне, например, посмотреть какой пришёл запрос? и вот эта строчка мне не понятна $summa = (($data_json["amount"] / 100) * $bonus["procent"]); что это за проценты от суммы?(
 
и вот эта строчка мне не понятна $summa = (($data_json["amount"] / 100) * $bonus["procent"]); что это за проценты от суммы?(
это если включена бонусная система, зачисляется бонус тому кто привел человека

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

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

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

если в коде нет ошибок и правильно настроен коллбек - после запроса в папке с коллбеком появится файл pay.log с инфой которая приходит.
 
Скрытое содержимое доступно для зарегистрированных пользователей!
 
поняла, что ничего не поняла :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 для того чтобы убедиться что они разные.
 
установлен параметр 1, который возвращает данные хеша в бинарном виде, а не в виде строки. Замените 1 на 0 и проверьте.
поставила 0 - не помогло!

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

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

array (
0 =>
array (
'signature' => 'sQ5ZWSkWrRUfxqiTdwgGCV1LEhM=',
'data' => 'eyJwYXltZW50X2lkIjoxMjk5NDUxMzkyLCJhY3Rpb24iOiJwYXkiLCJzdGF0dXMiOiJzdWNjZXNzIiwidmVyc2lvbiI6MywidHlwZSI6ImJ1eSIsInBheXR5cGUiOiJjYXJkIiwicHVibGljX2tleSI6InNhbmRib3hfaTE4NjYxNjA5MjAxIiwiYWNxX2lkIjo0MTQ5NjMsIm9yZGVyX2lkIjoiMTEtODg0MzM2Mzc5IiwibGlxcGF5X29yZGVyX2lkIjoiNjNGUTVTT0IxNTg3MzgwNjAyODIxMjI4IiwiZGVzY3JpcHRpb24iOiLQn9C+0L/QvtC70L3QtdC90LjQtSDQsdCw0LvQsNC90YHQsCIsInNlbmRlcl9jYXJkX21hc2syIjoiNTE2NzgwKjk1Iiwic2VuZGVyX2NhcmRfYmFuayI6IkpPSU5UIFNUT0NLIENPTVBBTlkgU1RBVEUgU0FWSSIsInNlbmRlcl9jYXJkX3R5cGUiOiJtYyIsInNlbmRlcl9jYXJkX2NvdW50cnkiOjgwNCwiaXAiOiIxODUuMTMwLjU1LjYzIiwiYW1vdW50Ijo1LjAsImN1cnJlbmN5IjoiVUFIIiwic2VuZGVyX2NvbW1pc3Npb24iOjAuMCwicmVjZWl2ZXJfY29tbWlzc2lvbiI6MC4xNCwiYWdlbnRfY29tbWlzc2lvbiI6MC4wLCJhbW91bnRfZGViaXQiOjUuMCwiYW1vdW50X2NyZWRpdCI6NS4wLCJjb21taXNzaW9uX2RlYml0IjowLjAsImNvbW1pc3Npb25fY3JlZGl0IjowLjE0LCJjdXJyZW5jeV9kZWJpdCI6IlVBSCIsImN1cnJlbmN5X2NyZWRpdCI6IlVBSCIsInNlbmRlcl9ib251cyI6MC4wLCJhbW91bnRfYm9udXMiOjAuMCwibXBpX2VjaSI6IjciLCJpc18zZHMiOmZhbHNlLCJsYW5ndWFnZSI6InJ1IiwiY3JlYXRlX2RhdGUiOjE1ODczODA2MDI4MjMsImVuZF9kYXRlIjoxNTg3MzgwNjAzNDA0LCJ0cmFuc2FjdGlvbl9pZCI6MTI5OTQ1MTM5Mn0=',
),
1 =>
array (
),
)
 
вот код из 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"]);
}

?>
 
поставила 0 - не помогло!


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

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