Здравствуйте,подключаю к сайту фрикассу и столкнулся с одной проблемой.При оплате сервер фрикассы высылает данные о платеже на мой сайт в файл kassa.php(указан в настройках кассы).Данные до их серверов доходят как мне сказали в техподдержке(там есть подтверждение в скрипте-если все хорошо мой сервер отсылает "YES"),но запись в БД не происходит,вот скрипт: PHP: session_start(); $merchant_id = '321'; $merchant_secret = '123'; function getIP(){ if(isset($_SERVER['HTTP_X_REAL_IP'])) return $_SERVER['HTTP_X_REAL_IP']; else return $_SERVER['REMOTE_ADDR']; } $arr = ['176.122.74.235','136.243.38.147', '136.243.38.149', '136.243.38.150', '136.243.38.151', '136.243.38.189', '88.198.88.98']; //Проверка IP if (!in_array(getIP(), $arr)) { die("bad ip"); } //Электронная подпись $sign = $_REQUEST['MERCHANT_ID'] . ':' .$_REQUEST['AMOUNT'] . ':' .$merchant_secret . ':' .$_REQUEST['MERCHANT_ORDER_ID']; $hash = md5($sign); //Проверка электронной подписи if ($hash != $_REQUEST['SIGN']){ die('bad sign'); } //Проверка суммы платежа и запись в базу данных if ($_REQUEST['AMOUNT'] == $_SESSION['summa']){ $mysqli = mysqli_connect('','','',''); mysqli_query($mysqli,"SET NAMES 'utf8'"); $balance = $_SESSION['summa']; $usid = $_SESSION['user_id']; mysqli_query($mysqli,"UPDATE `us_inf` SET balance=balance+'{$balance}' WHERE `usid`='{$usid}' "); mysqli_close($mysqli); die('YES'); }
Посмотри что БД возвратит после запроса: PHP: if (!mysqli_query($mysqli, "твой запрос")) { printf("Errormessage: %s\n", mysqli_error($mysqli));
Ну хз тут с самого начала надо идти и проверять по цепочке. Во-первых нет никакой проверки, что соединние установлено. Проверь: PHP: if (!$mysqli) { echo "Соединения нет"; exit; } Во-вторых, если соединение есть то перед самым запросом посмотреть что лежит в этих переменных $balance и $usid, а так же проверить название таблицы и колонок на точность. Всякое бывает...
ошибок в запросе нету,уже проверял. соединение установлено,сейчас перепроверил,переменные уже тоже перепроверял сто раз
Может чушь, я с бд не особо работаю, но последняя версия моя, что косяк в том, что что ты складываешь число со строкой - balance=balance+'{$balance}' Ну и права можешь еще проверить
Вот честно говоря я вообще удивляюсь как у вас отклик yes может быть. Ибо для сервиса фрикассы никаких сессий быть не может...строгий сервис отправляет ответ... Все проверки должны быть по request. Хотите проверять сумму - делайте вопрос в бд по ид платежа и сравнивание суммы.... Никаких сессий. Не верите - сделайте логирование в текст файл переменных request and session
сессия это с моего сайта и нужна для проверки суммы,пользователь вводит сумму в форме и она попадает в сессию,затем сравнивается с тем значением,которое приходит с кассы,у них про это даже в АПИ написано,а юзер ай ди это ай ди вконтакте и тоже определяется на другой странице и нужен для определения в какую строку записать значение.Хз,может я что-то не то делаю,я ж еще зеленый в этом деле
спасибо за наводочку,без сессии реально работает,теперь осталось придумать как проверять сумму платежа)
А то спорят..... Чего там придумывать то. При отправки на оплату заносите в бд данные платежа ссылку статусом ожидает оплаты и получаете данные записи. Эту запись передаёте вместе с другими данными она же вам потом возвращается в request получаете из бд сравниваете суммы, ставите статус оплачено и делаете свои дела
Надо понимать как веб и пхп в частности работает. В общем пользователь в браузере с сессией и пользователь-сервис фрикассы который вам извещение посылает - совершенно различные пользователи и у каждого своя сессия.. у фрикассы она пустая. Иначе б можно было воровать данные сессий