Current section

Files

Jump to
ex_openpay lib openpay cards.ex
Raw

lib/openpay/cards.ex

defmodule ExOpenpay.Cards do
@moduledoc """
Functions for working with cards at Openpay. Through this API you can:
* create a card,
* update a card,
* get a card,
* list cards,
* count cards,
* refund a card,
* partially refund a card.
Openpay API reference: https://www.openpay.mx/docs/api/?shell#tarjetas
"""
def endpoint_for_entity(entity_type, entity_id) do
case entity_type do
:customer -> "customers/#{entity_id}/cards"
:commerce -> "cards"
end
end
@doc """
Create a card.
Creates a card for given owner type, owner ID using params.
* object,
* number,
* cvv2,
* expiration_month,
* expiration_year.
Returns a `{:ok, card}` tuple.
## Examples
params = [
card_number: "4111111111111111",
holder_name: "Juan Perez Ramirez",
expiration_year: "20",
expiration_month: "12",
cvv2: "110"
# device_session_id: "",
]
{:ok, card} = ExOpenpay.Cards.create(:customer, customer_id, params)
"""
def create(owner_type, owner_id, params) do
create owner_type, owner_id, params, ExOpenpay.config_or_api_key
end
@doc """
Create a card. Accepts ExOpenpay API key.
Creates a card for given owner using params.
* object,
* number,
* cvv2,
* expiration_month,
* expiration_year.
Returns a `{:ok, card}` tuple.
## Examples
{:ok, card} = ExOpenpay.Cards.create(:customer, customer_id, params, key)
"""
def create(owner_type, owner_id, params, key) do
ExOpenpay.make_request_with_key(:post, endpoint_for_entity(owner_type, owner_id), key, params)
|> ExOpenpay.Util.handle_openpay_response
end
@doc """
Get a card.
Gets a card for given owner using card ID.
Returns a `{:ok, card}` tuple.
## Examples
{:ok, card} = ExOpenpay.Cards.get(:customer, customer_id, card_id)
"""
def get(owner_type, owner_id, id) do
get owner_type, owner_id, id, ExOpenpay.config_or_env_key
end
@doc """
Get a card. Accepts ExOpenpay API key.
Gets a card for given owner using card ID.
Returns a `{:ok, card}` tuple.
## Examples
{:ok, card} = ExOpenpay.Cards.get(:customer, customer_id, card_id, key)
"""
def get(owner_type, owner_id, id, key) do
ExOpenpay.make_request_with_key(:get, "#{endpoint_for_entity(owner_type, owner_id)}/#{id}", key)
|> ExOpenpay.Util.handle_openpay_response
end
@doc """
Get a list of cards.
Gets a list of cards for given owner.
Accepts the following parameters:
* `starting_after` - an offset (optional),
* `limit` - a limit of items to be returned (optional; defaults to 10).
Returns a `{:ok, cards}` tuple, where `cards` is a list of cards.
## Examples
{:ok, cards} = ExOpenpay.Cards.list(:customer, customer_id, 5) # Get a list of up to 10 cards, skipping first 5 cards
{:ok, cards} = ExOpenpay.Cards.list(:customer, customer_id, 5, 20) # Get a list of up to 20 cards, skipping first 5 cards
"""
def list(owner_type, owner_id, starting_after \\ "", limit \\ 10) do
list owner_type, owner_id, ExOpenpay.config_or_env_key, starting_after, limit
end
@doc """
Get a list of cards. Accepts ExOpenpay API key.
Gets a list of cards for a given owner.
Accepts the following parameters:
* `starting_after` - an offset (optional),
* `limit` - a limit of items to be returned (optional; defaults to 10).
Returns a `{:ok, cards}` tuple, where `cards` is a list of cards.
## Examples
{:ok, cards} = ExOpenpay.Cards.list(:customer, customer_id, key, 5) # Get a list of up to 10 cards, skipping first 5 cards
{:ok, cards} = ExOpenpay.Cards.list(:customer, customer_id, key, 5, 20) # Get a list of up to 20 cards, skipping first 5 cards
"""
def list(owner_type, owner_id, key, starting_after, limit) do
ExOpenpay.Util.list endpoint_for_entity(owner_type, owner_id), key, starting_after, limit
end
@doc """
Delete a card.
Deletes a card for given owner using card ID.
Returns a `{:ok, card}` tuple.
## Examples
{:ok, deleted_card} = ExOpenpay.Cards.delete("card_id")
"""
def delete(owner_type, owner_id, id) do
delete owner_type, owner_id, id, ExOpenpay.config_or_api_key
end
@doc """
Delete a card. Accepts ExOpenpay API key.
Deletes a card for given owner using card ID.
Returns a `{:ok, card}` tuple.
## Examples
{:ok, deleted_card} = ExOpenpay.Cards.delete("card_id", key)
"""
def delete(owner_type, owner_id, id,key) do
ExOpenpay.make_request_with_key(:delete, "#{endpoint_for_entity(owner_type, owner_id)}/#{id}", key)
end
@doc """
Delete all cards.
Deletes all cards from given owner.
Returns `:ok` atom.
## Examples
:ok = ExOpenpay.Cards.delete_all(:customer, customer_id)
"""
def delete_all(owner_type, owner_id) do
case all(owner_type, owner_id) do
{:ok, cards} ->
Enum.each cards, fn c -> delete(owner_type, owner_id, c["id"]) end
{:error, err} -> raise err
end
end
@doc """
Delete all cards. Accepts ExOpenpay API key.
Deletes all cards from given owner.
Returns `:ok` atom.
## Examples
:ok = ExOpenpay.Cards.delete_all(:customer, customer_id, key)
"""
def delete_all(owner_type, owner_id, key) do
case all(owner_type, owner_id) do
{:ok, customers} ->
Enum.each customers, fn c -> delete(owner_type, owner_id, c["id"], key) end
{:error, err} -> raise err
end
end
@max_fetch_size 100
@doc """
List all cards.
Lists all cards for a given owner.
Accepts the following parameters:
* `accum` - a list to start accumulating cards to (optional; defaults to `[]`).,
* `starting_after` - an offset (optional; defaults to `""`).
Returns `{:ok, cards}` tuple.
## Examples
{:ok, cards} = ExOpenpay.Cards.all(:customer, customer_id, accum, starting_after)
"""
def all(owner_type, owner_id, accum \\ [], starting_after \\ "") do
all owner_type, owner_id, ExOpenpay.config_or_api_key, accum, starting_after
end
@doc """
List all cards. Accepts ExOpenpay API key.
Lists all cards for a given owner.
Accepts the following parameters:
* `accum` - a list to start accumulating cards to (optional; defaults to `[]`).,
* `starting_after` - an offset (optional; defaults to `""`).
Returns `{:ok, cards}` tuple.
## Examples
{:ok, cards} = ExOpenpay.Cards.all(:customer, customer_id, accum, starting_after, key)
"""
def all(owner_type, owner_id, key, accum, starting_after) do
ExOpenpay.Util.list_raw("#{endpoint_for_entity(owner_type, owner_id)}",key, @max_fetch_size, starting_after)
end
@doc """
Get total number of cards.
Gets total number of cards for a given owner.
Returns `{:ok, count}` tuple.
## Examples
{:ok, count} = ExOpenpay.Cards.count(:customer, customer_id)
"""
def count(owner_type, owner_id) do
count owner_type, owner_id, ExOpenpay.config_or_api_key
end
@doc """
Get total number of cards. Accepts ExOpenpay API key.
Gets total number of cards for a given owner.
Returns `{:ok, count}` tuple.
## Examples
{:ok, count} = ExOpenpay.Cards.count(:customer, customer_id, key)
"""
def count(owner_type, owner_id, key) do
ExOpenpay.Util.count "#{endpoint_for_entity(owner_type, owner_id)}", key
end
end