AM0S 16 Опубликовано 25 апреля, 2022 В общем, поставил модуль подкючил касу и давай тестить. делаю тестовый платеж и получаю меседж Bad sign! персонаж тоже ничего не получил. Далее снимаю галочку в касе Проверять подпись в форме запроса платежа Делаю платеж получаю тот же меседж Bad sign! но на персонажа зачислены коины... помогите где что надо поправить? <?php ini_set( 'display_errors', '0' ); error_reporting( E_ALL ); //header( 'Content-Type: text/plain; charset=utf-8' ); require 'config.php'; // id вашего магазина $ik_co_id = isset( $_POST['ik_co_id'] ) ? $_POST['ik_co_id'] : 0; if ( $ik_co_id != CHECKOUT_ID ) { header( $_SERVER['SERVER_PROTOCOL'] . ' 400 Bad Request', true, 400 ); die( 'Bad Checkout Id' ); } $ik_inv_st = isset( $_POST['ik_inv_st'] ) ? $_POST['ik_inv_st'] : ''; if ( $ik_inv_st != 'success' ) { header( $_SERVER['SERVER_PROTOCOL'] . ' 400 Bad Request', true, 400 ); die( 'Payment Required' ); } // сумма платежа $ik_am = isset( $_POST['ik_am'] ) ? $_POST['ik_am'] : 0; // id платежа $ik_pm_no = isset( $_POST['ik_pm_no'] ) ? $_POST['ik_pm_no'] : 0; $ik_sign = isset( $_POST['ik_sign'] ) ? $_POST['ik_sign'] : ''; $post = $_POST; $key = isset( $_POST['ik_pw_via'] ) && $_POST['ik_pw_via'] == 'test_interkassa_test_xts' ? TEST_KEY : SECRET_KEY; unset( $post['ik_sign'] ); ksort( $post, SORT_STRING ); array_push( $post, $key ); $signStr = implode( ':', $post ); $sign = base64_encode( hash( 'sha256', $signStr, true ) ); if ( $sign != $ik_sign ) { header( $_SERVER['SERVER_PROTOCOL'] . ' 400 Bad Request', true, 400 ); die( 'Bad sign!' ); } $char_name = isset( $_POST['ik_x_char'] ) ? $_POST['ik_x_char'] : ''; $server_id = isset( $_POST['ik_x_server_id'] ) ? $_POST['ik_x_server_id'] : -1; if ( !isset( $config[ $server_id ] ) ) { header( $_SERVER['SERVER_PROTOCOL'] . ' 400 Bad Request', true, 400 ); die( 'Invalid server id!' ); } require 'db.class.php'; $db = new DB( $config[ $server_id ] ); if ( !( $char = $db->fetch( "SELECT obj_Id FROM characters WHERE char_name = ?", [ $char_name ] ) ) ) { header( $_SERVER['SERVER_PROTOCOL'] . ' 400 Bad Request', true, 400 ); die( 'Персонаж с ником ' . $char_name . ' не найден!' ); } $owner_id = $char['obj_Id']; $count = ( int ) ( $ik_am / ITEM_PRICE ); // TODO: floor || ceil $description = 'Interkassa payment id #' . $ik_pm_no; $sql = "INSERT INTO `items_delayed` ( `payment_id`, `owner_id`, `item_id`, `count`, `payment_status`, `description` ) VALUES ( ?, ?, ?, ?, ?, ? )"; if ( !$db->prepareAndExecute( $sql, [ $ik_pm_no, $owner_id, ITEM_ID, $count, 0, $description ] )->rowCount() ) { header( $_SERVER['SERVER_PROTOCOL'] . ' 400 Bad Request', true, 400 ); die( 'Платеж #' . $ik_pm_no . ' не принят!' ); } // code 200 echo 'success'; ?> Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
BlooDLucifer 26 Опубликовано 25 апреля, 2022 1 час назад, AM0S сказал: В общем, поставил модуль подкючил касу и давай тестить. делаю тестовый платеж и получаю меседж Bad sign! персонаж тоже ничего не получил. Далее снимаю галочку в касе Проверять подпись в форме запроса платежа Делаю платеж получаю тот же меседж Bad sign! но на персонажа зачислены коины... помогите где что надо поправить? <?php ini_set( 'display_errors', '0' ); error_reporting( E_ALL ); //header( 'Content-Type: text/plain; charset=utf-8' ); require 'config.php'; // id вашего магазина $ik_co_id = isset( $_POST['ik_co_id'] ) ? $_POST['ik_co_id'] : 0; if ( $ik_co_id != CHECKOUT_ID ) { header( $_SERVER['SERVER_PROTOCOL'] . ' 400 Bad Request', true, 400 ); die( 'Bad Checkout Id' ); } $ik_inv_st = isset( $_POST['ik_inv_st'] ) ? $_POST['ik_inv_st'] : ''; if ( $ik_inv_st != 'success' ) { header( $_SERVER['SERVER_PROTOCOL'] . ' 400 Bad Request', true, 400 ); die( 'Payment Required' ); } // сумма платежа $ik_am = isset( $_POST['ik_am'] ) ? $_POST['ik_am'] : 0; // id платежа $ik_pm_no = isset( $_POST['ik_pm_no'] ) ? $_POST['ik_pm_no'] : 0; $ik_sign = isset( $_POST['ik_sign'] ) ? $_POST['ik_sign'] : ''; $post = $_POST; $key = isset( $_POST['ik_pw_via'] ) && $_POST['ik_pw_via'] == 'test_interkassa_test_xts' ? TEST_KEY : SECRET_KEY; unset( $post['ik_sign'] ); ksort( $post, SORT_STRING ); array_push( $post, $key ); $signStr = implode( ':', $post ); $sign = base64_encode( hash( 'sha256', $signStr, true ) ); if ( $sign != $ik_sign ) { header( $_SERVER['SERVER_PROTOCOL'] . ' 400 Bad Request', true, 400 ); die( 'Bad sign!' ); } $char_name = isset( $_POST['ik_x_char'] ) ? $_POST['ik_x_char'] : ''; $server_id = isset( $_POST['ik_x_server_id'] ) ? $_POST['ik_x_server_id'] : -1; if ( !isset( $config[ $server_id ] ) ) { header( $_SERVER['SERVER_PROTOCOL'] . ' 400 Bad Request', true, 400 ); die( 'Invalid server id!' ); } require 'db.class.php'; $db = new DB( $config[ $server_id ] ); if ( !( $char = $db->fetch( "SELECT obj_Id FROM characters WHERE char_name = ?", [ $char_name ] ) ) ) { header( $_SERVER['SERVER_PROTOCOL'] . ' 400 Bad Request', true, 400 ); die( 'Персонаж с ником ' . $char_name . ' не найден!' ); } $owner_id = $char['obj_Id']; $count = ( int ) ( $ik_am / ITEM_PRICE ); // TODO: floor || ceil $description = 'Interkassa payment id #' . $ik_pm_no; $sql = "INSERT INTO `items_delayed` ( `payment_id`, `owner_id`, `item_id`, `count`, `payment_status`, `description` ) VALUES ( ?, ?, ?, ?, ?, ? )"; if ( !$db->prepareAndExecute( $sql, [ $ik_pm_no, $owner_id, ITEM_ID, $count, 0, $description ] )->rowCount() ) { header( $_SERVER['SERVER_PROTOCOL'] . ' 400 Bad Request', true, 400 ); die( 'Платеж #' . $ik_pm_no . ' не принят!' ); } // code 200 echo 'success'; ?> sha256 сверь Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
AM0S 16 Опубликовано 26 апреля, 2022 7 часов назад, BlooDLucifer сказал: sha256 сверь Да стоит тоже самое. Меняю на md5 и все равно эта ошибка... Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
BlooDLucifer 26 Опубликовано 26 апреля, 2022 39 минут назад, AM0S сказал: Да стоит тоже самое. Меняю на md5 и все равно эта ошибка... Ссылка на статью мб поможет я щас в командировке не за компом https://i-am-the-world.livejournal.com/38829.html Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
gawric 49 Опубликовано 26 апреля, 2022 (изменено) Я платежные системы не подключал. Но может попробовать использовать что-то типа PostMan и попробовать поиграть с параметрами и шифрованием? а уже исходят из этого можно будет сделать вывод, что такого этот код шлет корявого...... Изменено 26 апреля, 2022 пользователем gawric Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
BlooDLucifer 26 Опубликовано 26 апреля, 2022 Там весь вопрос алгоритме и ключе и все. Хабр 22год я ставил ее в том году алгоритмы перепроверь. И РАЗРЕШЕНИЯ Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
lvlkoo 190 Опубликовано 26 апреля, 2022 С ключами может чтото напутали. Там есть 2 ключа, реальный и тестовый, при использовании тестового метода оплаты соотвественно там будет генерация с использованием тестового ключа, так же убедитесь что выбран правильный алгоритм Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
AM0S 16 Опубликовано 26 апреля, 2022 меня смущает то что в тестовом клче просит валюту а в обычном ничего.... <?php // Идентификатор кассы define( 'CHECKOUT_ID', '6263c51c9a684678943a16tt' ); // Секретный ключ define( 'SECRET_KEY', 'tTyd4f46hkaiTTYew' ); // Тестовый ключ define( 'TEST_KEY', 'd3mWvktopPP0gRt' ); define( 'CURRENCY', 'USD' ); define( 'DESCRIPTION', 'Добровольное пожертвование' ); // ID выдаваемого предмета define( 'ITEM_ID', 4037 ); // Стоимость одного предмета define( 'ITEM_PRICE', 1 ); // Конфиг подключения к игровой бд $config = [ [ 'dbhost' => '45.90.201.154', 'dbuser' => 'syto', 'dbpass' => 'makdonald', 'dbname' => 'inter', 'dbport' => 3306 ], ]; ?> Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты