За последние 24 часа нас посетил 19441 программист и 1632 робота. Сейчас ищут 1205 программистов ...

Как принять ответ на GET запрос через форму

Тема в разделе "PHP для новичков", создана пользователем KNS, 11 окт 2024.

  1. KNS

    KNS Новичок

    С нами с:
    12 авг 2024
    Сообщения:
    16
    Симпатии:
    0
    Всем доброго времени!
    Я ещё только учусь,
    Пробую написать модуль оплаты картами через эквайринг Газпромбанка, понемногу продвигаюсь, но сейчас не могу найти информацию в Интернет, как принять ответ на GET запрос.
    Запрос отправляется через html форму, срабатывает скрипт на стороне сервера куда отправлен запрос, в ответ доступны такие данные:

    Заголовки ответа
    POST
    scheme https
    host lt.pga.gazprombank.ru
    filename /api/v4/5BAE2814BB16ED0AA4A146AA4A4E168D/payment/5KBPHWUVD3BFMX1Y/start
    Адрес 195.225.39.51:443
    Состояние 200
    OK
    ВерсияHTTP/1.1
    Передано 878 б (размер 577 б)
    Referrer policystrict-origin-when-cross-origin
    Поиск в DNS Система

    Access-Control-Allow-Origin *
    Cache-Control no-cache
    Connection keep-alive
    Content-Length 577
    Content-Type application/json; charset=UTF-8
    Date Thu, 10 Oct 2024 18:21:26 GMT
    Expires Thu, 10 Oct 2024 18:21:25 GMT
    Server nginx
    Strict-Transport-Security max-age=1800

    Accept application/json, text/plain, */*
    Accept-Encoding gzip, deflate, br, zstd
    Accept-Language ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3
    Connection keep-alive
    Content-Length 534
    Content-Type application/x-www-form-urlencoded; charset=UTF-8
    Host lt.pga.gazprombank.ru
    Origin https://lt.pga.gazprombank.ru
    Referer https://lt.pga.gazprombank.ru/pages...r_id=70500770-7F72ED2250C4C5B97967-1010212119
    Sec-Fetch-Dest empty
    Sec-Fetch-Mode cors
    Sec-Fetch-Site same-origin
    User-Agent Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:131.0) Gecko/20100101 Firefox/131.0
    X-Requested-With XMLHttpRequest

    Ответ

    token "5KBPHWUVD3BFMX1Y"
    startedAt 1728584486181
    finishedAt 1728584486470
    state "result"
    remoteAddress "81.25.51.231"
    params Object { order_id: "70500770-7F72ED2250C4C5B97967-1010212119" }
    order_id "70500770-7F72ED2250C4C5B97967-1010212119"
    merchant Object { name: "«Поставщик№1»", logoUrl: "/merch-logo/default.png", url: "https://nanaca.ru/" }
    name "«Поставщик№1»"
    logoUrl "/merch-logo/default.png"
    url "https://nanaca.ru/"
    result Object { status: "FAILED", extendedCode: "CPA_FAILED", trxId: "5KBPHWUVD3", … }
    status "FAILED"
    extendedCode "CPA_FAILED"
    trxId "5KBPHWUVD3"
    orderStatus "REGISTRATION_ATTEMPTS_EXHAUSTED"
    orderStatusChangedAt 1728584486470
    portalType "WEB"
    type "ACQUIRING"
    options Object { failedBackUrl: "https://nanaca.ru/lk" }
    failedBackUrl "https://nanaca.ru/lk"


    token "5KBPHWUVD3BFMX1Y"
    startedAt 1728584486181
    finishedAt 1728584486470
    state "result"
    remoteAddress "81.25.51.231"
    params Object { order_id: "70500770-7F72ED2250C4C5B97967-1010212119" }
    order_id "70500770-7F72ED2250C4C5B97967-1010212119"
    merchant Object { name: "«Поставщик№1»", logoUrl: "/merch-logo/default.png", url: "https://nanaca.ru/" }
    name "«Поставщик№1»"
    logoUrl "/merch-logo/default.png"
    url "https://nanaca.ru/"
    result Object { status: "FAILED", extendedCode: "CPA_FAILED", trxId: "5KBPHWUVD3", … }
    status "FAILED"
    extendedCode "CPA_FAILED"
    trxId "5KBPHWUVD3"
    orderStatus "REGISTRATION_ATTEMPTS_EXHAUSTED"
    orderStatusChangedAt 1728584486470
    portalType "WEB"
    type "ACQUIRING"
    options Object { failedBackUrl: "https://nanaca.ru/lk" }
    failedBackUrl "https://nanaca.ru/lk"

    По сценарию, необходимо получить значения:
    token "5KBPHWUVD3BFMX1Y"
    trxId "5KBPHWUVD3"
    order_id "70500770-7F72ED2250C4C5B97967-1010212119"

    В ответ передать в формате xml, данные о платеже (token, order_id, trxId, сумма, ФИО, какая Услуга или Товар,...)

    Затем, отобразится форма ввода данных пластиковой карты, ...
    (в данном случае, ответ адресат в формате xml не получил... )

    Потом ещё немного кода отдельного предвидится...
    Например, расшифровать подпись следующего ответа, подписанного SLL сертификатом, и отправить ответ обратно (что платеж принят), подписав его этим сертификатом!!!

    В общем, парни, помогите разобраться!
     
    #1 KNS, 11 окт 2024
    Последнее редактирование: 11 окт 2024
  2. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.579
    Симпатии:
    1.759
    Не знаю насчёт именно газпром банка, но обычно работа идёт по следующему алгоритму:
    1. Форма методом POST или GET сабмитится в браузере, чтоб перенаправить пользователя на страницу плат. системы (банка)
    2. Пользователь вводит необходимые данные (например, номер карты)
    3. Плат. система проводит платёж, и скрыто сообщает твоему сайту про результат. Для этого и используется тот или иной алгоритм подписи, и вызов происходит с сервера плат. системы на сервер твоего сайта. В настройках это может называться урл взаимодействия, колбэк урл или что-то в этом роде.
    4. Одновременно плат. система перенаправляет пользователя на страничку твоего сайта, соответствующую успешному или провальному платежу
    --- Добавлено ---
    У этого газпрома открытой доки нету, что-ли? Чтоб не регаясь, почитать
     
  3. KNS

    KNS Новичок

    С нами с:
    12 авг 2024
    Сообщения:
    16
    Симпатии:
    0
    Всё верно,
    1. Первый запрос GET,
    2. Между вашими 1 и 2 пунктом есть проверка доступности платежа,
    3. В ответ на неё нужно снова послать данные о платеже, с полученным на первом этапе token, в формате xml POST, потом только откроется форма ввода данных карты,
    4. Потом придет подтверждение платежа,
    5. Ответ банку, что платеж зарегистрирован.

    Документация: https://nanaca.ru/td_gpb.7z
    В ней по документу Payguide_Acquirer_4_Описание_взаимодействия_с_магазином_ГПБ_v1_36,
    остановился на пункте 6.4.1 (Проверка доступности платежа в магазине)

    У Газпромбанка устроено так, что можно послать ссылку на платеж, по этому как я понял, и появился этот промежуточный этап "Проверка доступности платежа".
    Вот ссылка на платеж:
    https://lt.pga.gazprombank.ru/pages...2ED2250C4C5B97967-1010212119#6GNO6J49DR8DH04V

    А дальше в консоли браузера можно посмотреть что отвечает банк
     
  4. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.853
    Симпатии:
    748
    Адрес:
    Татарстан
    в общем .... $_GET['параметр']
     
  5. KNS

    KNS Новичок

    С нами с:
    12 авг 2024
    Сообщения:
    16
    Симпатии:
    0
    Не получается сам ответ забрать, ...
    Сайт готовит исходные данные о платеже, потом эти данные отправляются в форму.
    Плательщик наживает на кнопочку в форме, его переадресует на URL платежного шлюза, вся обработка там происходит.
    Это в форме какой то код нужно разместить? Или в скрипте функция должна быть?
    Примеров такого сценария, не нашел.
     
  6. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.853
    Симпатии:
    748
    Адрес:
    Татарстан
    Вы выборочно читаете? В общем случае любые GET данные - получают именно так (так был ваш вопрос сформулирован)
    уважаемый mkramer вам разжевал что и как ....
    Делать нужно по документации от АПИ платежного ошлюза
     
  7. Vladimir Kheifets

    Vladimir Kheifets Новичок

    С нами с:
    23 сен 2023
    Сообщения:
    424
    Симпатии:
    79
    Адрес:
    Бавария, Германия
    Добрый день!

    С Газпромбанком не работал, но подлючал другие платёжные системы.
    Обычно у всех бывает оплата через форму.
    Работает это так:

    1. При регистрации в платёжной системе клиент получает секретый ключ.

    2. В документации определяется как вычислять сигнатуру для запросов и ответов
    с использованием этого ключа.

    3. Для оплаты на сервис отправлются данные, например, GET-Request order_id, сумма, имя плательщика и.т.д. и сигнатура вычисленная по описанным в документации правилам.

    4. Сервис получив Request проверяет сигнатуру и в случае успеха открывает форму оплаты.

    5. Плательщик вводит данные и нажимает кнопку оплатить.

    6. Сервис обрабатывает платёж и отправляет
    GET-Response на URL клиента зарегистрированый на сервисе (бывает несколько URL для успешной оплаты и для других случаев)

    7. Теперь ответ на Ваш вопрос.
    Получив GET-Response на URL, необходимо его обработать.
    Для начала нужно проверить статус.
    В Вашем случае показан status "FAILED" т.е. оплата не прошла.
    Если status "SUCCESS", нужно вычислить сигнатуру, используя секретный ключ и значения GET параметров
    (только тех, которые указаны в документации).
    В том случае, если вычисленная сигнатура совпадёт с сигнатурой переданной в GET параметре,
    платёж акцептируется.
    Например, так проверяется сигнатура в платёжной системе Novalnet
    PHP:
    1. function checkResponseStatusSignature($response){
    2.   $token_string= "";
    3.   foreach(["tid", "txn_secret", "status"] as $k) $token_string .= $response[$k];
    4.   $token_string .= strrev(payment_access_key);
    5.   $SHASign = hash('sha256', $token_string);
    6.   return $SHASign === $response['checksum'];
    7. }
    Удачи!
     
    #7 Vladimir Kheifets, 11 окт 2024
    Последнее редактирование: 11 окт 2024
  8. KNS

    KNS Новичок

    С нами с:
    12 авг 2024
    Сообщения:
    16
    Симпатии:
    0
    Может я конечно и выборочно читаю документацию, но уважаемый mkramer, тоже заострил внимание на том что "как у Газпромбанка не знает", попросил документацию.
    mkramer написал правильно, обычно так и бывает у других банков. Например СБЕР, МКБ, Т-Банк, VRBank.

    У Газпромбанка, после GET запроса инициирования платежа, открывается страница, на которой показывается лоудер.
    В фоновом режиме, нужно получить ответ банка, где он передает данные (tiken, trxId, ...) и отправить ему ответ.
    Только тогда откроется форма ввода данных карты

    Причем, первый запрос идет на https://lt.pga.gazprombank.ru/pages/? и там переадресуется на https://lt.pga.gazprombank.ru/pages/bill?
     
  9. KNS

    KNS Новичок

    С нами с:
    12 авг 2024
    Сообщения:
    16
    Симпатии:
    0
    У других платежных систем именно так!
    У ГПБ по другому.
    Сигнатуру не вычисляем сразу,...
    передаем GET запросом данные:
    1. идентификатор ЮЛ в банке (merchant_id)
    страницы ответов о результате платежа (success и failure)
    идентификатор платежа в магазине (o.order_id)
    2. затем банк присылает "запрос проверки платежа", в котором есть параметры:
    merch_id, trx_id, o.order_id (так сказано в документации)
    Со слов поддержки ещё и token, который должен добавляться во все остальные ответы магазина
    Это всё только первая фаза, для того чтоб открылась форма ввода данных карты.

    Не получается поймать этот "запрос проверки платежа"
    Может потому что отправляю первичный запрос на https://lt.pga.gazprombank.ru/pages/? а там переадресуется на https://lt.pga.gazprombank.ru/pages/bill?
     
  10. amberson

    amberson Активный пользователь

    С нами с:
    23 июл 2020
    Сообщения:
    65
    Симпатии:
    16
    KNS, может быть урл для проверки платежа нужно в настройках твоего кабинета мерчанта указать, который ГПБ тебе сделал, и на него ловить тот самый запрос проверки, и если запроса нет, то это косяк банка, надо с ним выяснить почему запроса нет.
    Есть ли в кабинете такие настройки?
     
  11. Vladimir Kheifets

    Vladimir Kheifets Новичок

    С нами с:
    23 сен 2023
    Сообщения:
    424
    Симпатии:
    79
    Адрес:
    Бавария, Германия
    по п.2:
    У ГПБ после регистрации и логина должны открываться формуляры для ввода настроек, в том числе там должны
    быть заданы все URL на Вашем домене, куда они должны отправлять response.
    Причём для основной среды и для песочницы. Верно?
    Если эти адреса есть, то нужно проверить приходят ли туда response. Знаете как?
    И ещё вопоос.Вы используете какую-то shop-систему или сами пишите?
    Обычно для shop-систем дают инструкции по подключению платежей.
     
    #11 Vladimir Kheifets, 11 окт 2024
    Последнее редактирование: 11 окт 2024
  12. KNS

    KNS Новичок

    С нами с:
    12 авг 2024
    Сообщения:
    16
    Симпатии:
    0
    При первичном согласовании тестовой среды Url для response просили указать один: https://nanaca.ru/vircgpb/payment_page
    (У заказчика запросил неделю назад туда доступ для проверки Url, но как всегда в МУПах тормозят с этим)
    В основную среду не просили пока.
    Пробую конечно проверить, приходит ли response ... В коде что ни пробовал, не могу увидеть ответ.
    В логах веб сервера тоже нет запросов от банка. (он же должен на Url отправлять?)
    Тем не менее, если перейти по ссылке: https://lt.pga.gazprombank.ru/pages...2ED2250C4C5B97967-1010212119#6GNO6J49DR8DH04V
    то в результате на этом адресе можно увидеть как скрипты на сервере банка последовательно отрабатывают сценарий получения token для этого платежа, ждут некоторое время ответа от нашего сайта, не дождавшись выкидывают ответ "FAILED".
    Мы не используем ни какую shop-систему, точнее сказать есть своя учётная система, которая работает с другими банками (Т-Банк, СБЕР, МКБ).
    Наша система достаточно сложная, чтоб быстро понять её работу для формирования запросов к банку, и фиксированию положительного результата платежа. Что это за система, можно посмотреть демку "конфигурации" Расчетный центр ЖКХ https://demo.rcgkh.ru
     
  13. Vladimir Kheifets

    Vladimir Kheifets Новичок

    С нами с:
    23 сен 2023
    Сообщения:
    424
    Симпатии:
    79
    Адрес:
    Бавария, Германия
    У Вас проблема с Url тестовой среды для response.
    С https://nanaca.ru/vircgpb/payment_page происходит редирект на стартовую страницу сайта т.е. на https://nanaca.ru/
    У Вас на сервере в дир. payment_page д. б. файл index.php, в котором должен обрабатываться response.
    Советую создать в payment_page папку debug.
    Для проверки response в index.php вставить функцию
    PHP:
    1. function debug_save($str, $str2="",$dir=""){
    2.     $datei = date("Ymd_His");
    3.     if($str2 != "") $datei .= "__";
    4.     $datei .= $str2;
    5.     if($dir == "")  $dir = "debug";
    6.     $file_name = $dir."/".$datei.".txt";
    7.     $str = $_SERVER['SCRIPT_FILENAME']."\n".$str;
    8.     $fp = fopen($file_name,'w');
    9.     flock($fp, 2);
    10.     fputs($fp, $str);
    11.     flock($fp, 3);
    12.     fclose($fp);
    13. }
    Сохраните response и проверьте, файл в папке debug.
    Удачи!
     
  14. KNS

    KNS Новичок

    С нами с:
    12 авг 2024
    Сообщения:
    16
    Симпатии:
    0
    У Вас на сервере в дир. payment_page д. б. файл index.php, в котором должен обрабатываться response.
    Нет такого файла, и нет такой дир.
    Есть дир. https://nanaca.ru/vircgpb , в которой есть файл vircgpb.module В нем задается страница /vircgpb/payment_page, и могут быть любые другие... по необходимости. Например, сейчас ещё заданы vircgpb/success и vircgpb/failure
    В общем, используем Drupal7 в данный момент, но только как носитель наших модулей, которые работают самостоятельно. Могут и без друпала обойтись! Нам так проще было сделать, и использовать готовые инструменты друпал для обслуживания, seo, темизации...
     
  15. Vladimir Kheifets

    Vladimir Kheifets Новичок

    С нами с:
    23 сен 2023
    Сообщения:
    424
    Симпатии:
    79
    Адрес:
    Бавария, Германия
    Если у Вас определён Url, на который платёжный сервис отправляется response, и этот Url, ввести в адресную строку браузера, то должен вызыватьься скрипт обработчик.
    У Вас это не происходит. Если ввести https://nanaca.ru/vircgpb, то вызывается скрипт и выводит OK.

    Это не понятно
    Похоже это затея не работает.
    Обработчик должен быть в папке payment_page
     
    #15 Vladimir Kheifets, 12 окт 2024
    Последнее редактирование: 12 окт 2024
  16. KNS

    KNS Новичок

    С нами с:
    12 авг 2024
    Сообщения:
    16
    Симпатии:
    0
    Спасибо за ваше внимание!
    Сейчас так и есть, не получается добавить правильный код для того чтобы получить ответ и обработать.
    Сейчас подготовка первого запроса выглядит так:

    Код (Text):
    1.  
    2. // $Id$: version 0.0 $
    3. /**
    4. * Virtual IRC GAZPROMBANK DRIVER
    5. *
    6. * Нотификация платежей через сервис GAZPROMBANK для Виртуального ИРЦ
    7. */
    8. //
    9. //Подключение модуля к Drupal, включение url (D7)
    10. //Реально папка модуля находится: https://nanaca.ru/sites/all/modules/vircgpb
    11. //
    12. function vircgpb_menu() {
    13.   $items = array();
    14.     $items['vircgpb'] = array(
    15.       'title' => 'Нотификация платежей через сервис GAZPROMBANK для Виртуального ИРЦ',
    16.       'page callback' => 'vircgpb',
    17.       'page arguments' => null,
    18.       'access arguments' => array('access content'),
    19.       'type' => MENU_CALLBACK,
    20.     );
    21.     $items['vircgpb/payment_page'] = array(
    22.       'page callback' => 'vircgpb_payment_page',
    23.       'page arguments' => null,
    24.       'access arguments' => array('virc paygpb'),
    25.       'type' => MENU_CALLBACK,
    26.     );
    27.     $items['vircgpb/success'] = array(
    28.       'page callback' => 'vircgpb_success',
    29.       'page arguments' => null,
    30.       'access arguments' => array('access content'),
    31.       'type' => MENU_CALLBACK,
    32.     );
    33.     $items['vircgpb/failure'] = array(
    34.       'page callback' => 'vircgpb_failure',
    35.       'page arguments' => null,
    36.       'access arguments' => array('access content'),
    37.       'type' => MENU_CALLBACK,
    38.     );
    39.   return $items;
    40. }
    41. //
    42. // Права доступа модуля D7
    43. //
    44. function vircgpb_permission() {
    45.     return array(
    46.         'virc paygpb' => array(
    47.             'title'=>t('Доступ к эквайрингу'),
    48.             'description'=>t('Права доступа для работы с эквайрингом через сервис GAZPROMBANK.')
    49.         ),
    50.     );
    51. }
    52. //
    53. //Дальше только Virtual IRC
    54. //
    55. function vircgpb_payment_page() {
    56.   global $base_url;
    57.     $urlret = $base_url . (defined("VIRCABO_HOME") ? VIRCABO_HOME : '?q=vircabo');
    58.     $ret = '<a href="'.$urlret.'">Вернуться в личный кабинет</a>';  
    59.  
    60.     if ( empty($_GET['sid']) || empty($_GET['sid']) || empty($_GET['clientid']) ) {
    61.         drupal_set_message('Неправильный запрос !','error');
    62.         return $ret;          
    63.     }
    64.     zBaseSetConfig('vircabo');
    65.     loadConstant('PAYGPB');
    66.     $paysys = $_GET['sid'];
    67.     $paysysParam = zQuery('pay_online,_pay_online', 'select', $paysys, array(), 2);
    68.     if ( empty($paysys) ) {
    69.         drupal_set_message('Неправильно задана платёжная система!','error');
    70.         return $ret;          
    71.     } else {
    72.         $shop_id = $paysysParam[0]['id_shop'];
    73.         $paysysSecret = zQuery('pay_online,_pay_online', 'select', $paysys, array('zlist'=>1), 2);
    74.         $merch_id = $paysysParam[0]['id_product'];
    75.         $cert_val = $paysysSecret[0]['oper_val']; // Попытка записать данные ssl_gpb в таблицу БД, как у модуля bitrix_gazprombank
    76.     }
    77.     $uid = $_GET['clientid'];
    78.     $amount = round( 0 + str_replace(',', '.', $_GET['amount']), 2 );
    79.     if ( $amount <= 0 || strlen(''.$amount) > 12) {
    80.         drupal_set_message('Неправильная сумма платежа!','error');
    81.         return $ret;
    82.     }
    83.     $pay_for = isset($_GET['pay_for']) ? $_GET['pay_for'] : '1';
    84.     //$product_name = $pay_for ? ( (defined('ZCONF') && ZCONF == '-inet') ? 'Услуги связи' : 'Коммунальные услуги') : 'Оплата пеней';
    85.     $payForList = zQuery('pay_for,_pay_online', 'select', $pay_for, array(), 1);
    86.     if ( empty($payForList) ) {
    87.         drupal_set_message("Неправильное назначение платежа : {$pay_for}",'error');
    88.         return $ret;      
    89.     } else {
    90.         $product_name = $payForList[0][1];
    91.     }
    92.     $bank = defined("GAZPROMBANK_BANK") ? GAZPROMBANK_BANK : 10;
    93.     $payclass = defined("GAZPROMBANK_CLASS") ? GAZPROMBANK_CLASS : 4;
    94.     $oper_id = !empty($_GET['oper_id']) ? $_GET['oper_id'] : (defined("ROOT_AGENT") ? ROOT_AGENT : '1');
    95.  
    96.     require_once dirname(__FILE__) . '/../vircabo/zscripts/payorder-lib.php';
    97.     $order_id = virc_payorder_create($uid, $amount, $bank, $oper_id, '', $payclass, $pay_for, $paysys, $shop_id );
    98.     if ( substr($order_id, -1) == '!' ) {
    99.         drupal_set_message($order_id,'error');
    100.         return $ret;      
    101.     }
    102.     $amount = round($amount * 100);
    103.     if ( !empty($paysysParam[0]['param']) ) { // комиссия с физ.лица
    104.         $perc = (100 - $paysysParam[0]['param']) / 100;
    105.         $amount = round($amount / $perc);
    106.     }
    107.     $api_gpb = 'https://lt.pga.gazprombank.ru/pages/';
    108.     require 'payform.tpl.php';
    109. /*
    110. Дальше в ЛК virc плательщик выбирает поставщика кому хочет оплатить, соглашается с оглашением,
    111. если  комиссия за платеж взимается с него, вводит сумму платежа,
    112. нажимает кнопку далее, выводится форма с кнопкой "Оплатить картой" на странице: https://nanaca.ru/vircgpb/payment_page
    113. //
    114. //Очень сильно хочу позже сделать, чтоб эта кнопка миновалась, и отправка запроса было автоматически
    115. //
    116. После переходит по известной уже url :
    117. https://lt.pga.gazprombank.ru/pages/?language=ru&merch_id=4FFA8140A20200004C66&back_url_s=https://nanaca.ru/lk&back_url_f=https://nanaca.ru/lk&o.order_id=70500770-7F72ED2250C4C5B97967-1012114405
    118.  
    119. После получения token, переадресует на:
    120. https://lt.pga.gazprombank.ru/pages/bill?language=ru&merch_id=4FFA8140A20200004C66&back_url_s=https://nanaca.ru/lk&back_url_f=https://nanaca.ru/lk&o.order_id=70500770-7F72ED2250C4C5B97967-1012114405#8IY7FMB191PRWW8R
    121. где в конце после # token // сейчас увидел
    122. */

    На страницу payment_page подготавливаются данные для запросов в шлюз банка, на ней вызывается форма с кнопкой, для отправки
    GET запроса инициации платежа. В общем адрес с которого стартует платеж.
    Она добавлена по стандарту нашей учетной системы, для других банков название такое же, отличается только предыдущий уровень.
    Например:
    https://nanaca.ru/vircgpb/payment_page
    https://nanaca.ru/virctinkoff/payment_page
    ...

    Работает подготовка данных, формирует URL, выводит форму, отправляет правильный запрос.
    (Для других банков она генерит ещё и token)

    Стараюсь по стандарту делать как в других модулях для эквайринга.

    Обработчик ответов о результате платежа (последний этап) у нас размещается на страницах https://nanaca.ru/vircgpb
    Есть готовая функция которая так и называется (пример Т-Банк), её конечно нужно будет править, но принцип мне понятен.
    Код (Text):
    1.  
    2. //
    3. // Нотификация платежа
    4. //
    5. function virctinkoff() {
    6.  
    7.     // debug
    8.     virctinkoff_log( 'notify', true );
    9.     //
    10.     $data = file_get_contents('php://input');
    11.     $response = json_decode( $data, true );
    12.  
    13.     if ( !empty($response['OrderId']) ) {
    14.      
    15.         require_once dirname(__FILE__) . '/../vircabo/zscripts/payorder-lib.php';
    16.         $order_id = $response['OrderId'];
    17.         $response_token = $response['Token'];
    18.         unset($response['Token']);
    19.         $response['Success'] = $response['Success'] ? "true" : "false"; // костыль
    20.  
    21. //Дальше проверка ответа банка, и формирование ответа что платеж принят, или не принят
    У Т-Банк есть свой готовый транспортный файл, который для этой функции возвращает готовые данные $data

    Думаю, что сейчас можно будет дождаться получения доступа в ЛК тестовой среды и посмотреть там настройки.

    А пока поработать с SSL, подготовке данных в формате xml,
     
  17. KNS

    KNS Новичок

    С нами с:
    12 авг 2024
    Сообщения:
    16
    Симпатии:
    0
    @Vladimir Kheifets
    Да, там как раз мой говнокод, который не может ответ поймать, потом срабатывает следующий сценарий, который на страницу
    /vircgpb/payment_page с задержкой, выдает ошибку : "Сервис не отвечает"
    вот скрин: https://skr.sh/sSA91OtJKvs
    Сначала появляется кнопка "Оплата банковской картой" потом с задержкой сообщение от Друпал : "Сервис не отвечает"

    Ну а на страницу https://nanaca.ru/vircgpb пустой запрос по результатам проверки вызывает exit('OK');
     
  18. Vladimir Kheifets

    Vladimir Kheifets Новичок

    С нами с:
    23 сен 2023
    Сообщения:
    424
    Симпатии:
    79
    Адрес:
    Бавария, Германия
    Добрый день!
    Если помните, я спрашивал про Ваш сайт самописный или используется shop-system.
    Я имел ввиду, что используется ли какая-нибудь CMS.
    Оказалось, что используется, сайт на Drupal.
    Поэтому Вам неодходиимо искать решения для Drupal в "паваренной книге" платёжного сервиса.
    Здесь они есть https://ecom.gazprombank-processing.ru/cms/drupal-8-commerce/, но посмотреть без регистрации я не смог.
    К сожалению, это тот случай, когда за деревьями леса не видно.
    Если вернуться, к тому с чего начали, то проблема в том, что Вы не получаете получаете GET-Response с токин.
    Попробуйте посмотреть в логах на Вашем сервере получаете ли Вы response и куда - url и какой скрипт вызывается.
    Удачи!
     
  19. KNS

    KNS Новичок

    С нами с:
    12 авг 2024
    Сообщения:
    16
    Симпатии:
    0
    @Vladimir Kheifets

    Нет, там голый друпал и ни какого модуля коммерции, версия 7 а не 8, используется как готовый инструмент для SEO, дизайна Личного кабинета, вывода ошибок при отладке модуля (vircabo) для Личного кабинета не более!!!
    В системе 2 БД, одна Друпал сайта, вторая для Биллинга. Авторизацию, биллинг перехватывает.
    Наши модули работают самостоятельно между собой.
    Вот тут просьба, принимать мои слова более серьёзно! Я очень хорошо понимаю что такое Друпал, как с ним быть!
    Чтоб время даром не терять.

    Логов нет ни где, смотрел конечно!
     
  20. KNS

    KNS Новичок

    С нами с:
    12 авг 2024
    Сообщения:
    16
    Симпатии:
    0
    Скажу проще, есть набор модулей "drupal-commerce", для разных версий Друпал (5, 6, 7, 8, 9-10) Вы говорите про эквайринг Газпромбанка для модулей commerce!
    Я говорю про Эквайринг для другого набора модулей, -"Виртуальный ИРЦ", которые могут работать с разными CMS, и без CMS. Зависит от сборки и настроек.
     
  21. Vladimir Kheifets

    Vladimir Kheifets Новичок

    С нами с:
    23 сен 2023
    Сообщения:
    424
    Симпатии:
    79
    Адрес:
    Бавария, Германия
    Простите, если я чем-то Вас обидел.
    Я отношусь ко всему, что вижу на форуме очень серьёзно и стараюсь помочь.
    Не имею ничего против CMS и Друпал и более того не сомневаюсь в том, что вы хорошо его понимаете.

    Вы описали проблему так:
    Повторюсь, чтобы понять, как забрать ответ, необходимо понять куда он приходит и какой скрипт его обратывает.
    Для того чтобы это понять нужно посмотреть логи.
    Какую бы CMS Вы не применили, всё функционирует на серверах и логи там всегда сохраняются.
    Если Вы смотрели логи и не нашли - это не означает, что их нет.
    Попробуйте запросить их у хостинг-провайдера.
     
  22. KNS

    KNS Новичок

    С нами с:
    12 авг 2024
    Сообщения:
    16
    Симпатии:
    0
    Доброго времени!
    Похоже, что через форму и забирать...
    Погуглил, по другому запросу, "https://ya.ru/search/?text=rfr+gjjc...source=yaru_desktop_common&search_domain=yaru"
    Изучаю!
     
  23. Vladimir Kheifets

    Vladimir Kheifets Новичок

    С нами с:
    23 сен 2023
    Сообщения:
    424
    Симпатии:
    79
    Адрес:
    Бавария, Германия
    Добрый день
    Чтобы забрать что-то из формы, данные введённые в форму нужно отправить POST и GET request на
    url апределённый в атрибыте action.
    Только, если речь идет checkout-форм, которая открывается в платёжном сервисе
    (в которую вводятся данные плательщика), то данные из неё Вам не отправят.
    Или это какая-то другая форма?
    Советую Вам обратить внимание на url , на который платёжный сервис отпраелятся GET response,
    с Ваших слов это https://nanaca.ru/vircgpb/payment_page
    Для отправки данных клиенту с вебсервиса формы не используются.
    HTML формы рабатают в браузерах.
    Отправить данные и получить на стороне клиента можно через cUrl.
    Вы можете просто проверить как Вы "забираете данные"
    PHP:
    1. <?php
    2. $ch = curl_init('https://nanaca.ru/vircgpb/payment_page');
    3. $response = curl_exec($ch);
    4. $info = curl_getinfo($ch);
    5. echo  $info['total_time'], '  request to ', $info['url'], "<hr>";
    6. echo $response;
     
  24. KNS

    KNS Новичок

    С нами с:
    12 авг 2024
    Сообщения:
    16
    Симпатии:
    0
    cUrl-ом делал, оно даже не открывает форму банка.
    В заголовках следующее:

    <head>
    <meta charset="UTF-8" />
    <link rel="icon" href="favicon.ico" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta http-equiv="cache-control" content="no-cache" />
    <meta http-equiv="pragma" content="no-cache" />
    <meta http-equiv="expires" content="-1" />
    <title>Газпромбанк</title>
    <script src="settings.js"></script>
    <script type="module" crossorigin src="assets/gpb-new.ecee21da.js"></script>
    <link rel="stylesheet" href="assets/gpb-new.ab8dfd77.css">
    </head>
    Задал вопрос в банк, "Что с этим делать?"

    Ответ банка:

    Для инициализации платежа по 2-х фазному протоколу требуется переход по ссылке инициализации именно в рамках какого-либо браузера, что ведет к дальнейшему выполнению js кода и продолжению сценария транзакции.

    Обычного get-запроса к сформированной ссылке инициализации платежа данном случае недостаточно.

    С уважением,

    ФИО
    Ведущий специалист
    отдела сопровождения эквайринга
    Центра сопровождения эквайринга и платежных сервисов
    Банка ГПБ(АО)


    В общем, в документации у них половины нет того что есть на самом деле...
     
  25. Vladimir Kheifets

    Vladimir Kheifets Новичок

    С нами с:
    23 сен 2023
    Сообщения:
    424
    Симпатии:
    79
    Адрес:
    Бавария, Германия
    Я уже Вам писал, у Вас нет обработчика по тому адресу, на который банк отправляет response.
    Предполагаю, что процессинг д.б. такой:
    1. Из вашей системы отправляется запрос на платёж и вам приходит токин
    2. В браeзер клиента вы отправлятся HTML c линком "Оплатить", по клику на который из JS
    отправляется request, в котором возвращается полученный токин.
    Кажется, с таким я уже сталкивался в cкандально известном Wirecard.
    Не хотел бы Вас огорчать, но бывает, что приходится отказываться от одного payment-провайдера и переходить к другому.
    Удачи!
     
    #25 Vladimir Kheifets, 14 окт 2024
    Последнее редактирование: 14 окт 2024