Giter VIP home page Giter VIP logo

cielo's Introduction

cielo

Client para a API 3.0 da Cielo em Typescript/Nodejs

MIT license Build Status Known Vulnerabilities codebeat badge JavaScript Style Guide Open Source Love svg2

Índice

Installation

npm install --save cielo

Como utilizar?

Iniciando

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);

Paramêtros de criação

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

Cartão de Crédito

Criando uma transação

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);

Capturando uma venda

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);
    })

Cancelando uma venda

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);

Cartão de Débito

Criando uma venda simplificada

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);
    })

Pagamentos com Transferência Eletronica

Criando uma venda simplificada

const transferenciaEletronicaParams: EletronicTransferCreateRequestModel = {
    merchantOrderId: '2017051109',
    customer: {
      name: 'Nome do Comprador',
      identity: '12345678909',
      identityType: 'CPF',
      email: '[email protected]',
      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);
  })

Boleto

Criando uma venda de Boleto

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);
    })

Recorrência

Criando Recorrências

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);
    })

Modificando Recorrências

Modificando dados do comprador

const updateCustomer: RecurrentModifyCustomerModel = {
    paymentId: firstRecurrency.payment.recurrentPayment.recurrentPaymentId,
    customer: {
      name: 'Customer',
      email: '[email protected]',
      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);
  })

Modificando data final da Recorrência

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);
  })

Modificando intevalo da Recorrência

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);
  })

Modificando dia da Recorrência

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);
  })

Modificando o valor da Recorrência

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);
  })

Modificando data do próximo Pagamento

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);
  })

Modificando dados do Pagamento da Recorrência (@todo)

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);
  })

Desabilitando um Pedido Recorrente

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);
  })

Reabilitando um Pedido Recorrente

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);
  })

Cartões

Gerando o token de cartão

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);
    })

Consultas

Consulta Transação usando PaymentId

const consultaParams: ConsultTransactionPaymentIdRequestModel = {
    paymentId: "24bc8366-fc31-4d6c-8555-17049a836a07"
};

cielo.consult.paymentId(consultaParams)
    .then((data) => {
        console.log(data)
    })
    .catch((err) => {
        console.log(err);
    })

Consultando as transações usando MerchandOrderID

const consultaParamsMerchantOrderId: ConsultTransactionMerchantOrderIdRequestModel = {
    merchantOrderId: "2014111706"
};

cielo.consult.merchantOrderId(consultaParamsMerchantOrderId)
    .then((data) => {
        console.log(data)
    })
    .catch((err) => {
        console.log(err);
    })

Consulta de Cardbin

const consultaBinNacionalParams: ConsultBinRequestModel = {
  cardBin: '453211'
};

cielo.consult.bin(consultaBinNacionalParams)
.then((data) => {
    console.log(data)
})
.catch((err) => {
    console.log(err);
})

Consulta de cartão Tokenizado

const consultaCartaoTokenizadoParams: ConsultTokenRequestModel= {
    cardToken: '66b2c162-efbf-4692-aee5-e536c0f81037'
}

cielo.consult.cardtoken(consultaCartaoTokenizadoParams)
.then((data) => {
    console.log(data)
})
.catch((err) => {
    console.log(err);
})

Consulta de Recorrência

const recurrencyConsultingParams: ConsultTransactionRecurrentPaymentIdRequestModel = {
  recurrentPaymentId: firstRecurrency.payment.recurrentPayment.recurrentPaymentId
}

cielo.consult.recurrent(recurrencyConsultingParams)
.then((data) => {
    console.log(data)
})
.catch((err) => {
    console.log(err);
})

API Reference

Consulte os campos necessários na documentação da Cielo

PT-Br

En

Testes

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

Autor

Flavio Takeuchi <[email protected]>

Github

Twitter

License

MIT License

Copyright (c) 2017 banzeh

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.

cielo's People

Contributors

banzeh avatar carloshc avatar dependabot[bot] avatar depfu[bot] avatar glauberalmeida avatar rzorzal avatar snyk-bot avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

cielo's Issues

Error: getaddrinfo ENOTFOUND

Ola,
Primeiro, obrigado pelo pacote! :)

Estou tentando usar, com base nos exemplos que passou e estou recebendo o seguinte erro:

ERRO { Error: getaddrinfo ENOTFOUND apisandbox.cieloecommerce.cielo.com.br apisandbox.cieloecommerce.cielo.com.br:443
at errnoException (dns.js:28:10)
at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:76:26)
code: 'ENOTFOUND',
errno: 'ENOTFOUND',
syscall: 'getaddrinfo',
hostname: 'apisandbox.cieloecommerce.cielo.com.br',
host: 'apisandbox.cieloecommerce.cielo.com.br',
port: 443 }

Algo que eu possa estar fazendo errado?

Erro no request

Caro Banzeh.

Estou tentando fazer um teste simples, mas recebo sempre o mesmo erro:

2018-07-27T21:08:18.832Z

 [Arguments] {
  '0': 'erro no request ',
  '1':
   { Error: read ECONNRESET
       at TLSWrap.onread (net.js:656:25) errno: 'ECONNRESET', code: 'ECONNRESET', syscall: 'read' } }

------------ END DEBUG ------------

CEIELO ERRO { Error: read ECONNRESET
    at TLSWrap.onread (net.js:656:25) errno: 'ECONNRESET', code: 'ECONNRESET', syscall: 'read' }

O código que estou usando no teste é esse:

const paramsCielo = {
	// SANDBOX
	MerchantId: "xxxxxxxx",
	MerchantKey: "xxxxxxxxxx",

	sandbox: true, // Opcional - Ambiente de Testes
	debug: true // Opcional - Exibe os dados enviados na requisição para a Cielo
};

const cielo = require("cielo")(paramsCielo);

const dadosSale = {
	MerchantOrderId: "2014111703",
	Customer: {
		Name: "Comprador crédito simples"
	},
	Payment: {
		Type: "CreditCard",
		Amount: 15700,
		Installments: 1,
		SoftDescriptor: "123456789ABCD",
		CreditCard: {
			CardNumber: "0000000000000001",
			Holder: "Teste Holder",
			ExpirationDate: "12/2030",
			SecurityCode: "123",
			Brand: "Visa"
		}
	}
};

cielo.creditCard
	.completeTransaction(dadosSale)
	.then(data => {
		console.log("CEIELO SUCESSO ", data);
		//response.send(data);
	})
	.catch(err => {
		console.error("CEIELO ERRO", err);
		//response.send(err);
	});

Abcs

André

Nenhuma resposta

Bom dia.
Poderia me ajudar? Estou tentando usar a integração com o Express. Porém, não recebo nenhuma resposta...parece que fica fazendo a requisição eternamente.

var express = require('express');
var app = express();

var paramsCielo = {
  'MerchantId': '1efce832-e60d-435d-b8c1-dd3121ec4248',
  'MerchantKey': '80T5wEBXuyhBF99ANLlii5WwIlOijvHqafcQNDcD',
  'RequestId': 'xxxxxxx', // Opcional - Identificação do Servidor na Cielo
  'sandbox': true, // Opcional - Ambiente de Testes
  'debug': false // Opcional - Exibe os dados enviados na requisição para a Cielo
}

var cielo = require('cielo')(paramsCielo);



app.get('/', function (req, res) {
  res.send('Hello World!');
});

app.get('/cielo', function(req, res) {
  var dadosSale = {  
    "MerchantOrderId":"2014111703",
    "Customer":{  
       "Name":"Comprador crédito simples"
    },
    "Payment":{  
      "Type":"CreditCard",
      "Amount":15700,
      "Installments":1,
      "SoftDescriptor":"123456789ABCD",
      "CreditCard":{  
          "CardNumber":"0000000000000001",
          "Holder":"Teste Holder",
          "ExpirationDate":"12/2030",
          "SecurityCode":"123",
          "Brand":"Visa"
      }
    }
 }
 
 cielo.creditCard.simpleTransaction(dadosSale)
     .then((data) => {
         console.log(data);
         res.send('Cielo funcionou!')
     })
})

app.listen(3000, function () {
  console.log('Example app listening on port 3000!');
});

Muito obrigado!

Aplicação quebra e não exibe corretamente o erro

Estou tentando desenvolver uma API com Node JS utilizando seu client. Funciona normalmente, se tudo correr bem, ou seja se faltar um parâmetro por exemplo, a aplicação finaliza e não exibe de maneira amigável o retorno do erro (API Cielo). Gostaria de uma ajuda.
Segue o erro abaixo. Observação: node v8.9.0 e estou utilizando async/away.

/home/max/Agendamento/1972-master/node_modules/cielo/lib/library.js:29
        if ([200, 201].indexOf(statusCode) === -1) throw new Error(`Ocorre um erro ao fazer a requisição. StatusCode: ${statusCode}`)
                                                   ^

Error: Ocorre um erro ao fazer a requisição. StatusCode: 400
    at IncomingMessage.<anonymous> (/home/max/Agendamento/1972-master/node_modules/cielo/lib/library.js:29:58)
    at emitNone (events.js:111:20)
    at IncomingMessage.emit (events.js:208:7)
    at endReadableNT (_stream_readable.js:1056:12)
    at _combinedTickCallback (internal/process/next_tick.js:138:11)
    at process._tickCallback (internal/process/next_tick.js:180:9)

Segue parte do service (com CardNumber = "", propositalmente)

exports.creditoSimples = async() => {
    var dadosSale = {  
        "MerchantOrderId":"CONSULTA2019000001",
        "Customer":{  
           "Name":"Comprador crédito simples"
        },
        "Payment":{  
          "Type":"CreditCard",
          "Amount":15700,
          "Installments":1,
          "SoftDescriptor":"123456789ABCD",
          "CreditCard":{  
              "CardNumber":"",
              "Holder":"Teste Holder",
              "ExpirationDate":"12/2030",
              "SecurityCode":"123",
              "Brand":"Visa"
          }
        }
     }
     const transaction = await cielo.creditCard.simpleTransaction(dadosSale);
     return transaction;
}

Segue parte do controller

// Transação Simples
exports.post = async(req, res, next) => {
    
    try {
        var data = await svCielo.creditoSimples();
        console.log('Crédito Simples ->', data)
        res.status(201).send({
            message: 'Transação realizada com sucesso!'
        });
    } catch (e) {
        console.log(e);
        res.status(500).send({
            message: 'Falha ao processar sua requisição'
        });
    }
};

Rota utilizada

router.post('/simples', controller.post);

Split de pagamento

Ola,

Existe a intenção de implementar o split de pagamento nesse pacote? Estou buscando algo e não encontro, e este pacote uso há algum tempo e gosto muito.

Abraços

Super Link

A criação da Opção de pagamento por links achei super interessante. Contudo, gostaria de saber se é possível utilizar está API para realizar a geração de novos links para pagamento. Porque procurei opção de inserir o clientID e o Token e não encontrei. Será que a geração de novos pagamento por links só pode ser efetuado via POST?

Tratamento dos dados para boleto

Olá,

É mais uma dúvida do que feature.... mas senão tiver isso seria legal implementar... os dados que envio para geração de boleto, como um endereço com acentuação, a lib "banzeh/cielo" já faz todo o tratamento desses dados?

Busca dos cartões registrados

Olá,

Fiz algumas modificações locais apenas para fazer o GET com o cartão tokenizado e gostaria de saber se você poderia fazer estas alterações também para futuros projetos que possam utilizar e para nós também.

O método no cielo.js ficou assim:

controller.consultaTokenizedCard = (data) => {
  const o = {
    hostname: URL_CONSULTA,
    path: `/1/card/${data.token}`,
    method: 'GET'
  }
  
  return get(Object.assign(requestOptions, o), data)
}

No index.js em 'cards'

cards: {
     createTokenizedCard: cielo.createTokenizedCard,
     consultaTokenizedCard: cielo.consultaTokenizedCard
   },

E para a documentação

const cartao= {
    "token": '66b2c162-efbf-4692-aee5-e536c0f81037'
}

const card = await cielo.cards.consultaTokenizedCard(cartao)

console.log('Consulta token', card)

ou

cielo.cards.consultaTokenizedCard(cartao)
.then((data) => {
    console.log(data)
})
.catch((err) => {
    console.log(err);
})

Obrigado.

Sem retorno no ambiente de testes

Ola banzeh,

Quando seto o sandbox: true, eu não recebo nada de retorno. Sem erro, sem Json.
Se coloco true no sandbox, eu recebo autorização negada por conta de usar um numero de cartão inválido.

Estou usando o
node v10.0.0
npm v5.6.0

Problem to initialize it.

Describe the bug
Can't initialize the cielo instance using the keyword new.

To Reproduce
Steps to reproduce the behavior:

  1. Go to install its package: https://github.com/banzeh/cielo#-installation
  2. Go to initialize its instance https://github.com/banzeh/cielo#iniciando
  3. See error:

TypeError: cielo_1.Cielo is not a constructor at Object.<anonymous> (/Users/anzileiro/projects/azdata/history-market-cron/src/cielo.ts:13:21) at Module._compile (internal/modules/cjs/loader.js:959:30) at Module.m._compile (/Users/anzileiro/.nvm/versions/node/v12.14.0/lib/node_modules/ts-node/src/index.ts:814:23) at Module._extensions..js (internal/modules/cjs/loader.js:995:10) at Object.require.extensions.<computed> [as .ts] (/Users/anzileiro/.nvm/versions/node/v12.14.0/lib/node_modules/ts-node/src/index.ts:817:12) at Module.load (internal/modules/cjs/loader.js:815:32) at Function.Module._load (internal/modules/cjs/loader.js:727:14) at Function.Module.runMain (internal/modules/cjs/loader.js:1047:10) at main (/Users/anzileiro/.nvm/versions/node/v12.14.0/lib/node_modules/ts-node/src/bin.ts:226:14) at Object.<anonymous> (/Users/anzileiro/.nvm/versions/node/v12.14.0/lib/node_modules/ts-node/src/bin.ts:485:3)

Expected behavior
To get the instance.

Screenshots
Screen Shot 2020-05-18 at 14 13 11

Desktop (please complete the following information):

  • OS: [MacOS Catalina 10.15.4]

Uso com TS

Estou tentando utilizar junto com o firebase cloud functions utilizando typescript (v3.2.2) e cielo (^1.1.2) mas não consigo importar o módulo. Diz que não existe, já alterei tsconfig.json para aceitar JS e nada.

Alguém sabe como posso importar o módulo e usar perfeitamente no ts ou devo portar o código do módulo pra typescript para conseguir a importação?

Merchant Key

Realizei várias formas de cadastro no site da Cielo, porém em nenhum lugar consigo encontrar a Merchant Key necessária para a API.
Como faço para obter a chave e começar a testar?

Adicionando opção para cancelar recorrencia agenda.

Is your feature request related to a problem? Please describe.

curl
curl --request PUT "https://apisandbox.cieloecommerce.cielo.com.br/1/RecurrentPayment/{RecurrentPaymentId}/Deactivate"
--header "Content-Type: application/json"
--header "MerchantId: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
--header "MerchantKey: 0123456789012345678901234567890123456789"
--header "RequestId: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
--data-binary
--verbose

URL CIELO

Describe the solution you'd like
Desabilitar um pedido recorrente

Additional context
Seria muito importante ter a parte de cancelamento do pagamento recorrente junto a cielo.

Code 101

Olá, recebo o codigo 101 - MerchantId is required.
Passo os parâmetros usando como referencia sua descrição e com MerchantId cadastrado na Cielo.
Pode me ajudar com esse erro?
Obrigado

Enum Discovery

Estou utilizando seu package para integração com a cielo via node, e em testes de crédito (creio que débito também), estou com problemas para obter o retorno com cartão do tipo discover.

Vi que no enum EnumBrands, o discover está como DISCOVERY, programo há pouco tempo e não tenho certeza se é isso, mas utilizando o postman batendo direto na api da cielo consegui obter o retorno enviando o brand como DISCOVER.

erro:
image

retorno correto:
image (1)

Abraço,
Vinicius Colasanto.

Consulta bin

Gostaria de saber se para reconhecer a bandeira do cartão vc utiliza uma API diferente da ConsultaBin para mandar o Request de uma compra.
Pois estou testando aqui, o ConsultaBin funciona apenas com cartões Visa e Master, fora isso, não está reconhecendo certo de acordo com os 6 números que passo como parâmetro.

Consulta de Vendas

Acredito que o URL para consulta de transações esteja errado (apisandbox.cieloecommerce.cielo.com.br).
Pela documentação deveria buscar de "https://apiquerysandbox.cieloecommerce.cielo.com.br".

Usei as URL's de sandbox para ilustrar o problema.
Acredito que basta alterar o URL para que a consulta funcione.
Vou submeter uma PR assim que terminar de editar localmente.

Erro ao tentar usar com AWS Lambda

Estou tentando rodar no Lambda da AWS mas estou com um erro que não consegui resolver.

O código que estou testando:

exports.handler = (event, context, callback) => {
   
   const paramsCielo = {
        'MerchantId': 'e60c1e21cf8743d1bc1fbd760fe0aba4',
        'MerchantKey': 'LVYLUTLJYYIXXRUQMXLIMYEDLRVCRWHNGYQFIVIG',
        'sandbox': true,
        'debug': false
	};
	
	var cielo = require('cielo')(paramsCielo);
   
    callback(null, paramsCielo);
};

O erro:

Function Logs
2018-04-26 19:05:04.910 /var/task/node_modules/cielo/cielo.js:183
			let optionsCopy = {...options};
			                   ^^^
SyntaxError: Unexpected token ...
    at createScript (vm.js:56:10)
    at Object.runInThisContext (vm.js:97:10)
    at Module._compile (module.js:542:28)
    at Object.Module._extensions..js (module.js:579:10)
    at Module.load (module.js:487:32)
    at tryModuleLoad (module.js:446:12)
    at Function.Module._load (module.js:438:3)
    at Module.require (module.js:497:17)
    at require (internal/module.js:20:19)
    at exports.handler (/var/task/cielo/index.js:10:30)

Esse erro é por conta de usar o AWS Lambda ou algo que tenho que alterar no pacote?

Abcs

Props 'phone' in model CustomerModel

Describe the bug
In some cases the user can put only phone and not a mail, in this case on Type CustomerModel don't have this possibility.

To Reproduce
Steps to reproduce the behavior:

  1. Now type model is 'https://github.com/banzeh/cielo/blob/master/src/models/customer.model.ts'
  2. On this doc has the value Phone, on this response have a phone, but in response of payment consult has too.
    https://developercielo.github.io/manual/cielo-ecommerce#resposta117
  3. See error

Expected behavior
You can check this think please?

Ocorre um erro ao fazer a requisição. StatusCode: 400.

Por muito tempo funcionava tudo corretamente. Mas recentemente comecei a receber esse erro da Cielo:

Ocorre um erro ao fazer a requisição. StatusCode: 400.

Estou usando chaves de acesso ao sandbox recém geradas. Alguma ideia do que pode ser?

Compra Mastercard

Quando tento realizar uma compra usando o Brand: 'Mastercard', ele me retorna o seguinte erro:

[{"Code": "999", "Message": "Error converting value \"Mastercard\" to type 'Braspag.CommonTYpes.Enums.BrandEnum'. Path 'DebitCard.Brand', line 1, position 388"}]

Alguém sabe o que o que esotu fazendo de errado. Meu cartão está sendo passado como:

número do cartão: 5111111111111111
cvc: 999
data: 12/2020
Holder: "Teste"

OBS: Usando pelo sandbox.

Tratamento de Dados pagamento Cartão.

Gostaria que fosse implementado a utilização de casas decimais na API. Estou com meu cadastro fechado na Cielo e eu não faço ideia do motivo pelos quais eles fecharam o meu cadastro. O que eu posso imaginar é que seja pela utilização de casas decimais na hora de tentar efetuar o pagamento.
Não faço ideia do motivo do bloqueio e acredito também que falta alertar à equipe de segurança que existem programadores que utilizam a API e por um simples valor TRUE/FALSE ou até mesmo casas decimais podem resultar em problemas e que os tais não podem ser considerados como tentativa de fraude.
Eu passei horas implementando a API de vocês e infelizmente eu agora estou com o meu cadastro bloqueado e estão pedindo um prazo de 180 dias para "estudar o caso".

Peço por gentileza que seja feita algo em relação à isso. Estou com meu aplicativo parado por conta disso.
Atenciosamente,
Marcos Porto

Recorrência retornando sem código ou erro

Describe the bug
Ao criar uma recorrência, o retorno na trás nenhum dado, nem mesmo, código de erro

To Reproduce
Steps to reproduce the behavior:

  • Utilizei do método cielo.recurrent.create();
  • Contendo os parâmetros: merchantOrderId, customer, payment;
  • No objeto Payment tenho recurrentPayment e creditCard;
  • O curioso é que se eu retirar o atributo recurrentPayment do objeto payment ele funciona como uma venda normal (pelo mesmo método citado acima).

Expected behavior
Realizar uma recorrência e retornar os dados da recorrência, caso erro, retornar a mensagem de erro consistente. No caso, é retornado esse erro:

{
  statusCode: '',
  request: '{"merchantOrderId":"12345678","customer":{"name":"Fulano de Tal"},"payment":{"type":"CreditCard","amount":50,"installments":1,"returnUrl":"https://google.com.br","recurrentPayment":{"authorizeNow":true,"endDate":"2020-12-12","interval":"MONTHLY"},"creditCard":{"cardNumber":"5223 4049 1585 0591","holder":"Fulano de Tal","expirationDate":"05/2022","securityCode":"111","saveCard":false,"brand":"MASTER"}}}',
  response: ''
}

Desktop (please complete the following information):

  • OS: macOS Catalina
  • Browser: Utilizei o Insomnia
  • Version: 2020.2.1

Additional context
Cartão gerado por um gerador web com o final 1 para validar a bandeira. (utilizando sandbox: true e debug: true)

A API não envia o `Customer Address Country is Required`

Describe the bug
Quando adicionamos o endereó do cliente a SandBox Cielo retorna Customer Address Country is Required, contudo na request estou enviando os dados completos com o campo country.

**** DADOS FICTÍCIOS ****

REQUEST:

const dadosTransacao = {
customer: {
Name: pedido.comprador.nome,
Email: pedido.comprador.email,
Identity: pedido.comprador.cpf_cnpj,
IdentityType: pedido.comprador.cpf_cnpj.length === 11 ? 'CPF' : 'CNPJ',
//status: 'NEW',
Address: {
street: pedido.comprador.endereco,
number: pedido.comprador.numero,
complement: pedido.comprador.complemento,
zipCode: pedido.comprador.cep,
city: pedido.comprador.cidade,
state: pedido.comprador.estado,
country: (pedido.comprador.pais === 'Brasil') ? 'BRA' : pedido.comprador.pais,
},
deliveryAddress: {
street: pedido.comprador.endereco,
number: pedido.comprador.numero,
complement: pedido.comprador.complemento,
zipCode: pedido.comprador.cep,
city: pedido.comprador.cidade,
state: pedido.comprador.estado,
country: (pedido.comprador.pais === 'Brasil') ? 'BRA' : pedido.comprador.pais,
},
},
merchantOrderId: pedido.id_pedido_externo,
payment: {
currency: 'BRL',
country: 'BRA',
amount: pagPedido.valor * 100, // o sistema converte decimal para Inteiro pois CIELO recebe valor inteiro,
installments: pedido.pagamento[0].parcelas,
softDescriptor: softDescriptor,
type: EnumCardType.CREDIT,
capture: false,
authenticate: false,
creditCard: {
brand: BandeiraCartao[pagPedido.dados_cartao.bandeira],
cardNumber: numCartao,
securityCode: ("0000" + pagPedido.dados_cartao.cvv.toString()).slice(tamCVV),
holder: pagPedido.dados_cartao.holder_name,
expirationDate: mesExp + '/' + anoExp,
},
},
};

Conteúdo da Response:
{
statusCode: 400,
request: '{"customer":{"Name":"Maurico Reis","Email":"[email protected]","Identity":"43221134606","IdentityType":"CPF","Address":{"street":"Alameda Suzana Viela","number":"135","complement":"","zipCode":"91574-952","city":"Barros de Nossa Senhora","state":"RO"},"deliveryAddress":{"street":"Alameda Suzana Viela","number":"135","complement":"","zipCode":"91574-952","city":"Barros de Nossa Senhora","state":"RO"}},"merchantOrderId":"27320213","payment":{"currency":"BRL","country":"BRA","amount":59688,"installments":3,"softDescriptor":"27320213","type":"CreditCard","capture":false,"authenticate":false,"creditCard":{"brand":"JCB","cardNumber":"3557606997328732","securityCode":"064","holder":"Jordão Nogueira","expirationDate":"10/2025"}}}'

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.