Important: This documentation covers Yarn 1 (Classic).
For Yarn 2+ docs and migration guide, see yarnpkg.com.

Package detail

pagseguro-payments

armando_castro112MIT1.0.1TypeScript support: included

SDK para integração com a API de pagamentos do PagSeguro

pagseguro, pagbank, payments, sdk, api

readme

SDK de Integração com a API de Pagamentos do PagSeguro

Este SDK facilita a integração com a API de pagamentos do PagSeguro (PagBank), permitindo a criação de pedidos, processamento de pagamentos, consultas e outras operações relacionadas.

Instalação

npm install pagseguro-payments

Configuração

Para utilizar o SDK, você precisa inicializar o cliente com suas credenciais do PagSeguro:

const { PagSeguroClient } = require('pagseguro-payments');

// Inicializa o cliente
const client = new PagSeguroClient({
  email: 'seu-email@exemplo.com',
  token: 'seu-token-de-acesso',
  sandbox: true // Use false para ambiente de produção
});

Funcionalidades

Pedidos (Orders)

Criar um pedido

const orderData = {
  reference_id: 'pedido-123',
  customer: {
    name: 'José da Silva',
    email: 'jose@email.com',
    tax_id: '12345678909',
    phones: [
      {
        country: '55',
        area: '11',
        number: '999999999',
        type: 'MOBILE'
      }
    ]
  },
  items: [
    {
      name: 'Produto de Teste',
      quantity: 1,
      unit_amount: 1000, // R$ 10,00
      reference_id: 'produto-teste-1'
    }
  ],
  shipping: {
    address: {
      street: 'Avenida Brigadeiro Faria Lima',
      number: '1384',
      complement: 'Andar 4',
      locality: 'Pinheiros',
      city: 'São Paulo',
      region: 'São Paulo',
      region_code: 'SP',
      country: 'BRA',
      postal_code: '01452002'
    }
  },
  notification_urls: ['https://meusite.com/notificacoes']
};

// Cria o pedido
const order = await client.orders.create(orderData);
console.log('Pedido criado:', order.id);

Consultar um pedido

// Consulta um pedido pelo ID
const order = await client.orders.get('ORDE_XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX');
console.log('Pedido:', order);

Consultar pedidos por cobrança

// Consulta pedidos pelo ID da cobrança
const orders = await client.orders.getByCharge('CHAR_XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX');
console.log('Pedidos:', orders);

Pagar um pedido

const paymentData = {
  charges: [
    {
      reference_id: 'pagamento-123',
      description: 'Pagamento de teste',
      amount: {
        value: 1000, // R$ 10,00
        currency: 'BRL'
      },
      payment_method: {
        type: 'CREDIT_CARD',
        installments: 1,
        capture: true,
        card: {
          number: '4111111111111111',
          exp_month: 12,
          exp_year: 2030,
          security_code: '123',
          holder: {
            name: 'José da Silva'
          }
        }
      }
    }
  ]
};

// Realiza o pagamento do pedido
const payment = await client.orders.pay('ORDE_XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX', paymentData);
console.log('Pagamento realizado:', payment);

Cobranças (Charges)

Consultar uma cobrança

// Consulta uma cobrança pelo ID
const charge = await client.charges.get('CHAR_XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX');
console.log('Cobrança:', charge);

Capturar uma cobrança pré-autorizada

// Captura uma cobrança pré-autorizada
const charge = await client.charges.capture('CHAR_XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX');
console.log('Cobrança capturada:', charge);

// Captura parcial
const partialCharge = await client.charges.capture('CHAR_XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX', {
  amount: {
    value: 500 // R$ 5,00
  }
});
console.log('Cobrança parcialmente capturada:', partialCharge);

Cancelar uma cobrança

// Cancela uma cobrança
const charge = await client.charges.cancel('CHAR_XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX');
console.log('Cobrança cancelada:', charge);

// Cancelamento parcial
const partialCharge = await client.charges.cancel('CHAR_XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX', {
  amount: {
    value: 500 // R$ 5,00
  }
});
console.log('Cobrança parcialmente cancelada:', partialCharge);

Cancelar uma cobrança com mecanismo de tentativas

Em alguns casos, o PagSeguro pode retornar o erro refund_temporarily_unavailable ao tentar cancelar um pagamento recém-criado. Para lidar com essa situação, é recomendado implementar um mecanismo de tentativas múltiplas:

// Implementa um mecanismo de tentativas para o cancelamento
async function cancelChargeWithRetry(chargeId, cancelParams, maxAttempts = 3, waitTime = 10000) {
  let attempts = 0;

  while (attempts < maxAttempts) {
    try {
      attempts++;
      console.log(`Tentativa ${attempts} de cancelar o pagamento...`);

      // Tenta cancelar o pagamento
      const canceledCharge = await client.charges.cancel(chargeId, cancelParams);
      console.log('Pagamento cancelado com sucesso:', canceledCharge.id);
      return canceledCharge;

    } catch (error) {
      const errorMessage = error.message || String(error);

      if (errorMessage.includes('refund_temporarily_unavailable') && attempts < maxAttempts) {
        // Se for o erro específico e ainda temos tentativas, aguarda e tenta novamente
        console.log(`Pagamento ainda não disponível para cancelamento. Aguardando ${waitTime/1000} segundos...`);
        await new Promise(resolve => setTimeout(resolve, waitTime));
      } else {
        // Se for outro erro ou acabaram as tentativas, lança o erro
        throw error;
      }
    }
  }

  throw new Error(`Não foi possível cancelar o pagamento após ${maxAttempts} tentativas.`);
}

// Exemplo de uso
try {
  const cancelParams = { amount: { value: 1000 } };
  const canceledCharge = await cancelChargeWithRetry('CHAR_XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX', cancelParams);
  console.log('Cobrança cancelada com sucesso:', canceledCharge);
} catch (error) {
  console.error('Erro ao cancelar cobrança:', error.message);
}

Criar sessão para autenticação 3DS

// Cria uma sessão para autenticação 3DS
const session = await client.charges.create3DSSession();
console.log('Sessão 3DS:', session);

Divisão de pagamentos

// Consulta uma divisão de pagamento
const split = await client.charges.getSplit('SPLIT_XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX');
console.log('Divisão de pagamento:', split);

// Libera a custódia de uma divisão de pagamento
await client.charges.releaseSplitCustody('SPLIT_XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX');
console.log('Custódia liberada com sucesso');

Exemplos

Veja exemplos completos na pasta examples:

Ambiente de Testes

Para testar o SDK, você pode usar o ambiente de sandbox do PagSeguro. Configure suas credenciais de sandbox no arquivo .env.test:

PAGSEGURO_EMAIL=seu-email@exemplo.com
PAGSEGURO_TOKEN=seu-token-de-sandbox

Documentação da API

Para mais informações sobre a API do PagSeguro, consulte a documentação oficial.

Licença

Este projeto está licenciado sob a licença MIT - veja o arquivo LICENSE para mais detalhes.