Cobrança com Cartão de Crédito
Processe pagamentos com cartão de crédito diretamente, com suporte a parcelamento e 3DS.
Fluxo de Pagamento
- Obter chave pública
- Criptografar dados do cartão
- Criar cobrança
- Processar pagamento
GET /api/charge/credit-card/public-key
Obtém a chave pública para criptografar dados do cartão.
Endpoint
GET https://api.divipay.com.br/api/charge/credit-card/public-keyHeaders
| Header | Valor | Obrigatório |
|---|---|---|
| Authorization | Bearer | Sim |
Exemplo de Requisição
bash
curl -X GET https://api.divipay.com.br/api/charge/credit-card/public-key \
-H "Authorization: Bearer SEU_TOKEN"Resposta
json
{
"public_key": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA...",
"created_at": 1699113600
}GET /api/charge/credit-card/session
Obtém sessão 3DS para cartão de débito.
Endpoint
GET https://api.divipay.com.br/api/charge/credit-card/sessionResposta
json
{
"session": "abc123xyz789",
"env": "production"
}POST /api/charge/credit-card
Cria uma cobrança com cartão de crédito.
Endpoint
POST https://api.divipay.com.br/api/charge/credit-cardBody Parameters
| Campo | Tipo | Descrição | Obrigatório |
|---|---|---|---|
| amount | number | Valor da cobrança | Sim |
| description | string | Descrição (máx. 15 caracteres) | Sim |
| referenceId | string | ID de referência | Sim |
| callbackUrl | string | URL para webhook | Sim |
| installments | number | Número de parcelas (padrão 1) | Sim |
| customerId | string | ID da subconta | Não |
| fee | number | Taxa fixa | Não |
| card | object | Dados do cartão | Sim |
| client | object | Dados do cliente | Sim |
| itens | array | Lista de itens | Sim |
| shipping | object | Endereço de entrega | Não |
Objeto Card
| Campo | Tipo | Descrição | Obrigatório |
|---|---|---|---|
| cardNumber | string | Número do cartão | Sim* |
| holder | string | Nome no cartão | Sim* |
| expirationDate | string | Validade (MM/AAAA) | Sim* |
| securityCode | string | CVV | Sim |
| cardToken | string | Token de cartão salvo | Não |
| encryptedCard | string | Cartão criptografado | Sim |
| antiFraudId | string | ID antifraude | Sim |
| threedsToken | string | Token 3DS (débito) | Não |
*Obrigatório se não usar cardToken
Exemplo de Requisição
bash
curl -X POST https://api.divipay.com.br/api/charge/credit-card \
-H "Authorization: Bearer SEU_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"amount": 200.00,
"description": "Compra Online",
"referenceId": "order-789",
"callbackUrl": "https://seusite.com/webhook",
"installments": 3,
"card": {
"cardNumber": "4111111111111111",
"holder": "JOAO SILVA",
"expirationDate": "12/2025",
"securityCode": "123",
"encryptedCard": "encrypted_data_here",
"antiFraudId": "antifraud_id_here"
},
"client": {
"name": "João Silva",
"document": "12345678901",
"email": "joao@email.com",
"phone": "11999999999",
"ip": "192.168.1.1"
},
"itens": [
{
"name": "Produto Digital",
"quantity": 1,
"unitPrice": 200.00,
"feePercent": 0
}
]
}'javascript
// 1. Obter chave pública
const keyResponse = await fetch(
'https://api.divipay.com.br/api/charge/credit-card/public-key',
{
headers: { 'Authorization': `Bearer ${token}` }
}
);
const { public_key } = await keyResponse.json();
// 2. Criptografar cartão (use biblioteca de criptografia)
const encryptedCard = encryptCardData(cardData, public_key);
// 3. Criar cobrança
const response = await fetch(
'https://api.divipay.com.br/api/charge/credit-card',
{
method: 'POST',
headers: {
'Authorization': `Bearer ${token}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
amount: 200.00,
description: 'Compra Online',
referenceId: 'order-789',
callbackUrl: 'https://seusite.com/webhook',
installments: 3,
card: {
cardNumber: '4111111111111111',
holder: 'JOAO SILVA',
expirationDate: '12/2025',
securityCode: '123',
encryptedCard: encryptedCard,
antiFraudId: generateAntiFraudId()
},
client: {
name: 'João Silva',
document: '12345678901',
email: 'joao@email.com',
phone: '11999999999',
ip: '192.168.1.1'
},
itens: [
{
name: 'Produto Digital',
quantity: 1,
unitPrice: 200.00,
feePercent: 0
}
]
})
}
);
const charge = await response.json();Resposta de Sucesso
Status: 201 Created
json
{
"id": "cc_abc123xyz",
"status": "PAID",
"amount": 200.00,
"payedAt": "2024-11-04T15:30:00.000Z",
"customerId": null,
"cardToken": "card_token_xyz789",
"nsu": "123456",
"authorizationCode": "ABC123",
"proofOfSale": "789456",
"returnCode": "00",
"returnMessage": "Transação aprovada"
}Status da Transação
| Status | Descrição |
|---|---|
| PENDING | Aguardando processamento |
| PAID | Pagamento aprovado |
| CANCELED | Pagamento recusado |
Códigos de Retorno
| Código | Mensagem |
|---|---|
| 00 | Transação aprovada |
| 05 | Não autorizada |
| 51 | Saldo insuficiente |
| 57 | Cartão bloqueado |
| 78 | Cartão não desbloqueado |
Salvar Cartão
POST /api/charge/credit-card/save-card
Salva um cartão para uso futuro.
bash
curl -X POST https://api.divipay.com.br/api/charge/credit-card/save-card \
-H "Authorization: Bearer SEU_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"cardNumber": "4111111111111111",
"holder": "JOAO SILVA",
"expirationDate": "12/2025",
"securityCode": "123"
}'Resposta:
json
{
"customerId": "sub_abc123",
"cardToken": "card_token_xyz789"
}Usar Cartão Salvo
javascript
{
"card": {
"cardToken": "card_token_xyz789",
"securityCode": "123"
}
// ... outros campos
}Deletar Cartão
DELETE /api/charge/credit-card/save-card/
bash
curl -X DELETE https://api.divipay.com.br/api/charge/credit-card/save-card/card_token_xyz789 \
-H "Authorization: Bearer SEU_TOKEN"Parcelamento
Configure o número de parcelas:
javascript
{
"amount": 300.00,
"installments": 6, // 6x de R$ 50,00
// ... outros campos
}ATENÇÃO
Verifique as taxas de parcelamento com sua conta DiviPay.
Exemplo Completo
javascript
class CreditCardPayment {
constructor(token) {
this.token = token;
this.apiUrl = 'https://api.divipay.com.br';
}
async getPublicKey() {
const response = await fetch(
`${this.apiUrl}/api/charge/credit-card/public-key`,
{
headers: { 'Authorization': `Bearer ${this.token}` }
}
);
const data = await response.json();
return data.public_key;
}
encryptCard(cardData, publicKey) {
// Implementar criptografia RSA
// Use biblioteca como node-rsa ou jsencrypt
const encrypted = /* criptografar com publicKey */;
return encrypted;
}
async processPayment(paymentData) {
try {
// 1. Obter chave pública
const publicKey = await this.getPublicKey();
// 2. Criptografar cartão
const encryptedCard = this.encryptCard(
paymentData.card,
publicKey
);
// 3. Criar cobrança
const response = await fetch(
`${this.apiUrl}/api/charge/credit-card`,
{
method: 'POST',
headers: {
'Authorization': `Bearer ${this.token}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
...paymentData,
card: {
...paymentData.card,
encryptedCard,
antiFraudId: this.generateAntiFraudId()
}
})
}
);
if (!response.ok) {
const error = await response.json();
throw new Error(error.message);
}
const charge = await response.json();
// 4. Verificar status
if (charge.status === 'PAID') {
console.log('✅ Pagamento aprovado!');
console.log('NSU:', charge.nsu);
console.log('Autorização:', charge.authorizationCode);
return charge;
} else {
console.log('❌ Pagamento recusado');
console.log('Motivo:', charge.returnMessage);
throw new Error(charge.returnMessage);
}
} catch (error) {
console.error('Erro ao processar pagamento:', error);
throw error;
}
}
generateAntiFraudId() {
// Gerar ID único para antifraude
return `af_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
}
}
// Uso
const payment = new CreditCardPayment(token);
const charge = await payment.processPayment({
amount: 200.00,
description: 'Compra Online',
referenceId: 'order-789',
callbackUrl: 'https://seusite.com/webhook',
installments: 3,
card: {
cardNumber: '4111111111111111',
holder: 'JOAO SILVA',
expirationDate: '12/2025',
securityCode: '123'
},
client: {
name: 'João Silva',
document: '12345678901',
email: 'joao@email.com',
phone: '11999999999',
ip: '192.168.1.1'
},
itens: [
{
name: 'Produto Digital',
quantity: 1,
unitPrice: 200.00
}
]
});Segurança
IMPORTANTE
- Nunca armazene dados completos do cartão
- Sempre use HTTPS
- Criptografe dados sensíveis
- Implemente 3DS para débito
- Use tokens para pagamentos recorrentes