lib/tokens.ex

defmodule GnApiSdkElixir.Tokens do
  @moduledoc """
  Utilizado para gera tokens de pagamento e recuperar dados para criptografia
  """

  alias GnApiSdkElixir.Request

  def opt do
    [timeout: 50_000, recv_timeout: 50_000]
  end

  @doc """
  Salt para criptografia de cartao
  """
  def salt() do
    with {:ok, resp} <- HTTPoison.get("https://tokenizer.gerencianet.com.br/salt", [{"account-code", Application.get_env(:gerencianet, :payee_code)}], opt())
                        |> Request.debug()
                        |> GnApiSdkElixir.Request.parse_response() do
      resp.data
    end
  end

  @doc """
  Recupera a chave publica de criptografia
  """
  def public_key() do
    with {:ok, resp} <- HTTPoison.get("#{Request.base_url()}/v1/pubkey?code=#{Application.get_env(:gerencianet, :payee_code)}", opt())
                        |> Request.debug()
                        |> GnApiSdkElixir.Request.parse_response() do
      resp.data
    end
  end

  @doc """
  Gera o payment_token para os dados do cartao o cartao
  """
  def card(card) do
    headers = [{"account-code", Application.get_env(:gerencianet, :payee_code)},{"Content-Type", "application/json"}]
    url = if (Application.get_env(:gerencianet, :sandbox)), do: "#{Request.base_url()}/v1/card",
                                                            else: "https://tokenizer.gerencianet.com.br/card"
    with {:ok, resp} <- HTTPoison.post(url, Jason.encode!(%{data: card}), headers, opt())
                        |> Request.debug()
                        |> GnApiSdkElixir.Request.parse_response() do
      resp.data
    end
  end
end