Sobes.tech
Senior

Wie werden wir eine Antwort vom Zahlungsanbieter erhalten? Der Interviewer schlägt vor, einen Webhook zu verwenden.

sobes.tech KI

Antwort von 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)
}

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