Criar Cobrança com Link de Pagamento
Cria uma cobrança com link de pagamento completo, suportando múltiplos métodos (Pix, Boleto, Cartão).
POST /api/charge
Endpoint
POST https://api.divipay.com.br/api/chargeHeaders
| Header | Valor | Obrigatório |
|---|---|---|
| Authorization | Bearer | Sim |
| Content-Type | application/json | Sim |
Body Parameters
| Campo | Tipo | Descrição | Obrigatório |
|---|---|---|---|
| amount | number | Valor da cobrança em reais | Sim |
| description | string | Descrição (máx. 25 caracteres) | Sim |
| referenceId | string | ID de referência do seu sistema | Sim |
| callbackUrl | string | URL de redirecionamento após pagamento | Sim |
| dueDate | string | Data de vencimento (ISO 8601) | Sim |
| payAfterDueDateDays | number | Dias para pagar após vencimento (máx. 60, padrão 5) | Sim |
| lockDiscount | boolean | Bloquear desconto | Sim |
| customerId | string | ID da subconta (opcional) | Não |
| fee | number | Taxa fixa a ser cobrada | Não |
| client | object | Dados do cliente | Sim |
| itens | array | Lista de itens da cobrança | Sim |
| shipping | object | Endereço de entrega | Sim |
Objeto Client
| Campo | Tipo | Descrição | Obrigatório |
|---|---|---|---|
| name | string | Nome do cliente | Sim |
| document | string | CPF ou CNPJ | Sim |
| array/string | Email do cliente | Sim | |
| phone | string | Telefone com DDD | Sim |
| ip | string | IP do cliente | Não |
Objeto Shipping
| Campo | Tipo | Descrição | Obrigatório |
|---|---|---|---|
| zipCode | string | CEP (somente números) | Sim |
| street | string | Logradouro | Sim |
| number | string | Número | Sim |
| complement | string | Complemento | Sim |
| district | string | Bairro | Sim |
| city | string | Cidade | Sim |
| state | string | Estado (sigla) | Sim |
Exemplo de Requisição
bash
curl -X POST https://api.divipay.com.br/api/charge \
-H "Authorization: Bearer SEU_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"amount": 150.00,
"description": "Pedido #456",
"referenceId": "pedido-456",
"callbackUrl": "https://seusite.com/obrigado",
"dueDate": "2024-11-10",
"payAfterDueDateDays": 5,
"lockDiscount": false,
"client": {
"name": "Maria Santos",
"document": "98765432100",
"email": "maria@email.com",
"phone": "11988888888",
"ip": "192.168.1.1"
},
"itens": [
{
"name": "Produto Premium",
"quantity": 1,
"unitPrice": 150.00,
"feePercent": 0
}
],
"shipping": {
"zipCode": "01310100",
"street": "Av. Paulista",
"number": "1000",
"complement": "Apto 101",
"district": "Bela Vista",
"city": "São Paulo",
"state": "SP"
}
}'javascript
const response = await fetch('https://api.divipay.com.br/api/charge', {
method: 'POST',
headers: {
'Authorization': 'Bearer SEU_TOKEN',
'Content-Type': 'application/json'
},
body: JSON.stringify({
amount: 150.00,
description: 'Pedido #456',
referenceId: 'pedido-456',
callbackUrl: 'https://seusite.com/obrigado',
dueDate: '2024-11-10',
payAfterDueDateDays: 5,
lockDiscount: false,
client: {
name: 'Maria Santos',
document: '98765432100',
email: 'maria@email.com',
phone: '11988888888',
ip: '192.168.1.1'
},
itens: [
{
name: 'Produto Premium',
quantity: 1,
unitPrice: 150.00,
feePercent: 0
}
],
shipping: {
zipCode: '01310100',
street: 'Av. Paulista',
number: '1000',
complement: 'Apto 101',
district: 'Bela Vista',
city: 'São Paulo',
state: 'SP'
}
})
});
const data = await response.json();python
import requests
response = requests.post(
'https://api.divipay.com.br/api/charge',
headers={
'Authorization': 'Bearer SEU_TOKEN',
'Content-Type': 'application/json'
},
json={
'amount': 150.00,
'description': 'Pedido #456',
'referenceId': 'pedido-456',
'callbackUrl': 'https://seusite.com/obrigado',
'dueDate': '2024-11-10',
'payAfterDueDateDays': 5,
'lockDiscount': False,
'client': {
'name': 'Maria Santos',
'document': '98765432100',
'email': 'maria@email.com',
'phone': '11988888888',
'ip': '192.168.1.1'
},
'itens': [
{
'name': 'Produto Premium',
'quantity': 1,
'unitPrice': 150.00,
'feePercent': 0
}
],
'shipping': {
'zipCode': '01310100',
'street': 'Av. Paulista',
'number': '1000',
'complement': 'Apto 101',
'district': 'Bela Vista',
'city': 'São Paulo',
'state': 'SP'
}
}
)
data = response.json()Resposta de Sucesso
Status: 201 Created
json
{
"id": "inv_abc123xyz789",
"status": "PENDING",
"amount": 150.00,
"description": "Pedido #456",
"referenceId": "pedido-456",
"paymentUrl": "https://pay.divipay.com.br/invoice/inv_abc123xyz789",
"dueDate": "2024-11-10",
"createdAt": "2024-11-04T15:00:00.000Z"
}Usando o Link de Pagamento
Redirecione o cliente para a URL de pagamento:
javascript
// Redirecionar
window.location.href = charge.paymentUrl;
// Ou abrir em nova aba
window.open(charge.paymentUrl, '_blank');
// Ou exibir como link
<a href="${charge.paymentUrl}" target="_blank">
Pagar Agora
</a>Métodos de Pagamento Disponíveis
O link de pagamento oferece:
- ✅ Pix: Pagamento instantâneo com QR Code
- ✅ Boleto: Boleto bancário com vencimento
- ✅ Cartão de Crédito: Pagamento parcelado
- ✅ Cartão de Débito: Pagamento à vista
Exemplo Completo
javascript
async function createInvoice(order) {
try {
const response = await fetch('https://api.divipay.com.br/api/charge', {
method: 'POST',
headers: {
'Authorization': `Bearer ${token}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
amount: order.total,
description: `Pedido #${order.id}`,
referenceId: order.id,
callbackUrl: `${process.env.BASE_URL}/checkout/success`,
dueDate: new Date(Date.now() + 7 * 24 * 60 * 60 * 1000).toISOString().split('T')[0],
payAfterDueDateDays: 5,
lockDiscount: false,
client: {
name: order.customer.name,
document: order.customer.cpf,
email: order.customer.email,
phone: order.customer.phone,
ip: order.customer.ip
},
itens: order.items.map(item => ({
name: item.name,
quantity: item.quantity,
unitPrice: item.price,
feePercent: 0
})),
shipping: {
zipCode: order.shipping.zipCode,
street: order.shipping.street,
number: order.shipping.number,
complement: order.shipping.complement || '',
district: order.shipping.district,
city: order.shipping.city,
state: order.shipping.state
}
})
});
if (!response.ok) {
throw new Error(`HTTP ${response.status}`);
}
const invoice = await response.json();
// Salvar no banco
await db.invoices.create({
data: {
orderId: order.id,
invoiceId: invoice.id,
paymentUrl: invoice.paymentUrl,
status: invoice.status,
amount: invoice.amount
}
});
// Redirecionar para pagamento
return invoice.paymentUrl;
} catch (error) {
console.error('Erro ao criar cobrança:', error);
throw error;
}
}
// Uso
const paymentUrl = await createInvoice(order);
window.location.href = paymentUrl;Webhook
Quando o pagamento for confirmado:
json
{
"event": "charge.paid",
"chargeId": "inv_abc123xyz789",
"referenceId": "pedido-456",
"amount": 150.00,
"paidAt": "2024-11-04T16:30:00.000Z",
"status": "PAID",
"paymentMethod": "CREDIT_CARD"
}Respostas de Erro
400 Bad Request
json
{
"statusCode": 400,
"message": "Validation failed",
"errors": [
"dueDate must be a future date",
"shipping.zipCode must be valid"
]
}