Los SDK
Hay tres clientes oficiales, en Go, Node y Python. Los tres hacen lo mismo:
- Autenticación con su llave.
- El contrato, tipado: los tipos, los enums y las rutas se generan desde este mismo OpenAPI, así que no pueden desviarse de la API.
- 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. - 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").
Instalar
Sección titulada «Instalar»| 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_...") |
La misma forma en los tres
Sección titulada «La misma forma en los tres»| 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(…) |
Ejemplo
Sección titulada «Ejemplo»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ó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ó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óWebhooks
Sección titulada «Webhooks»| 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 |
