ms_infinitepay
Biblioteca Dart/Flutter para integração com a API de checkout da InfinitePay.
Com essa integração, você pode gerar links de pagamento automaticamente e acompanhar as vendas em tempo real de forma incrivelmente simples!
Features
- ✅ Criação de links de checkout de forma simples e direta
- ✅ Verificação de status de pagamentos
- ✅ Suporte a webhooks para notificações em tempo real
- ✅ Suporte completo a Pix e Cartão de Crédito
- ✅ API totalmente documentada em português
- ✅ Type-safe com modelos de dados bem definidos
Getting started
Instalação
Adicione a dependência no seu pubspec.yaml:
dependencies:
ms_infinitepay: ^1.0.0
Pré-requisitos
Você precisará de:
- Uma conta na InfinitePay
- Sua InfiniteTag (nome de usuário no App InfinitePay, sem o símbolo
$)
Usage
1. Criar um link de checkout
import 'package:ms_infinitepay/ms_infinitepay.dart';
final service = CheckoutService();
// Configure o payload com as informações do pedido
final payload = Payload(
handle: 'seu-handle', // Sua InfiniteTag sem o $
items: [
Item(
description: 'Produto Exemplo',
quantity: 2,
price: 5000, // R$ 50,00 em centavos
),
Item(
description: 'Outro Produto',
quantity: 1,
price: 3000, // R$ 30,00 em centavos
),
],
orderNSU: 'pedido-123', // Identificador do seu sistema (opcional)
redirectUrl: 'https://seusite.com/pagamento-concluido',
webhookUrl: 'https://seusite.com/webhook',
customer: Customer(
name: 'João Silva',
email: 'joao@email.com',
phoneNumber: '+5511999887766',
),
address: Address(
cep: '12345678',
street: 'Rua das Flores',
neighborhood: 'Centro',
number: '123',
complement: 'Apto 45',
),
);
try {
final checkoutUrl = await service.createCheckout(payload);
print('Link de checkout criado: $checkoutUrl');
// Redirecione o cliente para checkoutUrl
} catch (e) {
print('Erro ao criar checkout: $e');
}
2. Verificar status de pagamento
Após o cliente finalizar o pagamento, ele será redirecionado para sua redirectUrl com os seguintes parâmetros:
receipt_url: Link do comprovante de pagamentoorder_nsu: O número do pedido no seu sistemaslug: Código da fatura na InfinitePaycapture_method: Como foi pago ("credit_card" ou "pix")transaction_nsu: ID único da transação
Use esses parâmetros para verificar o status:
final request = PaymentCheckRequest(
handle: 'seu-handle',
orderNSU: 'pedido-123',
transactionNSU: 'uuid-recebido-na-url',
slug: 'codigo-fatura',
);
try {
final response = await service.checkPayment(request);
if (response.paid) {
print('✅ Pagamento confirmado!');
print('Valor pago: R\$ ${response.paidAmount / 100}');
print('Método: ${response.captureMethod}');
print('Parcelas: ${response.installments}x');
} else {
print('❌ Pagamento não confirmado');
}
} catch (e) {
print('Erro ao verificar pagamento: $e');
}
3. Receber webhooks (Recomendado)
Para uma integração mais robusta, configure um endpoint para receber webhooks:
import 'package:shelf/shelf.dart';
import 'dart:convert';
import 'package:ms_infinitepay/ms_infinitepay.dart';
Response webhookHandler(Request request) async {
try {
final body = await request.readAsString();
final json = jsonDecode(body);
final webhookBody = WebhookBody.fromMap(json);
// Valide se o order_nsu corresponde a um pedido real no seu sistema
if (await isValidOrder(webhookBody.orderNSU)) {
// Processe o pagamento aprovado
await processPayment(webhookBody);
print('✅ Pagamento recebido!');
print('Order NSU: ${webhookBody.orderNSU}');
print('Valor: R\$ ${webhookBody.paidAmount / 100}');
print('Comprovante: ${webhookBody.receiptUrl}');
// Responda rapidamente com 200 OK (< 1 segundo)
return Response.ok('OK');
} else {
// Retorne 400 se houver erro (InfinitePay tentará reenviar)
return Response(400, body: 'Order NSU inválido');
}
} catch (e) {
print('Erro ao processar webhook: $e');
return Response(400, body: 'Erro ao processar webhook');
}
}
Conceitos importantes
Valores em centavos
Todos os valores monetários devem ser informados em centavos:
- R$ 10,00 =
1000centavos - R$ 155,50 =
15550centavos
Order NSU
É o identificador do pedido no seu sistema. Se não for informado, a InfinitePay gerará um automaticamente. Sempre valide se o order_nsu corresponde a um pedido real.
Webhooks vs Consulta manual
- Webhook: Mais eficiente, você recebe notificações em tempo real
- Consulta manual: Útil como fallback ou para verificações pontuais
Segurança
- Sempre valide os dados recebidos via webhook
- Guarde o
transaction_nsupara futuras consultas - Teste bastante no ambiente de desenvolvimento antes de colocar em produção
Endpoints da API
- Criar checkout:
POST https://api.infinitepay.io/invoices/public/checkout/links - Verificar pagamento:
POST https://api.infinitepay.io/invoices/public/checkout/payment_check
Métodos de pagamento suportados
- Pix: Pagamento instantâneo
- Cartão de Crédito: Com opção de parcelamento
Additional information
Contribuindo
Contribuições são bem-vindas! Sinta-se à vontade para abrir issues ou pull requests.
Suporte
Para questões sobre a API da InfinitePay, consulte a documentação oficial ou entre em contato com o suporte da InfinitePay.
Licença
Veja o arquivo LICENSE para mais informações.
Libraries
- constants
- exceptions/pay_exception
- models/address
- models/customer
- models/item
- models/models
- models/payload
- models/payment_check
- models/webhook_body
- ms_infinitepay
- Biblioteca para integração com a API de checkout da InfinitePay.
- service/checkout_service