@twohundrediq

Почему нет ответа от api Альфа-банка?

Добрый вечер, есть вот такой код из документации Альфа-банка

define('USERNAME', '');
define('PASSWORD', '');
define('GATEWAY_URL', 'https://server/payment/rest/');
define('RETURN_URL', '');

/**
 * ФУНКЦИЯ ДЛЯ ВЗАИМОДЕЙСТВИЯ С ПЛАТЕЖНЫМ ШЛЮЗОМ
 *
 * Для отправки POST запросов на платежный шлюз используется
 * стандартная библиотека cURL.
 *
 * ПАРАМЕТРЫ
 *      method      Метод из API.
 *      data        Массив данных.
 *
 * ОТВЕТ
 *      response    Ответ.
 */
function gateway($method, $data) {
    $curl = curl_init(); // Инициализируем запрос
    curl_setopt_array($curl, array(
        CURLOPT_URL => GATEWAY_URL.$method, // Полный адрес метода
        CURLOPT_RETURNTRANSFER => true, // Возвращать ответ
        CURLOPT_POST => true, // Метод POST
        CURLOPT_POSTFIELDS => http_build_query($data) // Данные в запросе
    ));
    $response = curl_exec($curl); // Выполняем запрос

    $response = json_decode($response, true); // Декодируем из JSON в массив
    curl_close($curl); // Закрываем соединение
    return $response; // Возвращаем ответ
}

/**
 * ВЫВОД ФОРМЫ НА ЭКРАН
 */
if ($_SERVER['REQUEST_METHOD'] == 'GET' && !isset($_GET['orderId'])) {
    echo '
        <form method="post" action="/rest">
            <label>Order number</label><br />
            <input type="text" name="orderNumber" /><br />
            <label>Amount</label><br />
            <input type="text" name="amount" /><br />
            <button type="submit">Submit</button>
        </form>
    ';
}

/**
 * ОБРАБОТКА ДАННЫХ ИЗ ФОРМЫ
 */
else if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    $data = array(
        'userName' => USERNAME,
        'password' => PASSWORD,
        'orderNumber' => urlencode($_POST['orderNumber']),
        'amount' => urlencode($_POST['amount']),
        'returnUrl' => RETURN_URL
    );
    
    $response = gateway('register.do', $data);
    
    if (isset($response['errorCode'])) { // В случае ошибки вывести ее
        echo 'Ошибка #' . $response['errorCode'] . ': ' . $response['errorMessage'];
    } else { // В случае успеха перенаправить пользователя на платежную форму
        header('Location: ' . $response['formUrl']);
        die();
    }
}

/**
 * ОБРАБОТКА ДАННЫХ ПОСЛЕ ПЛАТЕЖНОЙ ФОРМЫ
 */
else if ($_SERVER['REQUEST_METHOD'] == 'GET' && isset($_GET['orderId'])){
    $data = array(
        'userName' => USERNAME,
        'password' => PASSWORD,
        'orderId' => $_GET['orderId']
    );
    
    $response = gateway('getOrderStatus.do', $data);

    // Вывод кода ошибки и статус заказа
    echo '
        <b>Error code:</b> ' . $response['ErrorCode'] . '<br />
        <b>Order status:</b> ' . $response['OrderStatus'] . '<br />
    ';
}

Но посоле отправки формы ничего не проиходит, хотя должно редиректить на ссылку указанную в $response['formUrl']
Пытался проверить переменную $respont, а она пустая.
Проверял работоспособность запроса с помощью сервиса от альфы, там все работало
5fac286bd18b7858780557.png

Я так понимаю проблема в curl запросе, подскажите, пожалуйста, где именно
  • Вопрос задан
  • 470 просмотров
Решения вопроса 1
@twohundrediq Автор вопроса
Проблема решена, я не указал платежный шлюз.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
402d
@402d
начинал с бейсика на УКНЦ в 1988
во первых, форма здесь в демо целях.
Во вторых тут типовая схема работы мерчанта с предварительной регистрацией оплаты.

1. Делается запрос со стороны сервера к апи.
2. Апи возвращает ссылку на которую нужно отправить пользователя.
3. пользователь на сайте платежной системы ввел все данные и нажал оплатить
4. К вашему сайту может идти запрос, готовы ли вы принять факт оплаты.
5. На который отвечаете "Да. идите денежки ко мне"
6. Мерчант запускает процедуру списания денежных средств.
7. Приходит авизо - запрос к вашему сайту, что вам поступил платеж.
7а Если не ответили утвердительно "Все верно о поступлении денег знаю", то апи с определенной переодичностью
будет пытаться повторить авизо.
8. Пользователя отправляют по ссылке обратно на ваш сайт.

ну и сбоку тут еще может быть обратный переход при неудаче оплаты.
Ответ написан
Комментировать
@pofeg
Надо заплатить. Это ж банк :)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы