Cliente para a API 3.0 da Cielo e Braspag em Typescript/Nodejs
- Criando uma transação simples
- Criando uma transação completa
- Criando uma venda com Autenticação
- Criando uma venda com Análise de Fraude
- Criando uma venda com Card Token
- Capturando uma venda
- Cancelando uma venda
- Criando Recorrências
- Modificando Recorrências
- Modificando dados do comprador
- Modificando data final da Recorrência
- Modificando intevalo da Recorrência
- Modificando dia da Recorrência
- Modificando o valor da Recorrência
- Modificando data do próximo Pagamento
- Modificando dados do Pagamento da Recorrência
- Desabilitando um Pedido Recorrente
- Reabilitando um Pedido Recorrente
- Consultando as transações usando PaymentID
- Consultando as transações usando MerchandOrderID
- Consulta de Cardbin
- Consulta de Recorrência
- Consulta de cartão tokenizado
npm install --save cielo
import { CieloConstructor, Cielo } from 'cielo';
const cieloParams: CieloConstructor = {
merchantId: 'xxxxxxxxxxxxxxxxxxxxxxx',
merchantKey: 'xxxxxxxxxxxxxxxxxxxxxxxxxx',
requestId: 'xxxxxxx', // Opcional - Identificação do Servidor na Cielo
sandbox: true, // Opcional - Ambiente de Testes
debug: true // Opcional - Exibe os dados enviados na requisição para a Cielo
}
const cielo = new Cielo(cieloParams);
Campo | Descrição | Obrigatório? | Default |
---|---|---|---|
merchantId | Identificador da loja na Cielo. | Sim | null |
merchantKey | Chave publica para autenticação dupla na Cielo. | Sim | null |
requestId | Identificador do Request, utilizado quando o lojista usa diferentes servidores para cada GET/POST/PUT. | Não | null |
sandbox | Ambiente de testes da Cielo | Não | false |
debug | Exibe requisição da transação no console | Não | false |
Usando Promise
const vendaParams: TransactionCreditCardRequestModel = {
customer: {
name: "Comprador crédito",
},
merchantOrderId: "2014111703",
payment: {
amount: 10000, // R$100,00
creditCard: {
brand: EnumBrands.VISA,
cardNumber: "4532117080573700",
holder: "Comprador T Cielo",
expirationDate: "12/2021",
},
installments: 1,
softDescriptor: "Banzeh",
type: EnumCardType.CREDIT,
capture: false,
},
};
cielo.creditCard.transaction(dadosSale)
.then((data) => {
return console.log(data);
})
.catch((err) => {
return console.error('ERRO', err);
})
Ou usando Async / Await
const transaction = await cielo.creditCard.transaction(dadosSale);
console.log(transaction);
const capturaVendaParams: CaptureRequestModel = {
paymentId: '24bc8366-fc31-4d6c-8555-17049a836a07',
amount: 2000, // Caso o valor não seja definido, captura a venda no valor total
};
cielo.creditCard.captureSaleTransaction(capturaVendaParams)
.then((data) => {
return console.log(data);
})
.catch((err) => {
return console.error('ERRO', err);
})
const cancelamentoVendaParams: CancelTransactionRequestModel = {
paymentId: '24bc8366-fc31-4d6c-8555-17049a836a07',
amount: 100, // Caso o valor não seja definido, cancela a venda no valor total
};
cielo.creditCard.cancelTransaction(cancelamentoVendaParams)
.then((data) => {
return console.log(data);
})
.catch((err) => {
return console.error('ERRO', err);
})
Ou usando Async / Await
const cancel = await cielo.creditCard.cancelSale(dadosSale);
console.log(cancel);
const debitCardTransactionParams: DebitCardSimpleTransactionRequestModel = {
merchantOrderId: "2014121201",
customer:{
name: "Paulo Henrique"
},
payment: {
type: EnumCardType.DEBIT,
amount: 15700,
provider: "Simulado",
returnUrl: "http://www.google.com.br",
debitCard:{
cardNumber: "4532117080573703",
holder: "Teste Holder",
expirationDate: "12/2022",
securityCode: "023",
brand: EnumBrands.VISA
}
}
}
cielo.debitCard.createSimpleTransaction(debitCardTransactionParams)
.then((data) => {
return console.log(data);
})
.catch((err) => {
return console.error('ERRO', err);
})
const transferenciaEletronicaParams: EletronicTransferCreateRequestModel = {
merchantOrderId: '2017051109',
customer: {
name: 'Nome do Comprador',
identity: '12345678909',
identityType: 'CPF',
email: 'comprador@cielo.com.br',
address: {
street: 'Alameda Xingu',
number: '512',
complement: '27 andar',
zipCode: '12345987',
city: 'São Paulo',
state: 'SP',
country: 'BRA',
district: 'Alphaville',
},
},
payment: {
provider: 'Bradesco',
type: 'EletronicTransfer',
amount: 10000,
returnUrl: 'http://www.cielo.com.br',
},
};
cielo.eletronicTransfer.create(transferenciaEletronicaParams)(dadosSale)
.then((data) => {
return console.log(data);
})
.catch((err) => {
return console.error('ERRO', err);
})
const boletoParams: BankSlipCreateRequestModel = {
merchantOrderId: '20180531',
customer: {
name: 'Comprádor Boleto Cíéló Áá',
identity: '1234567890',
address: {
street: 'Avenida Marechal Câmara',
number: '160',
complement: 'Sala 934',
zipCode: '22750012',
district: 'Centro',
city: 'Rio de Janeiro',
state: 'RJ',
country: 'BRA'
}
},
payment: {
type: 'Boleto',
amount: 15700,
provider: 'Bradesco2',
address: 'Rua Teste',
boletoNumber: '123',
assignor: 'Empresa Teste',
demonstrative: 'Desmonstrative Teste',
expirationDate: '5/1/2020',
identification: '11884926754',
instructions: 'Aceitar somente até a data de vencimento, após essa data juros de 1% dia.'
}
}
cielo.bankSlip.create(boletoParams)
.then((data) => {
return console.log(data);
})
.catch((err) => {
return console.error('ERRO', err);
})
const createRecurrencyParams: RecurrentCreateModel = {
merchantOrderId: '2014113245231706',
customer: {
name: 'Comprador rec programada'
},
payment: {
type: EnumCardType.CREDIT,
amount: 1500,
installments: 1,
softDescriptor: '123456789ABCD',
currency: 'BRL',
country: 'BRA',
recurrentPayment: {
authorizeNow: true,
endDate: '2022-12-01',
interval: EnumRecurrentPaymentInterval.SEMIANNUAL
},
creditCard: {
cardNumber: '4024007197692931',
holder: 'Teste Holder',
expirationDate: '12/2030',
securityCode: '262',
saveCard: false,
brand: 'Visa' as EnumBrands
}
}
}
cielo.recurrent.create(createRecurrencyParams)
.then((data) => {
return console.log(data);
})
.catch((err) => {
return console.error('ERRO', err);
})
const updateCustomer: RecurrentModifyCustomerModel = {
paymentId: firstRecurrency.payment.recurrentPayment.recurrentPaymentId,
customer: {
name: 'Customer',
email: 'customer@teste.com',
birthdate: '1999-12-12',
identity: '22658954236',
identityType: 'CPF',
address: {
street: 'Rua Teste',
number: '174',
complement: 'AP 201',
zipCode: '21241140',
city: 'Rio de Janeiro',
state: 'RJ',
country: 'BRA'
},
deliveryAddress: {
street: 'Outra Rua Teste',
number: '123',
complement: 'AP 111',
zipCode: '21241111',
city: 'Qualquer Lugar',
state: 'QL',
country: 'BRA',
}
}
}
cielo.recurrent.modifyCustomer(updateCustomer)
.then((data) => {
return console.log(data);
})
.catch((err) => {
return console.error('ERRO', err);
})
const updateEndDate: RecurrentModifyEndDateModel = {
paymentId: firstRecurrency.payment.recurrentPayment.recurrentPaymentId,
endDate: '2021-01-09'
}
cielo.recurrent.modifyEndDate(updateEndDate)
.then((data) => {
return console.log(data);
})
.catch((err) => {
return console.error('ERRO', err);
})
const modifyRecurrencyParams: RecurrentModifyIntervalModel = {
paymentId: firstRecurrency.payment.recurrentPayment.recurrentPaymentId,
interval: EnumRecurrentPaymentUpdateInterval.MONTHLY
}
cielo.recurrent.modifyInterval(modifyRecurrencyParams)
.then((data) => {
return console.log(data);
})
.catch((err) => {
return console.error('ERRO', err);
})
const updateRecurrencyDay: RecurrentModifyDayModel = {
paymentId: firstRecurrency.payment.recurrentPayment.recurrentPaymentId,
recurrencyDay: 10
}
cielo.recurrent.modifyRecurrencyDay(updateRecurrencyDay)
.then((data) => {
return console.log(data);
})
.catch((err) => {
return console.error('ERRO', err);
})
const updateAmount: RecurrentModifyAmountModel = {
paymentId: firstRecurrency.payment.recurrentPayment.recurrentPaymentId,
amount: 156 // Valor do Pedido em centavos: 156 equivale a R$ 1,56
}
cielo.recurrent.modifyAmount(updateAmount)
.then((data) => {
return console.log(data);
})
.catch((err) => {
return console.error('ERRO', err);
})
const updateNextPaymentDate: RecurrentModifyNextPaymentDateModel = {
paymentId: firstRecurrency.payment.recurrentPayment.recurrentPaymentId,
nextPaymentDate: '2020-05-20'
}
cielo.recurrent.modifyNextPaymentDate
.then((data) => {
return console.log(data);
})
.catch((err) => {
return console.error('ERRO', err);
})
const updatePayment: RecurrentModifyPaymentModel = {
recurrentPaymentId: RecurrentPaymentId,
payment: {
type: EnumCardType.CREDIT,
amount: "123",
installments: 3,
country: "USA",
currency: "BRL",
softDescriptor: "123456789ABCD",
creditCard: {
brand: EnumBrands.VISA,
holder: "Teset card",
cardNumber: "1234123412341232",
expirationDate: "12/2030"
}
}
}
cielo.recurrent.modifyPayment(updatePayment)
.then((data) => {
return console.log(data);
})
.catch((err) => {
return console.error('ERRO', err);
})
const deactivateRecurrencyParams: RecurrentModifyModel = {
paymentId: firstRecurrency.payment.recurrentPayment.recurrentPaymentId
}
cielo.recurrent.deactivate(deactivateRecurrencyParams)
.then((data) => {
return console.log(data);
})
.catch((err) => {
return console.error('ERRO', err);
})
const reactivateRecurrencyParams: RecurrentModifyModel = {
paymentId: firstRecurrency.payment.recurrentPayment.recurrentPaymentId
}
cielo.recurrent.reactivate(updateReactivate)
.then((data) => {
return console.log(data);
})
.catch((err) => {
return console.error('ERRO', err);
})
const tokenParams: TokenizeRequestModel = {
customerName: 'Comprádor Teste Cíéló Áá',
cardNumber: '5555666677778884',
holder: 'Comprador T Cielo',
expirationDate: '12/2021',
brand: brand as EnumBrands
};
cielo.card.createTokenizedCard(tokenParams)
.then((data) => {
console.log(data)
})
.catch((err) => {
console.log(err);
})
const consultaParams: ConsultTransactionPaymentIdRequestModel = {
paymentId: "24bc8366-fc31-4d6c-8555-17049a836a07"
};
cielo.consult.paymentId(consultaParams)
.then((data) => {
console.log(data)
})
.catch((err) => {
console.log(err);
})
const consultaParamsMerchantOrderId: ConsultTransactionMerchantOrderIdRequestModel = {
merchantOrderId: "2014111706"
};
cielo.consult.merchantOrderId(consultaParamsMerchantOrderId)
.then((data) => {
console.log(data)
})
.catch((err) => {
console.log(err);
})
const consultaBinNacionalParams: ConsultBinRequestModel = {
cardBin: '453211'
};
cielo.consult.bin(consultaBinNacionalParams)
.then((data) => {
console.log(data)
})
.catch((err) => {
console.log(err);
})
const consultaCartaoTokenizadoParams: ConsultTokenRequestModel= {
cardToken: '66b2c162-efbf-4692-aee5-e536c0f81037'
}
cielo.consult.cardtoken(consultaCartaoTokenizadoParams)
.then((data) => {
console.log(data)
})
.catch((err) => {
console.log(err);
})
const recurrencyConsultingParams: ConsultTransactionRecurrentPaymentIdRequestModel = {
recurrentPaymentId: firstRecurrency.payment.recurrentPayment.recurrentPaymentId
}
cielo.consult.recurrent(recurrencyConsultingParams)
.then((data) => {
console.log(data)
})
.catch((err) => {
console.log(err);
})
Consulte os campos necessários na documentação da Cielo
Para rodar os testes automatizados, apenas execute o seguinte comando
npm test
Também é possível verificar o histórico de builds através do Travis CI
TRIAL <dev@trialent.com> Github Twitter
Matheus Leonardo <mlsm@trialent.com> Github
Flavio Takeuchi <flavio@banzeh.com.br> Github Twitter
MIT License
Copyright (c) 2017 trial-trl
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.