JVZELLER / ex-pix-brcode

Elixir implementation of BRCode validation

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

ExPixBRCode - pt-BR

Biblioteca Elixir para validação e leitura de BRCodes destinados ao sistema Pix.

Para a leitura de um BRCode basta:

{:ok,
   %{
     "additional_data_field_template" => %{"reference_label" => "***"},
     "country_code" => "BR",
     "crc" => "1D3D",
     "merchant_account_information" => %{
       "gui" => "br.gov.bcb.pix",
       "chave" => "123e4567-e12b-12d1-a456-426655440000"
     },
     "merchant_category_code" => "0000",
     "merchant_city" => "BRASILIA",
     "merchant_name" => "Fulano de Tal",
     "payload_format_indicator" => "01",
     "transaction_currency" => "986"
   }} = ExPixBRCode.BRCodes.decode(brcode)

Ou fazendo o cast para um Ecto.Schema:

alias ExPixBRCode.BRCodes.Models.BRCode
alias ExPixBRCode.BRCodes.Models.BRCode.{AdditionalDataField, MerchantAccountInfo}

{:ok,
 %BRCode{
   additional_data_field_template: %AdditionalDataField{
     reference_label: "***"
   },
   country_code: "BR",
   crc: "1D3D",
   merchant_account_information: %MerchantAccountInfo{
     chave: "123e4567-e12b-12d1-a456-426655440000",
     gui: "br.gov.bcb.pix",
     info_adicional: nil,
     url: nil
   },
   merchant_category_code: "0000",
   merchant_city: "BRASILIA",
   merchant_name: "Fulano de Tal",
   payload_format_indicator: "01",
   point_of_initiation_method: nil,
   transaction_amount: nil,
   transaction_currency: "986",
   type: :static
 }} = ExPixBRCode.BRCodes.decode_to(brcode)

Após o decode, caso o type seja de algum Pix dinâmico, é necessário carregar os dados do JWS. Para isso, basta:

alias ExPixBRCode.Payments.Models.PixPayment
alias ExPixBRCode.Payments.Models.PixPayment.{Calendario, Valor}

ExPixBRCode.Payments.DynamicPixLoader.load_pix(client, url) |> IO.inspect()
{:ok,
 %PixPayment{
   calendario: %Calendario{
     apresentacao: ~U[2020-11-28 03:15:39Z],
     criacao: ~U[2020-11-13 23:59:49Z],
     expiracao: 86400
   },
   chave: "14413050762",
   devedor: nil,
   infoAdicionais: [],
   revisao: 0,
   solicitacaoPagador: nil,
   status: :ATIVA,
   txid: "4DE46328260C11EB91C04049FC2CA371",
   valor: %Valor{original: #Decimal<1.00>}
 }}

Nesse caso há dois parâmetros: uma instância de Tesla.Client e a URL do Pix que deve retornar um JWS válido.

!!! IMPORTANTE !!! Esta biblioteca NÃO faz a validação TLS exigida pelo BACEN. Isso porque é necessário ter acesso ao sistema SPI (Sistema de Pagamentos Instantâneos) para poder baixar um arquivo com os certificados dos participantes. Iremos colocar um exemplo de configuração apenas ilustrativo, porém fica a cargo de quem estiver usando a biblioteca providenciar um Tesla.Client que:

  • Garanta que só se conectará em servidores TLS 1.2+
  • Garanta que a validação de certificados e domínios seja de acordo com o arquivo providenciado pelo BACEN através do sistema SPI

Basicamente isso pode ser feito através da opção verify_fun da aplicação de :ssl do Erlang, mas não está feito nesta biblioteca.

ExPixBRCode - en-US

Elixir library for validating and reading BRCodes used in Pix payments.

Installation

If available in Hex, the package can be installed by adding ex_pix_brcode to your list of dependencies in mix.exs:

def deps do
  [
    {:ex_pix_brcode, "~> 0.1.0"}
  ]
end

Documentation can be generated with ExDoc and published on HexDocs. Once published, the docs can be found at https://hexdocs.pm/ex_pix_brcode.

About

Elixir implementation of BRCode validation

License:Apache License 2.0


Languages

Language:Elixir 100.0%