Skip to content

hugopassos/bs2_api

Repository files navigation

Bs2Api

Integração com a API do Banco BS2: https://devs.bs2.com/manual/pix-clientes

TO-DO:

  • Pagamentos (Transfere dinheiro para alguém)
    • Criar pagamento por Chave
    • Criar pagamento Manual
    • 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:

gem 'bs2_api'

E então execute:

bundle install

Ou instale diretamente via:

gem install bs2_api

Configuração

Via variável de ambiente:

BS2_CLIENT_ID
BS2_CLIENT_SECRET
BS2_CLIENT_ENVIRONMENT # production or sandbox. Default to sandbox

ou via initializer:

Bs2Api.configure do |config|
  config.client_id     = 'you_bs2_client_id'
  config.client_secret = 'you_bs2_client_secret'
  config.env           = 'sandbox' # ou production
end

Inicia ordem de Transferência PIX via: Chave

pix_key = Bs2Api::Entities::PixKey.new(
  key: '[email protected]',
  type: 'EMAIL'
)

# 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

pay_key.payment.id
=> "96f0b3c4-4c76-4a7a-9933-9c9f86df7490" # pagamentoId gerado no BS2

pay_key.payment.merchantId
=> "E710278662021061618144401750781P" # endToEndId gerado no BS2

Inicia ordem de Transferência PIX via: Manual

account = Bs2Api::Entities::Account.new(
  bank_code: "218",
  agency: "0993",
  number: "042312",
  type: "ContaCorrente" # ContaCorrente, ContaSalario ou Poupanca
)

customer = Bs2Api::Entities::Customer.new(
  document: "88899988811",
  type: "CPF",
  name: "Rick Sanches",
  business_name: "Nome fantasia" # Utilizar apenas se for type CNPJ
)

receiver_bank = Bs2Api::Entities::Bank.new(
  account: account,
  customer: customer
)

pay_manual = Bs2Api::Payment::Manual.new(receiver_bank).call

pay_manual.payment.id
=> "96f0b3c4-4c76-4a7a-9933-9c9f86df7490" # UUID gerado no BS2

pay_manual.payment.merchantId
=> "E710278662021061618144401750781P" # endToEndId gerado no BS2

Confirmar ordem de transferência

# Após criar um Payment é necessário confirmar
# Nessa etapa o dinheiro é de fato transferido

# 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

# Ou caso tenha criado a ordem via Manual no passo anterior:
payment = pay_manual.payment

amount = 10.50
confirmation = Bs2Api::Payment::Confirmation.new(payment, value: amount).call

# Caso a confirmação de problema, um erro será lançado.
raise Bs2Api::Errors::ConfirmationError

# Caso nenhum erro seja lançado (já é sucesso) porém, você pode ter certeza com
confirmation.success?

Classes de erros:

# 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

About

Integração com API do Banco BS2

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages