defmodule Transbank.Shared.RequestService do @environments %{ production: "https://webpay3g.transbank.cl/", integration: "https://webpay3gint.transbank.cl/" } def new(environment, endpoint, commerce_code, api_key) do commerce_code = commerce_code api_key = api_key url = if is_nil(environment) do endpoint else @environments[environment] <> endpoint end middleware = [ {Tesla.Middleware.BaseUrl, url}, Tesla.Middleware.JSON, {Tesla.Middleware.Headers, headers(commerce_code, api_key)} ] Tesla.client(middleware) end def set_patpass(trx) do headers_patpass(trx.commerce_code, trx.api_key) end def post(client, body) do Tesla.post(client, "/", body) |> handle_response end def put(client, body) do Tesla.put(client, "/", body) |> handle_response end def get(client) do Tesla.get(client, "/") |> handle_response end def delete(client, body) do Tesla.delete(client, "/", body) |> handle_response end def headers(commerce_code, api_key) do [ {"Tbk-Api-Key-Id", commerce_code}, {"Tbk-Api-Key-Secret", api_key}, {"Content-Type", "application/json"} ] end def headers_patpass(commerce_code, api_key) do [ {"commercecode", commerce_code}, {"Authorization", api_key}, {"Content-Type", "application/json"} ] end defp handle_response({:ok, %{body: %{"error" => error}}}) do {:error, error} end defp handle_response({:ok, %{body: body}}) do {:ok, body} end end