This commit is contained in:
lizandrogd
2025-05-30 19:40:26 -05:00
parent 31483591f1
commit 65d6361ea7
5 changed files with 367 additions and 0 deletions
+69
View File
@@ -79,6 +79,16 @@ type PlanUpdated struct {
ErrorURL string `json:"error_url"` // Redirect URL on payment error
}
type PagoRequest struct {
Currency string `json:"currency"`
Amount int `json:"amount"`
OrderID int `json:"order_id"`
Description string `json:"description"`
SuccessURL string `json:"success_url"`
BackURL string `json:"back_url"`
NotificationURL string `json:"notification_url"`
}
// Llama al endpoint /v1/me de DLocal usando la configuración
func GetDLocalMe(cfg dlocalConfig) ([]byte, error) {
// Determinar URL base según el modo
@@ -462,3 +472,62 @@ func SeeSubscription(cfg models.DlocalApi, subscriptionId string, invoiceId stri
return body, nil
}
func CreatePago(cfg models.DlocalApi, pago PagoRequest) ([]byte, error) {
// Determinar la URL base y credenciales
baseURL := cfg.UrlDev
AccessKeyID := cfg.AccessKeyIDdev
AccessKeySecret := cfg.AccessKeySecretdev
if cfg.Modo == "prod" {
baseURL = cfg.UrlProd
AccessKeyID = cfg.AccessKeyID
AccessKeySecret = cfg.AccessKeySecret
}
// URL del endpoint de pagos
url := baseURL + "/v1/payments"
// Token de autenticación
authToken := fmt.Sprintf("Bearer %s:%s", AccessKeyID, AccessKeySecret)
// Convertir el cuerpo de la solicitud a JSON
requestBody, err := json.Marshal(pago)
if err != nil {
return nil, fmt.Errorf("error al convertir el cuerpo de la solicitud a JSON: %v", err)
}
// Crear la solicitud HTTP
req, err := http.NewRequest("POST", url, bytes.NewBuffer(requestBody))
if err != nil {
return nil, fmt.Errorf("error al crear la solicitud: %v", err)
}
// Encabezados
req.Header.Set("Content-Type", "application/json")
req.Header.Set("Authorization", authToken)
// Cliente HTTP con timeout
client := &http.Client{
Timeout: 30 * time.Second,
}
// Ejecutar la solicitud
resp, err := client.Do(req)
if err != nil {
return nil, fmt.Errorf("error al enviar la solicitud: %v", err)
}
defer resp.Body.Close()
// Leer la respuesta
responseBody, err := ioutil.ReadAll(resp.Body)
if err != nil {
return nil, fmt.Errorf("error al leer la respuesta: %v", err)
}
// Verificar si la respuesta fue exitosa
if resp.StatusCode != http.StatusOK && resp.StatusCode != http.StatusCreated {
return nil, fmt.Errorf("error en la respuesta de DLocal: %s", string(responseBody))
}
return responseBody, nil
}