defmodule Braintree.PaymentMethodNonce do
@moduledoc """
Create a payment method nonce from an existing payment method token
"""
use Braintree.Construction
alias Braintree.HTTP
@type t :: %__MODULE__{
default: String.t(),
description: String.t(),
nonce: String.t(),
three_d_secure_info: String.t(),
type: String.t(),
details: map,
is_locked: boolean,
consumed: boolean,
security_questions: [any]
}
defstruct default: nil,
description: nil,
nonce: nil,
three_d_secure_info: nil,
type: nil,
is_locked: false,
details: nil,
consumed: false,
security_questions: nil
@doc """
Create a payment method nonce from `token`
## Example
{:ok, payment_method_nonce} = Braintree.PaymentMethodNonce.create(token)
payment_method_nonce.nonce
"""
@spec create(String.t(), Keyword.t()) :: {:ok, t} | HTTP.error()
def create(payment_method_token, opts \\ []) do
path = "payment_methods/#{payment_method_token}/nonces"
with {:ok, payload} <- HTTP.post(path, opts) do
{:ok, new(payload)}
end
end
@doc """
Find a payment method nonce, or return an error response if token invalid
## Example
{:ok, payment_method} = Braintree.PaymentMethodNonce.find(token)
payment_method.type #CreditCard
"""
@spec find(String.t(), Keyword.t()) :: {:ok, t} | HTTP.error()
def find(nonce, opts \\ []) do
path = "payment_method_nonces/" <> nonce
with {:ok, payload} <- HTTP.get(path, opts) do
{:ok, new(payload)}
end
end
@doc false
def new(%{"payment_method_nonce" => map}) do
super(map)
end
end