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

Есть ли опыт интеграции с внешними сервисами (банки, платёжные шлюзы, API)?

Компании, где спрашивали
X5

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

sobes.tech AI

Да, опыт интеграции с внешними сервисами в Go обычно включает работу с REST API банков и платёжных шлюзов через HTTP-клиенты, обработку JSON/XML, аутентификацию (OAuth, API-ключи), а также обработку ошибок и таймаутов.

Пример интеграции с платёжным API:

package main

import (
    "bytes"
    "encoding/json"
    "fmt"
    "net/http"
    "time"
)

type PaymentRequest struct {
    Amount   float64 `json:"amount"`
    Currency string  `json:"currency"`
    CardID   string  `json:"card_id"`
}

type PaymentResponse struct {
    Status  string `json:"status"`
    Message string `json:"message"`
}

func makePayment() error {
    reqBody := PaymentRequest{
        Amount:   100.0,
        Currency: "USD",
        CardID:   "card_123",
    }

    jsonData, err := json.Marshal(reqBody)
    if err != nil {
        return err
    }

    client := &http.Client{Timeout: 10 * time.Second}
    req, err := http.NewRequest("POST", "https://api.paymentgateway.com/pay", bytes.NewBuffer(jsonData))
    if err != nil {
        return err
    }
    req.Header.Set("Content-Type", "application/json")
    req.Header.Set("Authorization", "Bearer your_api_token")

    resp, err := client.Do(req)
    if err != nil {
        return err
    }
    defer resp.Body.Close()

    var paymentResp PaymentResponse
    if err := json.NewDecoder(resp.Body).Decode(&paymentResp); err != nil {
        return err
    }

    fmt.Println("Payment status:", paymentResp.Status)
    return nil
}

func main() {
    if err := makePayment(); err != nil {
        fmt.Println("Error making payment:", err)
    }
}

Такой подход позволяет гибко работать с внешними API, обрабатывать ответы и ошибки, а также интегрироваться с разными платёжными системами.