Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
0 / 0 / 1
Регистрация: 24.03.2014
Сообщений: 31
1

Интернет-эквайринг. Не удается получить данные от банка

24.03.2014, 20:28. Просмотров 1806. Ответов 15
Метки нет (Все метки)


Господа, новичку нужна ваша помощь. Ситуация такая: после того, как на стороне банка клиент произвел оплату при помощи банковской карты, банк отправляет методом POST на определенный адрес сайта (например, pay_status.php) данные о проведенной операции: Код авторизации, Статус заказа, Описание статуса заказа, Дата последнего изменения статуса заказа и т.п. и соответствующие параметры (id, ticket, auth_code, status_code и пр.). Написал следующий код для приема данных от банка:

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
 
if (isset($_POST['id']))
 {
 $sum = $_POST['amount']/100;
 $amount = $sum*100;
 $card = $_POST['card_num'];
 $status = $_POST['status_desc'];
 $signature = $_POST['signature'];
 $order_number = $_POST['order_number'];
 $av_sign = *****;
 $shop_id = ****;
 $signature_check =  strtoupper(md5(strtoupper(md5($av_sign).md5($shop_id.$order_number.$amount))));
 if ($signature = $signature_check)
 {
 echo "Платеж $sum рублей
Статус: $status
";
 }
 }
 
?>
Он не работает. Не могу понять в чем причина. Можно ли как-то проверить получает ли сайт данные от банка? Необходимо ли прописывать в коде все пересылаемые параметры (банк пересылает больше, чем у меня используется в коде)?
Буду признателен за помощь. Спасибо.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.03.2014, 20:28
Ответы с готовыми решениями:

Эквайринг-для интернет магазина
Есть интернет магазин, на нем нужно осуществить оплату услуг, все сводится к тому что, мне нужно...

Не удается получить данные из <div>
Господа,есть вопрос. необходимо получить содержимое блока &lt;div&gt;, а точнее текст,без тегов(в...

Не удается получить данные из формы
Код html с формой: &lt;!DOCTYPE html&gt; &lt;html &gt; &lt;head&gt; &lt;meta http-equiv=&quot;Content-Type&quot;...

Скрипт рейтинга - не удается получить данные из БД
здравствуйте не могу разобраться с кодом скрипт рейтинга, пытался весь день решить проблему сам....

__________________
Помогаю в написании курсовых работ и дипломов здесь.
Записывайтесь на профессиональные курсы Fullstack-разработчиков на PHP‌
15
141 / 141 / 27
Регистрация: 19.12.2011
Сообщений: 250
24.03.2014, 20:52 2
Лучший ответ Сообщение было отмечено ArtemT1987 как решение

Решение

ArtemT1987, я так понимаю банк отправляет позднее автоматическое информирование на указанный вами урл, после ухода пользователя с платежного шлюза? Врятли отправляется пост в тот момент когда пользователя редиректит с платежного шлюза, вместе с ним.
Цитата Сообщение от ArtemT1987 Посмотреть сообщение
Можно ли как-то проверить получает ли сайт данные от банка?
  • сымитировать отправку данных вручную на нужный вам урл.
  • посмотреть логи доступа апача, по обращению к данному урлу, чтобы узнать, отправляет ли вообще банк вам информацию
  • дублировать в базе все данные по заказам с онлайн оплатой в отдельной сводной таблице (например, дублировать номер заказа, сумму отправленную в банк. Также добавить id процессинга, полученного после предрезерва заказа, текущий статус заказа, дату отправки пользователя на платежный шлюз, дату предавторизации средст пользователя, и тп), а потом обновлять ее, когда банк "стучится" на ваш урл
0
Эксперт по компьютерным сетямЭксперт NIX
12169 / 7046 / 715
Регистрация: 09.09.2009
Сообщений: 27,577
24.03.2014, 21:27 3
ну во первых:
Цитата Сообщение от ArtemT1987 Посмотреть сообщение
if ($signature = $signature_check)
{
echo "Платеж $sum рублей
Статус: $status
";
вы эти сообщения планируете показывать серверу банка? ему на них плевать, он свой код ответа 200 отхватит и свалит...
Цитата Сообщение от ArtemT1987 Посмотреть сообщение
Можно ли как-то проверить получает ли сайт данные от банка?
проверить лог вебсервера, есть ли обращение к вашей пхп-странице с айпишника банка.
можно попробовать логировать средствами скрипта все полученные данные например в текстовый файл
PHP
1
2
3
4
5
6
7
$logfile=fopen('test.log','w');
foreach ($_POST as $key => $value)
{
   $msg = 'параметр '.$key.' имеет значение: '.$value."\n";
   fwrite($logfile,$msg);
}
fclose($logfile);
0
0 / 0 / 1
Регистрация: 24.03.2014
Сообщений: 31
24.03.2014, 21:59  [ТС] 4
вы эти сообщения планируете показывать серверу банка? ему на них плевать, он свой код ответа 200 отхватит и свалит...
Конечно, нет. Это вариант, где я проверял работает ли скрипт...
Я правильно, понимаю, что предложенный мною скрипт должен работать, если банк отправляет данные на сайт?
0
Эксперт по компьютерным сетямЭксперт NIX
12169 / 7046 / 715
Регистрация: 09.09.2009
Сообщений: 27,577
24.03.2014, 22:10 5
Цитата Сообщение от ArtemT1987 Посмотреть сообщение
Я правильно, понимаю, что предложенный мною скрипт должен работать, если банк отправляет данные на сайт?
повторяю еще раз - когда "банк отправляет данные на сайт" - это сервер банка обращается на адрес вашего скрипта, который вы указали в настройках платежной системы. САМ сервер! ТУПО ткнется в ваш скрипт! При этом, "на сайте" ваш скрипт живет, или просто на компе, серверу платежной системы ПО БАРАБАНУ! Сервер (ПС) пришел, скрипту пост-данные скормил, свой код 200 получил и свалил! Алес!

ваш скрипт должен просто писать куда-то статус платежа, полученный от сервера ПС. и все...
0
0 / 0 / 1
Регистрация: 24.03.2014
Сообщений: 31
24.03.2014, 22:32  [ТС] 6
повторяю еще раз - когда "банк отправляет данные на сайт" - это сервер банка обращается на адрес вашего скрипта, который вы указали в настройках платежной системы. САМ сервер! ТУПО ткнется в ваш скрипт! При этом, "на сайте" ваш скрипт живет, или просто на компе, серверу платежной системы ПО БАРАБАНУ! Сервер (ПС) пришел, скрипту пост-данные скормил, свой код 200 получил и свалил! Алес!

ваш скрипт должен просто писать куда-то статус платежа, полученный от сервера ПС. и все...
Dmitry, поспокойнее, пожалуйста. Если пишу не "банк отправляет на сайт", это не значит, что я не понимаю и не подразумеваю, что сервер банка в автоматическом режиме отправляет данные на сервер интернет-магазина... Не надо мне рассказывать простые истины, ибо (1) я прочитал инструкцию банка по настройке эквайринга, (2) разобрался в процессе "что, зачем и почему", (3) написал форму отправки данных с моего сервера на сервер банка для проведения платежа. У меня не заработал скрипт, который по моему разумению должен был работать. Поскольку я первый раз делаю эквайринг, то и обратился к знающим людям: может, я чего не так прописал, может, есть какая-то "фишка", о которой не знаю.
0
Эксперт по компьютерным сетямЭксперт NIX
12169 / 7046 / 715
Регистрация: 09.09.2009
Сообщений: 27,577
24.03.2014, 23:00 7

Не по теме:

Цитата Сообщение от ArtemT1987 Посмотреть сообщение
Dmitry, поспокойнее, пожалуйста.
не надо рассказывать, что мне делать, и я не буду рассказывать, куда ходить.
Цитата Сообщение от ArtemT1987 Посмотреть сообщение
ибо (1) я прочитал инструкцию
ну если присмотреться повнимательней, то подпись - это не то, на что надо отвечать (или на это надо указать конкретно в подписи, чтоб понятней было?)



по сути.
показанный в 1-м посте скрипт - это обработчик чего? раз вы там вычисляете мд5 от параметров, то вероятно это обработчик данных, поступающих от пс, в которых передается подтверждение платежа. в таком случае этому скрипту не нужен вывод каких-то текстовых сообщений. сообщения нужно выводить юзеру, который выполняет платеж. но юзеру не надо считать мд5. в пс обычно передаются либо 2 параметра - адрес скрипта-обработчика, который потом примет от сервера служебное подтверждение, и адрес страницы, на которую должен попасть клиент после оплаты,, либо же только адрес страницы для юзера, а адрес скрипта обработчика вы просто жестко прописыаете в кабинете в настройках пс...

так вот в странице юзера вы просто проверяете статус его заказа. а сам статус ваша система принимает от пс на скрипт-обработчик (тот который считает мд5, сверяет, проверяет и т.д.)...
0
0 / 0 / 1
Регистрация: 24.03.2014
Сообщений: 31
24.03.2014, 23:13  [ТС] 8
не надо рассказывать, что мне делать, и я не буду рассказывать, куда ходить.
Не надо меня учить простым истинам и общей теории. Вы мне еще расскажите, откуда есть пошел php.
Без обид, но у Вас проблемы с самомнением, по-моему. Я Вашу подпись вообще не видел. Про инструкцию написал, потому что как правило таковые прилагаются при интеграции серверов
по сути.
показанный в 1-м посте скрипт - это обработчик чего? раз вы там вычисляете мд5 от параметров, то вероятно это обработчик данных, поступающих от пс, в которых передается подтверждение платежа. в таком случае этому скрипту не нужен вывод каких-то текстовых сообщений. сообщения нужно выводить юзеру, который выполняет платеж. но юзеру не надо считать мд5. в пс обычно передаются либо 2 параметра - адрес скрипта-обработчика, который потом примет от сервера служебное подтверждение, и адрес страницы, на которую должен попасть клиент после оплаты,, либо же только адрес страницы для юзера, а адрес скрипта обработчика вы просто жестко прописыаете в кабинете в настройках пс...

так вот в странице юзера вы просто проверяете статус его заказа. а сам статус ваша система принимает от пс на скрипт-обработчик (тот который считает мд5, сверяет, проверяет и т.д.)...
Повторяю для, видимо, уставших после рабочего дня: я знаю, для чего скрипт и как должны обрабатываться данные от сервера; вывод сообщения сделал ИСКЛЮЧИТЕЛЬНО для себя, для целей проверки работы скрипта. Мне от вас, товарищи, нужно знать правильно ли я прописал начало скрипта и получаю данные через POST, а не, например, через REQUEST (написал первое, что пришло в голову). Если код с вашей точки зрения верен и нет никаких ошибок, то так и напишите, что код верен, ищи проблемы в другом, а не рассказывайте мне теорию, что куда передается. Спасибо.
0
812 / 795 / 201
Регистрация: 21.09.2012
Сообщений: 2,653
25.03.2014, 11:53 9
Цитата Сообщение от ArtemT1987 Посмотреть сообщение
ищи проблемы в другом, а не рассказывайте мне теорию, что куда передается.
Все дело в том, что эта отправка происходит для информирования твоего сайта. Когда происходит возврат клиента на сайт, то отправка данных не происходит. В этом скрипте нужно просто записывать полученные платежи в базу данных. То что там в обработчике выводится, этого никто не увидит.
0
0 / 0 / 1
Регистрация: 24.03.2014
Сообщений: 31
25.03.2014, 14:46  [ТС] 10
Цитата Сообщение от Dolphin Посмотреть сообщение
Все дело в том, что эта отправка происходит для информирования твоего сайта. Когда происходит возврат клиента на сайт, то отправка данных не происходит. В этом скрипте нужно просто записывать полученные платежи в базу данных. То что там в обработчике выводится, этого никто не увидит.
Ребят, вы троллите что ли? Я же два раза написал, что сделал вывод сообщения, чтобы проверить работоспособность скрипта. Мне нужно было проверить, получает ли скрипт и обрабатывает ли данные от банка. Для этого сделал вывод сообщения. Если бы все сработало бы, тогда бы дописал и ответ "200" для банка и что-то типа вот этого:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
$db_host = 'localhost';
$db_name = '***';
$db_username = '***';
$db_password = '***';
$db_table_to_show = '***';
 
$connect_to_db = mysql_connect($db_host, $db_username, $db_password)
        or die("Could not connect: " . mysql_error());
 
    mysql_select_db($db_name, $connect_to_db)
        or die("Could not select DB: " . mysql_error());
 
mysql_query("UPDATE payment SET sum = '$amount' WHERE order_number='$order_number'");
mysql_close($connect_to_db);
Мой вопрос следующий был: правильно ли я написал начальную часть кода; правильно ли я получаю данные через POST, может быть, есть какой-то нюанс, о котором я не знаю. Не надо мне рассказывать, зачем этот скрипт нужен и что он должен делать. Я это знаю. Я НЕ ЗНАЮ, почему он не работает.
0
812 / 795 / 201
Регистрация: 21.09.2012
Сообщений: 2,653
25.03.2014, 14:49 11
Цитата Сообщение от ArtemT1987 Посмотреть сообщение
правильно ли я написал начальную часть кода
Создавай тогда форму и отправляй ее постом на этот скрипт. В чем проблема? Если названия полей верны, то наверно правильно
1
0 / 0 / 1
Регистрация: 24.03.2014
Сообщений: 31
25.03.2014, 15:23  [ТС] 12
Цитата Сообщение от Dolphin Посмотреть сообщение
Создавай тогда форму и отправляй ее постом на этот скрипт. В чем проблема? Если названия полей верны, то наверно правильно
Спасибо. Так и сделаю.
0
Эксперт по компьютерным сетямЭксперт NIX
12169 / 7046 / 715
Регистрация: 09.09.2009
Сообщений: 27,577
25.03.2014, 15:34 13
Цитата Сообщение от ArtemT1987 Посмотреть сообщение
проверить работоспособность скрипта
в посте #3 я тебе дал кусок кода. вставь его в свой скрипт, и стучись в него. и твой скрипт будет писать лог, а в него - все данные пост-запроса. вот и увидишь - бчто присылается, какие данные и присылаются ли они вообще...
0
0 / 0 / 1
Регистрация: 24.03.2014
Сообщений: 31
26.03.2014, 14:44  [ТС] 14
Цитата Сообщение от Dmitry Посмотреть сообщение
в посте #3 я тебе дал кусок кода. вставь его в свой скрипт, и стучись в него. и твой скрипт будет писать лог, а в него - все данные пост-запроса. вот и увидишь - бчто присылается, какие данные и присылаются ли они вообще...
Спасибо.

Добавлено через 22 часа 56 минут
Всем спасибо! Заработало!
Но проблема теперь, что серверу банка надо вернуть статус не 200, а 202. Через
PHP
1
http_response_code(202);
у меня не получилось.
0
141 / 141 / 27
Регистрация: 19.12.2011
Сообщений: 250
26.03.2014, 14:53 15
header
1
0 / 0 / 1
Регистрация: 24.03.2014
Сообщений: 31
26.03.2014, 15:01  [ТС] 16
Цитата Сообщение от Andruhin Посмотреть сообщение
header
Спасибо. Как-то не подумал. Использовал:
PHP
1
header("HTTP/1.1 202 Accepted");
Все заработало.
Тему можно закрывать. Всем спасибо!
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.03.2014, 15:01

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь или здесь.

Не удается получить данные с сервиса погоды
Добрый день. Есть небольшое приложение ASP.NET MVC, где есть : модель ,в которой реализованы классы...

CKEDITOR: не удается получить данные из формы
Всем привет! кто нибудь работал с редактором ckeditor? У меня такая проблемка, не получаеться...

Qt Mac OS, не удаётся получить данные в SQLite
Здравствуйте, уважаемые формучане, у меня такая проблема: Подключился к БД, написал запрос для...

Ошибка: Не удается получить данные схемы для таблицы или представления Клиенты.
При попытке подключить базу данных , конкретный столбец , пишет вот такую ошибку : &lt;Клиенты&gt; Не...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.