ingresse / starkbank-sdk-elixir

SDK to facilitate Elixir integrations with the Stark Bank API

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

StarkBank

Overview

This is a simplified pure Elixir SDK to ease integrations with the Auth and Charge services of the Stark Bank API v1.

Installation

The package can be installed by adding stark_bank to your list of dependencies in mix.exs:

def deps do
  [
    {:stark_bank, "~> 1.1.1"}
  ]
end

Usage

Login

{:ok, credentials} = StarkBank.Auth.login(:sandbox, "username", "email@email.com", "password")

Logout

{:ok, response} = StarkBank.Auth.logout(credentials)

Create charge customers

customers = [
  %StarkBank.Charge.Structs.CustomerData{
    name: "Arya Stark",
    email: "arya.stark@westeros.com",
    tax_id: "416.631.524-20",
    phone: "(11) 98300-0000",
    tags: ["little girl", "no one", "valar morghulis", "Stark"],
    address: %StarkBank.Charge.Structs.AddressData{
      street_line_1: "Av. Faria Lima, 1844",
      street_line_2: "CJ 13",
      district: "Itaim Bibi",
      city: "São Paulo",
      state_code: "SP",
      zip_code: "01500-000"
    }
  },
  %StarkBank.Charge.Structs.CustomerData{
    name: "Jon Snow",
    email: "jon.snow@westeros.com",
    tax_id: "012.345.678-90",
    phone: "(11) 98300-0001",
    tags: ["night`s watch", "lord commander", "knows nothing", "Stark"],
    address: %StarkBank.Charge.Structs.AddressData{
      street_line_1: "Av. Faria Lima, 1844",
      street_line_2: "CJ 13",
      district: "Itaim Bibi",
      city: "São Paulo",
      state_code: "SP",
      zip_code: "01500-000"
    }
  }
]

{:ok, customers} = StarkBank.Charge.Customer.post(credentials, customers)

Get charge customers

{:ok, all_customers} = StarkBank.Charge.Customer.get(credentials)
# or
{:ok, customer} = StarkBank.Charge.Customer.get_by_id(credentials, hd(customers).id)

Get charge customers

{:ok, all_customers} = StarkBank.Charge.Customer.get(credentials)
# or
{:ok, customer} = StarkBank.Charge.Customer.get_by_id(credentials, hd(customers).id)

Delete charge customers

{:ok, response} = StarkBank.Charge.Customer.delete(credentials, customers)

Overwrite charge customers information

{:ok, altered_customer} = StarkBank.Charge.Customer.put(credentials, altered_customer)

Create charges

charges = [
  %StarkBank.Charge.Structs.ChargeData{
    amount: 100_00,
    customer: altered_customer.id
  },
  %StarkBank.Charge.Structs.ChargeData{
    amount: 1_000_00,
    customer: "self",
    due_date: Date.utc_today(),
    fine: 10,
    interest: 15,
    overdue_limit: 3,
    tags: ["cash-in"],
    descriptions: [
      %StarkBank.Charge.Structs.ChargeDescriptionData{
        text: "part-1",
        amount: 30_000
      },
      %StarkBank.Charge.Structs.ChargeDescriptionData{
        text: "part-2",
        amount: 70_000
      }
    ]
  },
  %StarkBank.Charge.Structs.ChargeData{
    amount: 32_171_32,
    customer: %StarkBank.Charge.Structs.CustomerData{
      name: "Brandon Stark",
      email: "bran.builder@westeros.com",
      tax_id: "123.456.789-09",
      phone: "(11) 98300-0000",
      tags: ["builder", "raven", "Stark", "test"],
      address: %StarkBank.Charge.Structs.AddressData{
        street_line_1: "Av. Faria Lima, 1844",
        street_line_2: "CJ 13",
        district: "Itaim Bibi",
        city: "São Paulo",
        state_code: "SP",
        zip_code: "01500-000"
      }
    },
    tags: ["test"]
  }
]

{:ok, charges} = StarkBank.Charge.post(credentials, charges)

Get created charges

{:ok, all_charges} = StarkBank.Charge.get(credentials)

Get charge PDF

{:ok, pdf} =
  StarkBank.Charge.get_pdf(
    credentials,
    hd(all_charges).id
  )

{:ok, file} = File.open("charge.pdf", [:write])
IO.binwrite(file, pdf)
File.close(file)

Delete created charge

StarkBank.Charge.delete(
  credentials,
  [hd(all_charges).id]
)

Get charge logs

{:ok, response} = StarkBank.Charge.Log.get(credentials, [hd(all_charges).id])
# or
{:ok, response} = StarkBank.Charge.Log.get_by_id(credentials, hd(charge_logs).id)

Test

Alter @env, @username, @email, @password to your values on test/stark_bank_test.exs. IMPORTANT: Avoid using your production credentials to run this test script, as it will request creations and deletions of charges and related entities.

Afterwards, run:

mix test --trace

About

SDK to facilitate Elixir integrations with the Stark Bank API


Languages

Language:Elixir 100.0%