Всем доброго времени! Я ещё только учусь, Пробую написать модуль оплаты картами через эквайринг Газпромбанка, понемногу продвигаюсь, но сейчас не могу найти информацию в Интернет, как принять ответ на 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 сертификатом, и отправить ответ обратно (что платеж принят), подписав его этим сертификатом!!! В общем, парни, помогите разобраться!
Не знаю насчёт именно газпром банка, но обычно работа идёт по следующему алгоритму: Форма методом POST или GET сабмитится в браузере, чтоб перенаправить пользователя на страницу плат. системы (банка) Пользователь вводит необходимые данные (например, номер карты) Плат. система проводит платёж, и скрыто сообщает твоему сайту про результат. Для этого и используется тот или иной алгоритм подписи, и вызов происходит с сервера плат. системы на сервер твоего сайта. В настройках это может называться урл взаимодействия, колбэк урл или что-то в этом роде. Одновременно плат. система перенаправляет пользователя на страничку твоего сайта, соответствующую успешному или провальному платежу --- Добавлено --- У этого газпрома открытой доки нету, что-ли? Чтоб не регаясь, почитать
Всё верно, 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 А дальше в консоли браузера можно посмотреть что отвечает банк
Не получается сам ответ забрать, ... Сайт готовит исходные данные о платеже, потом эти данные отправляются в форму. Плательщик наживает на кнопочку в форме, его переадресует на URL платежного шлюза, вся обработка там происходит. Это в форме какой то код нужно разместить? Или в скрипте функция должна быть? Примеров такого сценария, не нашел.
Вы выборочно читаете? В общем случае любые GET данные - получают именно так (так был ваш вопрос сформулирован) уважаемый mkramer вам разжевал что и как .... Делать нужно по документации от АПИ платежного ошлюза
Добрый день! С Газпромбанком не работал, но подлючал другие платёжные системы. Обычно у всех бывает оплата через форму. Работает это так: 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: function checkResponseStatusSignature($response){ $token_string= ""; foreach(["tid", "txn_secret", "status"] as $k) $token_string .= $response[$k]; $token_string .= strrev(payment_access_key); $SHASign = hash('sha256', $token_string); return $SHASign === $response['checksum']; } Удачи!
Может я конечно и выборочно читаю документацию, но уважаемый mkramer, тоже заострил внимание на том что "как у Газпромбанка не знает", попросил документацию. mkramer написал правильно, обычно так и бывает у других банков. Например СБЕР, МКБ, Т-Банк, VRBank. У Газпромбанка, после GET запроса инициирования платежа, открывается страница, на которой показывается лоудер. В фоновом режиме, нужно получить ответ банка, где он передает данные (tiken, trxId, ...) и отправить ему ответ. Только тогда откроется форма ввода данных карты Причем, первый запрос идет на https://lt.pga.gazprombank.ru/pages/? и там переадресуется на https://lt.pga.gazprombank.ru/pages/bill?
У других платежных систем именно так! У ГПБ по другому. Сигнатуру не вычисляем сразу,... передаем 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?
KNS, может быть урл для проверки платежа нужно в настройках твоего кабинета мерчанта указать, который ГПБ тебе сделал, и на него ловить тот самый запрос проверки, и если запроса нет, то это косяк банка, надо с ним выяснить почему запроса нет. Есть ли в кабинете такие настройки?
по п.2: У ГПБ после регистрации и логина должны открываться формуляры для ввода настроек, в том числе там должны быть заданы все URL на Вашем домене, куда они должны отправлять response. Причём для основной среды и для песочницы. Верно? Если эти адреса есть, то нужно проверить приходят ли туда response. Знаете как? И ещё вопоос.Вы используете какую-то shop-систему или сами пишите? Обычно для shop-систем дают инструкции по подключению платежей.
При первичном согласовании тестовой среды 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
У Вас проблема с Url тестовой среды для response. С https://nanaca.ru/vircgpb/payment_page происходит редирект на стартовую страницу сайта т.е. на https://nanaca.ru/ У Вас на сервере в дир. payment_page д. б. файл index.php, в котором должен обрабатываться response. Советую создать в payment_page папку debug. Для проверки response в index.php вставить функцию PHP: function debug_save($str, $str2="",$dir=""){ $datei = date("Ymd_His"); if($str2 != "") $datei .= "__"; $datei .= $str2; if($dir == "") $dir = "debug"; $file_name = $dir."/".$datei.".txt"; $str = $_SERVER['SCRIPT_FILENAME']."\n".$str; $fp = fopen($file_name,'w'); flock($fp, 2); fputs($fp, $str); flock($fp, 3); fclose($fp); } Сохраните response и проверьте, файл в папке debug. Удачи!
У Вас на сервере в дир. payment_page д. б. файл index.php, в котором должен обрабатываться response. Нет такого файла, и нет такой дир. Есть дир. https://nanaca.ru/vircgpb , в которой есть файл vircgpb.module В нем задается страница /vircgpb/payment_page, и могут быть любые другие... по необходимости. Например, сейчас ещё заданы vircgpb/success и vircgpb/failure В общем, используем Drupal7 в данный момент, но только как носитель наших модулей, которые работают самостоятельно. Могут и без друпала обойтись! Нам так проще было сделать, и использовать готовые инструменты друпал для обслуживания, seo, темизации...
Если у Вас определён Url, на который платёжный сервис отправляется response, и этот Url, ввести в адресную строку браузера, то должен вызыватьься скрипт обработчик. У Вас это не происходит. Если ввести https://nanaca.ru/vircgpb, то вызывается скрипт и выводит OK. Это не понятно Похоже это затея не работает. Обработчик должен быть в папке payment_page
Спасибо за ваше внимание! Сейчас так и есть, не получается добавить правильный код для того чтобы получить ответ и обработать. Сейчас подготовка первого запроса выглядит так: Код (Text): // $Id$: version 0.0 $ /** * Virtual IRC GAZPROMBANK DRIVER * * Нотификация платежей через сервис GAZPROMBANK для Виртуального ИРЦ */ // //Подключение модуля к Drupal, включение url (D7) //Реально папка модуля находится: https://nanaca.ru/sites/all/modules/vircgpb // function vircgpb_menu() { $items = array(); $items['vircgpb'] = array( 'title' => 'Нотификация платежей через сервис GAZPROMBANK для Виртуального ИРЦ', 'page callback' => 'vircgpb', 'page arguments' => null, 'access arguments' => array('access content'), 'type' => MENU_CALLBACK, ); $items['vircgpb/payment_page'] = array( 'page callback' => 'vircgpb_payment_page', 'page arguments' => null, 'access arguments' => array('virc paygpb'), 'type' => MENU_CALLBACK, ); $items['vircgpb/success'] = array( 'page callback' => 'vircgpb_success', 'page arguments' => null, 'access arguments' => array('access content'), 'type' => MENU_CALLBACK, ); $items['vircgpb/failure'] = array( 'page callback' => 'vircgpb_failure', 'page arguments' => null, 'access arguments' => array('access content'), 'type' => MENU_CALLBACK, ); return $items; } // // Права доступа модуля D7 // function vircgpb_permission() { return array( 'virc paygpb' => array( 'title'=>t('Доступ к эквайрингу'), 'description'=>t('Права доступа для работы с эквайрингом через сервис GAZPROMBANK.') ), ); } // //Дальше только Virtual IRC // function vircgpb_payment_page() { global $base_url; $urlret = $base_url . (defined("VIRCABO_HOME") ? VIRCABO_HOME : '?q=vircabo'); $ret = '<a href="'.$urlret.'">Вернуться в личный кабинет</a>'; if ( empty($_GET['sid']) || empty($_GET['sid']) || empty($_GET['clientid']) ) { drupal_set_message('Неправильный запрос !','error'); return $ret; } zBaseSetConfig('vircabo'); loadConstant('PAYGPB'); $paysys = $_GET['sid']; $paysysParam = zQuery('pay_online,_pay_online', 'select', $paysys, array(), 2); if ( empty($paysys) ) { drupal_set_message('Неправильно задана платёжная система!','error'); return $ret; } else { $shop_id = $paysysParam[0]['id_shop']; $paysysSecret = zQuery('pay_online,_pay_online', 'select', $paysys, array('zlist'=>1), 2); $merch_id = $paysysParam[0]['id_product']; $cert_val = $paysysSecret[0]['oper_val']; // Попытка записать данные ssl_gpb в таблицу БД, как у модуля bitrix_gazprombank } $uid = $_GET['clientid']; $amount = round( 0 + str_replace(',', '.', $_GET['amount']), 2 ); if ( $amount <= 0 || strlen(''.$amount) > 12) { drupal_set_message('Неправильная сумма платежа!','error'); return $ret; } $pay_for = isset($_GET['pay_for']) ? $_GET['pay_for'] : '1'; //$product_name = $pay_for ? ( (defined('ZCONF') && ZCONF == '-inet') ? 'Услуги связи' : 'Коммунальные услуги') : 'Оплата пеней'; $payForList = zQuery('pay_for,_pay_online', 'select', $pay_for, array(), 1); if ( empty($payForList) ) { drupal_set_message("Неправильное назначение платежа : {$pay_for}",'error'); return $ret; } else { $product_name = $payForList[0][1]; } $bank = defined("GAZPROMBANK_BANK") ? GAZPROMBANK_BANK : 10; $payclass = defined("GAZPROMBANK_CLASS") ? GAZPROMBANK_CLASS : 4; $oper_id = !empty($_GET['oper_id']) ? $_GET['oper_id'] : (defined("ROOT_AGENT") ? ROOT_AGENT : '1'); require_once dirname(__FILE__) . '/../vircabo/zscripts/payorder-lib.php'; $order_id = virc_payorder_create($uid, $amount, $bank, $oper_id, '', $payclass, $pay_for, $paysys, $shop_id ); if ( substr($order_id, -1) == '!' ) { drupal_set_message($order_id,'error'); return $ret; } $amount = round($amount * 100); if ( !empty($paysysParam[0]['param']) ) { // комиссия с физ.лица $perc = (100 - $paysysParam[0]['param']) / 100; $amount = round($amount / $perc); } $api_gpb = 'https://lt.pga.gazprombank.ru/pages/'; require 'payform.tpl.php'; /* Дальше в ЛК virc плательщик выбирает поставщика кому хочет оплатить, соглашается с оглашением, если комиссия за платеж взимается с него, вводит сумму платежа, нажимает кнопку далее, выводится форма с кнопкой "Оплатить картой" на странице: https://nanaca.ru/vircgpb/payment_page // //Очень сильно хочу позже сделать, чтоб эта кнопка миновалась, и отправка запроса было автоматически // После переходит по известной уже url : 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 После получения token, переадресует на: 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 где в конце после # token // сейчас увидел */ На страницу payment_page подготавливаются данные для запросов в шлюз банка, на ней вызывается форма с кнопкой, для отправки GET запроса инициации платежа. В общем адрес с которого стартует платеж. Она добавлена по стандарту нашей учетной системы, для других банков название такое же, отличается только предыдущий уровень. Например: https://nanaca.ru/vircgpb/payment_page https://nanaca.ru/virctinkoff/payment_page ... Работает подготовка данных, формирует URL, выводит форму, отправляет правильный запрос. (Для других банков она генерит ещё и token) Стараюсь по стандарту делать как в других модулях для эквайринга. Обработчик ответов о результате платежа (последний этап) у нас размещается на страницах https://nanaca.ru/vircgpb Есть готовая функция которая так и называется (пример Т-Банк), её конечно нужно будет править, но принцип мне понятен. Код (Text): // // Нотификация платежа // function virctinkoff() { // debug virctinkoff_log( 'notify', true ); // $data = file_get_contents('php://input'); $response = json_decode( $data, true ); if ( !empty($response['OrderId']) ) { require_once dirname(__FILE__) . '/../vircabo/zscripts/payorder-lib.php'; $order_id = $response['OrderId']; $response_token = $response['Token']; unset($response['Token']); $response['Success'] = $response['Success'] ? "true" : "false"; // костыль //Дальше проверка ответа банка, и формирование ответа что платеж принят, или не принят У Т-Банк есть свой готовый транспортный файл, который для этой функции возвращает готовые данные $data Думаю, что сейчас можно будет дождаться получения доступа в ЛК тестовой среды и посмотреть там настройки. А пока поработать с SSL, подготовке данных в формате xml,
@Vladimir Kheifets Да, там как раз мой говнокод, который не может ответ поймать, потом срабатывает следующий сценарий, который на страницу /vircgpb/payment_page с задержкой, выдает ошибку : "Сервис не отвечает" вот скрин: https://skr.sh/sSA91OtJKvs Сначала появляется кнопка "Оплата банковской картой" потом с задержкой сообщение от Друпал : "Сервис не отвечает" Ну а на страницу https://nanaca.ru/vircgpb пустой запрос по результатам проверки вызывает exit('OK');
Добрый день! Если помните, я спрашивал про Ваш сайт самописный или используется shop-system. Я имел ввиду, что используется ли какая-нибудь CMS. Оказалось, что используется, сайт на Drupal. Поэтому Вам неодходиимо искать решения для Drupal в "паваренной книге" платёжного сервиса. Здесь они есть https://ecom.gazprombank-processing.ru/cms/drupal-8-commerce/, но посмотреть без регистрации я не смог. К сожалению, это тот случай, когда за деревьями леса не видно. Если вернуться, к тому с чего начали, то проблема в том, что Вы не получаете получаете GET-Response с токин. Попробуйте посмотреть в логах на Вашем сервере получаете ли Вы response и куда - url и какой скрипт вызывается. Удачи!
@Vladimir Kheifets Нет, там голый друпал и ни какого модуля коммерции, версия 7 а не 8, используется как готовый инструмент для SEO, дизайна Личного кабинета, вывода ошибок при отладке модуля (vircabo) для Личного кабинета не более!!! В системе 2 БД, одна Друпал сайта, вторая для Биллинга. Авторизацию, биллинг перехватывает. Наши модули работают самостоятельно между собой. Вот тут просьба, принимать мои слова более серьёзно! Я очень хорошо понимаю что такое Друпал, как с ним быть! Чтоб время даром не терять. Логов нет ни где, смотрел конечно!
Скажу проще, есть набор модулей "drupal-commerce", для разных версий Друпал (5, 6, 7, 8, 9-10) Вы говорите про эквайринг Газпромбанка для модулей commerce! Я говорю про Эквайринг для другого набора модулей, -"Виртуальный ИРЦ", которые могут работать с разными CMS, и без CMS. Зависит от сборки и настроек.
Простите, если я чем-то Вас обидел. Я отношусь ко всему, что вижу на форуме очень серьёзно и стараюсь помочь. Не имею ничего против CMS и Друпал и более того не сомневаюсь в том, что вы хорошо его понимаете. Вы описали проблему так: Повторюсь, чтобы понять, как забрать ответ, необходимо понять куда он приходит и какой скрипт его обратывает. Для того чтобы это понять нужно посмотреть логи. Какую бы CMS Вы не применили, всё функционирует на серверах и логи там всегда сохраняются. Если Вы смотрели логи и не нашли - это не означает, что их нет. Попробуйте запросить их у хостинг-провайдера.
Доброго времени! Похоже, что через форму и забирать... Погуглил, по другому запросу, "https://ya.ru/search/?text=rfr+gjjc...source=yaru_desktop_common&search_domain=yaru" Изучаю!
Добрый день Чтобы забрать что-то из формы, данные введённые в форму нужно отправить POST и GET request на url апределённый в атрибыте action. Только, если речь идет checkout-форм, которая открывается в платёжном сервисе (в которую вводятся данные плательщика), то данные из неё Вам не отправят. Или это какая-то другая форма? Советую Вам обратить внимание на url , на который платёжный сервис отпраелятся GET response, с Ваших слов это https://nanaca.ru/vircgpb/payment_page Для отправки данных клиенту с вебсервиса формы не используются. HTML формы рабатают в браузерах. Отправить данные и получить на стороне клиента можно через cUrl. Вы можете просто проверить как Вы "забираете данные" PHP: <?php $ch = curl_init('https://nanaca.ru/vircgpb/payment_page'); $response = curl_exec($ch); $info = curl_getinfo($ch); curl_close($ch); echo $info['total_time'], ' request to ', $info['url'], "<hr>"; echo $response;
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-запроса к сформированной ссылке инициализации платежа данном случае недостаточно. С уважением, ФИО Ведущий специалист отдела сопровождения эквайринга Центра сопровождения эквайринга и платежных сервисов Банка ГПБ(АО) В общем, в документации у них половины нет того что есть на самом деле...
Я уже Вам писал, у Вас нет обработчика по тому адресу, на который банк отправляет response. Предполагаю, что процессинг д.б. такой: 1. Из вашей системы отправляется запрос на платёж и вам приходит токин 2. В браeзер клиента вы отправлятся HTML c линком "Оплатить", по клику на который из JS отправляется request, в котором возвращается полученный токин. Кажется, с таким я уже сталкивался в cкандально известном Wirecard. Не хотел бы Вас огорчать, но бывает, что приходится отказываться от одного payment-провайдера и переходить к другому. Удачи!