Ir al contenido

Los SDK

Hay tres clientes oficiales, en Go, Node y Python. Los tres hacen lo mismo:

  1. Autenticación con su llave.
  2. El contrato, tipado: los tipos, los enums y las rutas se generan desde este mismo OpenAPI, así que no pueden desviarse de la API.
  3. Idempotencia y reintentos seguros: cada creación lleva Idempotency-Key (la suya, o una que el SDK genera, reutiliza en cada reintento y le devuelve), y el SDK sólo reintenta lo que no puede mover dinero dos veces.
  4. Verificación de la firma de los webhooks, en tiempo constante, con ventana de reloj y sobre el cuerpo crudo.

Ninguno tiene dependencias fuera de la biblioteca estándar de su lenguaje.

Por omisión hablan con producción (https://api.tucapi.app). Para el sandbox se pasa la URL base https://api.tucapi.app/sandbox con la llave de prueba: tucapi.New("tuc_test_...", tucapi.WithBaseURL("https://api.tucapi.app/sandbox")), new TuCapi('tuc_test_...', { baseUrl: 'https://api.tucapi.app/sandbox' }), TuCapi("tuc_test_...", base_url="https://api.tucapi.app/sandbox").

Paquete Instalar Cliente
Go github.com/Yhonnyj/pagos-sdk-go/v2 go get github.com/Yhonnyj/pagos-sdk-go/v2 tucapi.New("tuc_live_...")
Node tucapi (npm) npm install tucapi new TuCapi('tuc_live_...')
Python tucapi (PyPI) pip install tucapi TuCapi("tuc_live_...")
Operación Go Node Python
GET /v2/balances c.Balances.List(ctx, …) c.balances.list(…) c.balances.list(…)
GET /v2/banks c.Banks.List(ctx, …) c.banks.list(…) c.banks.list(…)
GET /v2/capabilities c.Capabilities.Get(ctx, …) c.capabilities.get(…) c.capabilities.get(…)
GET /v2/events c.Events.List(ctx, …) c.events.list(…) c.events.list(…)
GET /v2/methods c.Methods.List(ctx, …) c.methods.list(…) c.methods.list(…)
POST /v2/payins c.Payins.Create(ctx, …) c.payins.create(…) c.payins.create(…)
GET /v2/payins/{id} c.Payins.Get(ctx, …) c.payins.get(…) c.payins.get(…)
POST /v2/payins/{id}/cancel c.Payins.Cancel(ctx, …) c.payins.cancel(…) c.payins.cancel(…)
POST /v2/payins/{id}/confirm c.Payins.Confirm(ctx, …) c.payins.confirm(…) c.payins.confirm(…)
POST /v2/payins/{id}/resend-code c.Payins.ResendCode(ctx, …) c.payins.resendCode(…) c.payins.resend_code(…)
POST /v2/payouts c.Payouts.Create(ctx, …) c.payouts.create(…) c.payouts.create(…)
GET /v2/payouts/{id} c.Payouts.Get(ctx, …) c.payouts.get(…) c.payouts.get(…)
POST /v2/payouts/{id}/cancel c.Payouts.Cancel(ctx, …) c.payouts.cancel(…) c.payouts.cancel(…)
GET /v2/transactions/{id} c.Transactions.Get(ctx, …) c.transactions.get(…) c.transactions.get(…)
POST /v2/webhook-endpoints c.WebhookEndpoints.Create(ctx, …) c.webhookEndpoints.create(…) c.webhook_endpoints.create(…)
Go
c := tucapi.New("tuc_live_...")
created, err := c.Payouts.Create(ctx, tucapi.NewPayout{
Country: "VE", Currency: "VES", Method: tucapi.MethodCodeMobilePayment, Amount: "1500.50",
Beneficiary: tucapi.Beneficiary{Name: "Ana Pérez", Document: &tucapi.Document{Type: "V", Number: "12345678"},
BankCode: "0102", AccountNumber: "04121234567"},
}, tucapi.WithIdempotencyKey("orden-4821"))
// created.IdempotencyKey es la clave que se mandó
Node
const c = new TuCapi('tuc_live_...')
const created = await c.payouts.create(
{ country: 'VE', currency: 'VES', method: 'mobile_payment', amount: '1500.50',
beneficiary: { name: 'Ana Pérez', document: { type: 'V', number: '12345678' }, bank_code: '0102', account_number: '04121234567' } },
{ idempotencyKey: 'orden-4821' },
)
// created.idempotencyKey es la clave que se mandó
Python
c = TuCapi("tuc_live_...")
created = c.payouts.create(
{"country": "VE", "currency": "VES", "method": "mobile_payment", "amount": "1500.50",
"beneficiary": {"name": "Ana Pérez", "document": {"type": "V", "number": "12345678"},
"bank_code": "0102", "account_number": "04121234567"}},
idempotency_key="orden-4821",
)
# created["idempotency_key"] es la clave que se mandó
Go Node Python
Verificar y leer un aviso tucapi.ParseEvent(r, secret) parseEvent(rawBody, req.headers, secret) parse_event(raw_body, headers, secret)
Sobre bytes ya leídos tucapi.VerifyEvent(body, sig, ts, secret) verifyEvent(body, sig, ts, secret) verify_event(body, sig, ts, secret)
Si no verifica tucapi.ErrInvalidSignature SignatureError SignatureError