Pular para o conteúdo principal

SDKs oficiais

Clientes oficiais para Node e PHP. A chave de API identifica o tenant (sem tenantId), com retries, idempotência e verificação de webhook prontos. O baseUrl já aponta para https://v2.pagnow.com.

Node — @pagnow/sdk-node

npm install @pagnow/sdk-node
import { PagNow } from '@pagnow/sdk-node';

const pagnow = new PagNow({ apiKey: process.env.PAGNOW_API_KEY });

const charge = await pagnow.payments.create({
amount: 1990,
currency: 'BRL',
paymentMethods: ['PIX'],
customer: { name: 'João Silva', document: '52998224725', email: 'joao@exemplo.com' },
idempotencyKey: `pedido-${orderId}`,
});
console.log(charge.pixCopyPaste);

// Reembolso / cancelamento
await pagnow.payments.refund(charge.id, { idempotencyKey: `refund-${charge.id}` });
await pagnow.payments.cancel(charge.id);

Receptor de webhook (Express) com verificação embutida:

app.post('/webhooks/pagnow', express.raw({ type: 'application/json' }), (req, res) => {
if (!pagnow.webhooks.verify(req.body, req.headers['x-pagnow-signature'], endpointSecret)) {
return res.status(401).end();
}
const { event, data } = JSON.parse(req.body.toString('utf8'));
// event === 'payment.completed' | 'payment.failed' · data.status === 'PAID' | 'REFUSED'
res.status(200).end();
});

PHP — pagnow/sdk-php

composer require pagnow/sdk-php
<?php
use Pagnow\PagNow;

$pagnow = new PagNow(['apiKey' => getenv('PAGNOW_API_KEY')]);

$charge = $pagnow->payments->create([
'amount' => 1990,
'currency' => 'BRL',
'paymentMethods' => ['PIX'],
'customer' => ['name' => 'João Silva', 'document' => '52998224725', 'email' => 'joao@exemplo.com'],
'idempotencyKey' => "pedido-{$orderId}",
]);
echo $charge['pixCopyPaste'];

$pagnow->payments->refund($charge['id'], ['idempotencyKey' => "refund-{$charge['id']}"]);

Webhook (verificação embutida):

<?php
$raw = file_get_contents('php://input');
$sig = $_SERVER['HTTP_X_PAGNOW_SIGNATURE'] ?? '';
if (!$pagnow->webhooks->verify($raw, $sig, getenv('PAGNOW_WEBHOOK_SECRET'))) {
http_response_code(401); exit;
}
$event = json_decode($raw, true);
// $event['event'] === 'payment.completed' | 'payment.failed'
// $event['data']['status'] === 'PAID' | 'REFUSED'

Integrando em outra linguagem? A API é HTTP + JSON — os exemplos em cURL ao longo da doc cobrem tudo.