README.md in bs2_api-0.2.1 vs README.md in bs2_api-0.3.0

- old
+ new

@@ -1,9 +1,21 @@ # Bs2Api Integração com a API do Banco BS2: https://devs.bs2.com/manual/pix-clientes +TO-DO: +- Pagamentos (**Transfere** dinheiro para alguém) + - [x] Criar pagamento por Chave + - [x] Criar pagamento Manual + - [x] Confirmar pagamento + - [ ] Consultar pagamento +- Recebimentos (**Recebe** dinheiro de alguém) + - [ ] Cobrança estático + - [ ] Cobrança dinâmico + - [ ] Consultar cobrança + + ## Instalação Adicionar no seu Gemfile: ```ruby gem 'bs2_api' @@ -31,114 +43,100 @@ ```ruby Bs2Api.configure do |config| config.client_id = 'you_bs2_client_id' config.client_secret = 'you_bs2_client_secret' - config.pix_environment = 'pix_enviroment' + config.pix_environment = 'sandbox' # ou production end ``` -### Iniciar pagamento por Chave +### Inicia ordem de Transferência PIX via: Chave ```ruby pix_key = Bs2Api::Entities::PixKey.new( key: 'joao@gmail.com', type: 'EMAIL' ) -payment = Bs2Api::Payment::Key.new(pix_key).call -``` +# Caso ocorra algum problema na criação, um erro será lançado +# Veja abaixo (Classes de errors) quais erros que podem ser lançados +pay_key = Bs2Api::Payment::Key.new(pix_key).call -Tipos: -```bash -CPF -CNPJ -PHONE -EMAIL -EVP (Chave aleatória) -``` +pay_key.payment.id +=> "96f0b3c4-4c76-4a7a-9933-9c9f86df7490" # pagamentoId gerado no BS2 +pay_key.payment.merchantId +=> "E710278662021061618144401750781P" # endToEndId gerado no BS2 -### Iniciar pagamento Manual +``` +### Inicia ordem de Transferência PIX via: Manual + ```ruby account = Bs2Api::Entities::Account.new( - bank_code: '341', - bank_name: 'Itaú', - agency: '0944', - number: '09442-1', - type: 'ContaCorrente' + bank_code: "218", + agency: "0993", + number: "042312", + type: "ContaCorrente" # ContaCorrente, ContaSalario ou Poupanca ) customer = Bs2Api::Entities::Customer.new( - document: '88899988811', - type: 'CPF', - name: 'João Silva' + document: "88899988811", + type: "CPF", + name: "Rick Sanches", + business_name: "Nome fantasia" # Utilizar apenas se for type CNPJ ) -receiver = Bs2Api::Entities::Bank.new( - account: account, +receiver_bank = Bs2Api::Entities::Bank.new( + account: account, customer: customer ) -payment = Bs2Api::Payment::Manual.new(receiver).call -``` +pay_manual = Bs2Api::Payment::Manual.new(receiver_bank).call -### Objetos +pay_manual.payment.id +=> "96f0b3c4-4c76-4a7a-9933-9c9f86df7490" # UUID gerado no BS2 -##### Payment +pay_manual.payment.merchantId +=> "E710278662021061618144401750781P" # endToEndId gerado no BS2 +``` + +### Confirmar ordem de transferência ```ruby -payment.id # pagamentoId -payment.merchant_id # endToEndId -payment.receiver # recebedor -payment.payer # pagador +# Após criar um Payment é necessário confirmar +# Nessa etapa o dinheiro é de fato transferido -payment.receiver.class -=> Bs2Api::Entities::Bank +# Tanto a ordem de transferência via chave ou manual tem o mesmo payment. +# Caso tenha criado via chave no passo anterior: +payment = pay_key.payment -payment.payer.class -=> Bs2Api::Entities::Bank +# Ou caso tenha criado a ordem via Manual no passo anterior: +payment = pay_manual.payment -payment.payer.account # conta -=> Bs2Api::Entities::Account +amount = 10.50 +confirmation = Bs2Api::Payment::Confirmation.new(payment, value: amount).call -payment.payer.customer # pessoa -=> Bs2Api::Entities::Customer +# Caso a confirmação de problema, um erro será lançado. +raise Bs2Api::Errors::ConfirmationError -payment.to_hash -{ - "pagamentoId"=>"123", - "endToEndId"=>"456", - "recebedor"=>{ - "ispb"=>"71027866", - "conta"=>{ - "banco"=>"218", - "bancoNome"=>"BCO BS2 S.A.", - "agencia"=>"0001", - "numero"=>"3134806", - "tipo"=>"ContaCorrente" - }, - "pessoa"=>{ - "documento"=>"25215188000116", - "tipoDocumento"=>"CNPJ", - "nome"=>"Teste Automatizado", - "nomeFantasia"=>nil - } - }, - "pagador"=>{ - "ispb"=>"71027866", - "conta"=>{ - "banco"=>"218", - "bancoNome"=>"BCO BS2 S.A.", - "agencia"=>"0001", - "numero"=>"3134806", - "tipo"=>"ContaCorrente" - }, - "pessoa"=>{ - "documento"=>"25215188000116", - "tipoDocumento"=>"CNPJ", - "nome"=>"Teste Automatizado", - "nomeFantasia"=>nil - } - } -} +# Caso nenhum erro seja lançado (já é sucesso) porém, você pode ter certeza com +confirmation.success? +``` +--- +### Classes de erros: +```ruby +# Todos erros herdam de: +Bs2Api::Errors::Base + +Bs2Api::Errors::BadRequest +Bs2Api::Errors::ConfirmationError +Bs2Api::Errors::InvalidCustomer +Bs2Api::Errors::InvalidPixKey +Bs2Api::Errors::MissingConfiguration +Bs2Api::Errors::ServerError +Bs2Api::Errors::Unauthorized + +# Caso não queira tratar um erro em específico basta fazer rescue do Base +rescue Bs2Api::Errors::Base => e + puts "Erro: #{e.message}" +end ``` \ No newline at end of file