Sobes.tech
Назад к вопросам
Senior
4

Как будем получать ответ от payment провайдера? Интервьюер предлагает использовать вебхук.

Компании, где спрашивали
Магнит Тех

Ответ от нейросети

sobes.tech AI

Использование вебхука для получения ответа от payment провайдера — распространённый и удобный способ асинхронного уведомления о статусе платежа.

Как это работает:

  • Вы регистрируете на стороне провайдера URL вашего сервера (вебхук).
  • После обработки платежа провайдер отправляет HTTP POST запрос на этот URL с информацией о результате.
  • Ваш сервер принимает запрос, проверяет подпись/авторизацию для безопасности и обновляет статус платежа в системе.

Пример на Go (упрощённо):

func paymentWebhookHandler(w http.ResponseWriter, r *http.Request) {
    // Проверка метода
    if r.Method != http.MethodPost {
        http.Error(w, "Method not allowed", http.StatusMethodNotAllowed)
        return
    }

    // Чтение тела запроса
    body, err := ioutil.ReadAll(r.Body)
    if err != nil {
        http.Error(w, "Bad request", http.StatusBadRequest)
        return
    }

    // Валидация подписи (зависит от провайдера)
    if !validateSignature(r.Header, body) {
        http.Error(w, "Unauthorized", http.StatusUnauthorized)
        return
    }

    // Парсинг данных
    var paymentStatus PaymentStatus
    if err := json.Unmarshal(body, &paymentStatus); err != nil {
        http.Error(w, "Bad request", http.StatusBadRequest)
        return
    }

    // Обновление статуса платежа в базе
    updatePaymentStatus(paymentStatus)

    w.WriteHeader(http.StatusOK)
}

Таким образом, вебхук позволяет получать уведомления в реальном времени без необходимости опрашивать провайдера.