Назад к вопросам
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, обрабатывать ответы и ошибки, а также интегрироваться с разными платёжными системами.