Current section

Files

Jump to
plaid_elixir lib plaid payment_initiation payments.ex
Raw

lib/plaid/payment_initiation/payments.ex

defmodule Plaid.PaymentInitiation.Payments do
@moduledoc """
Functions for Plaid `payment_initiation/payment` endpoints.
"""
import Plaid, only: [make_request_with_cred: 4, validate_cred: 1]
alias Plaid.Utils
@derive Jason.Encoder
defstruct payment_id: nil,
status: nil,
request_id: nil
@type t :: %__MODULE__{
payment_id: String.t(),
status: String.t(),
request_id: String.t()
}
@type params :: %{required(atom) => String.t() | map}
@type config :: %{required(atom) => String.t()}
@endpoint :"payment_initiation/payment"
defmodule Payment do
@doc """
Plaid Payment data structure.
"""
@derive Jason.Encoder
defstruct payment_id: nil,
payment_token: nil,
payment_token_expiration_time: nil,
reference: nil,
amount: 0,
status: nil,
last_status_update: nil,
recipient_id: nil,
schedule: nil,
request_id: nil
@type t :: %__MODULE__{
payment_id: String.t(),
payment_token: String.t(),
payment_token_expiration_time: String.t(),
reference: String.t(),
amount: Plaid.PaymentInitiation.Payments.Payment.Amount.t(),
status: String.t(),
last_status_update: String.t(),
recipient_id: String.t(),
schedule: Plaid.PaymentInitiation.Payments.Payment.Schedule.t(),
request_id: String.t()
}
defmodule Amount do
@moduledoc """
Plaid Payment Amount data structure.
"""
defstruct currency: nil,
amount: 0
@type t :: %__MODULE__{
currency: String.t(),
amount: float
}
end
defmodule Schedule do
@moduledoc """
Plaid Payment Schedule data structure.
"""
defstruct interval: nil,
interval_execution_day: nil,
start_date: nil
@type t :: %__MODULE__{
interval: String.t(),
interval_execution_day: integer(),
start_date: String.t()
}
end
end
@doc """
Creates payment.
Parameters
```
%{
recipient_id: "",
reference: "",
amount: %{
currency: "",
value: 0.00
},
schedule: %{
interval: "",
interval_execution_day: 1,
start_date: ""
},
}
```
"""
@spec create(params, config | nil) ::
{:ok, Plaid.PaymentInitiation.Payments.t()} | {:error, Plaid.Error.t()}
def create(params, config \\ %{}) do
config = validate_cred(config)
endpoint = "#{@endpoint}/create"
make_request_with_cred(:post, endpoint, config, params)
|> Utils.handle_resp(@endpoint)
end
@doc """
Gets payment by payment_id.
Parameters
```
%{
payment_id: ""
}
```
"""
@spec get(params, config | nil) ::
{:ok, Plaid.PaymentInitiation.Payments.Payment.t()} | {:error, Plaid.Error.t()}
def get(params, config \\ %{}) do
config = validate_cred(config)
endpoint = "#{@endpoint}/get"
make_request_with_cred(:post, endpoint, config, params)
|> Utils.handle_resp(@endpoint)
end
@doc """
Lists all payments.
Parameters
```
%{
options: %{
count: 1,
cursor: ""
}
}
```
"""
@spec list(params, config | nil) ::
{:ok, [Plaid.PaymentInitiation.Payments.Payment.t()]} | {:error, Plaid.Error.t()}
def list(params, config \\ %{}) do
config = validate_cred(config)
endpoint = "#{@endpoint}/list"
make_request_with_cred(:post, endpoint, config, params)
|> Utils.handle_resp(@endpoint)
end
end