defmodule ExOAPI.Stripe.SDK.PaymentMethods do @doc """ **description**:

Creates a PaymentMethod object. Read the Stripe.js reference to learn how to create PaymentMethods via Stripe.js.

Instead of creating a PaymentMethod directly, we recommend using the PaymentIntents API to accept a payment immediately or the SetupIntent API to collect payment method details ahead of a future payment.

""" @spec post_payment_methods( client :: ExOAPI.Client.t(), body :: %{ :wechat_pay => %{}, :us_bank_account => %{ :routing_number => String.t(), :account_type => String.t() | :checking | :savings, :account_number => String.t(), :account_holder_type => String.t() | :company | :individual }, :type => String.t() | :acss_debit | :afterpay_clearpay | :alipay | :au_becs_debit | :bacs_debit | :bancontact | :boleto | :card | :customer_balance | :eps | :fpx | :giropay | :grabpay | :ideal | :klarna | :konbini | :oxxo | :p24 | :paynow | :sepa_debit | :sofort | :us_bank_account | :wechat_pay, :sofort => %{:country => String.t() | :AT | :BE | :DE | :ES | :IT | :NL}, :sepa_debit => %{:iban => String.t()}, :paynow => %{}, :payment_method => String.t(), :p24 => %{ :bank => String.t() | :alior_bank | :bank_millennium | :bank_nowy_bfg_sa | :bank_pekao_sa | :banki_spbdzielcze | :blik | :bnp_paribas | :boz | :citi_handlowy | :credit_agricole | :envelobank | :etransfer_pocztowy24 | :getin_bank | :ideabank | :ing | :inteligo | :mbank_mtransfer | :nest_przelew | :noble_pay | :pbac_z_ipko | :plus_bank | :santander_przelew24 | :tmobile_usbugi_bankowe | :toyota_bank | :volkswagen_bank }, :oxxo => %{}, :metadata => map(), :konbini => %{}, :klarna => %{:dob => %{:year => integer(), :month => integer(), :day => integer()}}, :interac_present => %{}, :ideal => %{ :bank => String.t() | :abn_amro | :asn_bank | :bunq | :handelsbanken | :ing | :knab | :moneyou | :rabobank | :regiobank | :revolut | :sns_bank | :triodos_bank | :van_lanschot }, :grabpay => %{}, :giropay => %{}, :fpx => %{ :bank => String.t() | :affin_bank | :agrobank | :alliance_bank | :ambank | :bank_islam | :bank_muamalat | :bank_rakyat | :bsn | :cimb | :deutsche_bank | :hong_leong_bank | :hsbc | :kfh | :maybank2e | :maybank2u | :ocbc | :pb_enterprise | :public_bank | :rhb | :standard_chartered | :uob }, :expand => [String.t()], :eps => %{ :bank => String.t() | :arzte_und_apotheker_bank | :austrian_anadi_bank_ag | :bank_austria | :bankhaus_carl_spangler | :bankhaus_schelhammer_und_schattera_ag | :bawag_psk_ag | :bks_bank_ag | :brull_kallmus_bank_ag | :btv_vier_lander_bank | :capital_bank_grawe_gruppe_ag | :dolomitenbank | :easybank_ag | :erste_bank_und_sparkassen | :hypo_alpeadriabank_international_ag | :hypo_bank_burgenland_aktiengesellschaft | :hypo_noe_lb_fur_niederosterreich_u_wien | :hypo_oberosterreich_salzburg_steiermark | :hypo_tirol_bank_ag | :hypo_vorarlberg_bank_ag | :marchfelder_bank | :oberbank_ag | :raiffeisen_bankengruppe_osterreich | :schoellerbank_ag | :sparda_bank_wien | :volksbank_gruppe | :volkskreditbank_ag | :vr_bank_braunau }, :customer_balance => %{}, :customer => String.t(), :card => %{:token => String.t()} | %{ :number => String.t(), :exp_year => integer(), :exp_month => integer(), :cvc => String.t() }, :boleto => %{:tax_id => String.t()}, :billing_details => %{ :phone => String.t(), :name => String.t(), :email => String.t(), :address => String.t() | %{ :state => String.t(), :postal_code => String.t(), :line2 => String.t(), :line1 => String.t(), :country => String.t(), :city => String.t() } }, :bancontact => %{}, :bacs_debit => %{:sort_code => String.t(), :account_number => String.t()}, :au_becs_debit => %{:bsb_number => String.t(), :account_number => String.t()}, :alipay => %{}, :afterpay_clearpay => %{}, :acss_debit => %{ :transit_number => String.t(), :institution_number => String.t(), :account_number => String.t() } } | map() ) :: {:ok, ExOAPI.Stripe.Schemas.Error.t() | ExOAPI.Stripe.Schemas.PaymentMethod.t() | map()} | {:error, any()} def post_payment_methods(%ExOAPI.Client{} = client, body) do client |> ExOAPI.Client.set_module(ExOAPI.Stripe.SDK) |> ExOAPI.Client.add_method(:post) |> ExOAPI.Client.add_base_url("https://api.stripe.com/", :exoapi_default) |> ExOAPI.Client.add_path("/v1/payment_methods") |> ExOAPI.Client.add_body(body) |> ExOAPI.Client.request() end @doc """ **description**:

Returns a list of PaymentMethods. For listing a customer’s payment methods, you should use List a Customer’s PaymentMethods

""" @type get_payment_methods_opts :: {:starting_after, String.t()} | {:limit, String.t()} | {:expand, String.t()} | {:ending_before, String.t()} | {:customer, String.t()} @spec get_payment_methods( client :: ExOAPI.Client.t(), type :: String.t(), list(get_payment_methods_opts()) ) :: {:ok, ExOAPI.Stripe.Schemas.Error.t() | %{ :url => String.t(), :object => String.t() | :list, :has_more => boolean(), :data => [ExOAPI.Stripe.Schemas.PaymentMethod.t()] } | map()} | {:error, any()} def get_payment_methods(%ExOAPI.Client{} = client, type, opts \\ []) do client |> ExOAPI.Client.set_module(ExOAPI.Stripe.SDK) |> ExOAPI.Client.add_method(:get) |> ExOAPI.Client.add_base_url("https://api.stripe.com/", :exoapi_default) |> ExOAPI.Client.add_path("/v1/payment_methods") |> ExOAPI.Client.add_query("type", type) |> ExOAPI.Client.add_arg_opts(:keyword, :query, opts, [ {:starting_after, "starting_after", "form", true}, {:limit, "limit", "form", true}, {:expand, "expand", "deepObject", true}, {:ending_before, "ending_before", "form", true}, {:customer, "customer", "form", true} ]) |> ExOAPI.Client.request() end @doc """ **description**:

Attaches a PaymentMethod object to a Customer.

To attach a new PaymentMethod to a customer for future payments, we recommend you use a SetupIntent or a PaymentIntent with setup_future_usage. These approaches will perform any necessary steps to ensure that the PaymentMethod can be used in a future payment. Using the /v1/payment_methods/:id/attach endpoint does not ensure that future payments can be made with the attached PaymentMethod. See Optimizing cards for future payments for more information about setting up future payments.

To use this PaymentMethod as the default for invoice or subscription payments, set invoice_settings.default_payment_method, on the Customer to the PaymentMethod’s ID.

""" @spec post_payment_methods_payment_method_attach( client :: ExOAPI.Client.t(), body :: %{:expand => [String.t()], :customer => String.t()} | map(), payment_method :: String.t() ) :: {:ok, ExOAPI.Stripe.Schemas.Error.t() | ExOAPI.Stripe.Schemas.PaymentMethod.t() | map()} | {:error, any()} def post_payment_methods_payment_method_attach(%ExOAPI.Client{} = client, body, payment_method) do client |> ExOAPI.Client.set_module(ExOAPI.Stripe.SDK) |> ExOAPI.Client.add_method(:post) |> ExOAPI.Client.add_base_url("https://api.stripe.com/", :exoapi_default) |> ExOAPI.Client.add_path("/v1/payment_methods/{payment_method}/attach") |> ExOAPI.Client.add_body(body) |> ExOAPI.Client.replace_in_path("payment_method", payment_method) |> ExOAPI.Client.request() end @doc """ **description**:

Updates a PaymentMethod object. A PaymentMethod must be attached a customer to be updated.

""" @spec post_payment_methods_payment_method( client :: ExOAPI.Client.t(), body :: %{ :us_bank_account => %{:account_holder_type => String.t() | :company | :individual}, :metadata => String.t() | map(), :expand => [String.t()], :card => %{:exp_year => integer(), :exp_month => integer()}, :billing_details => %{ :phone => String.t(), :name => String.t(), :email => String.t(), :address => String.t() | %{ :state => String.t(), :postal_code => String.t(), :line2 => String.t(), :line1 => String.t(), :country => String.t(), :city => String.t() } } } | map(), payment_method :: String.t() ) :: {:ok, ExOAPI.Stripe.Schemas.Error.t() | ExOAPI.Stripe.Schemas.PaymentMethod.t() | map()} | {:error, any()} def post_payment_methods_payment_method(%ExOAPI.Client{} = client, body, payment_method) do client |> ExOAPI.Client.set_module(ExOAPI.Stripe.SDK) |> ExOAPI.Client.add_method(:post) |> ExOAPI.Client.add_base_url("https://api.stripe.com/", :exoapi_default) |> ExOAPI.Client.add_path("/v1/payment_methods/{payment_method}") |> ExOAPI.Client.add_body(body) |> ExOAPI.Client.replace_in_path("payment_method", payment_method) |> ExOAPI.Client.request() end @doc """ **description**:

Retrieves a PaymentMethod object.

""" @type get_payment_methods_payment_method_opts :: {:expand, String.t()} @spec get_payment_methods_payment_method( client :: ExOAPI.Client.t(), payment_method :: String.t(), list(get_payment_methods_payment_method_opts()) ) :: {:ok, ExOAPI.Stripe.Schemas.Error.t() | ExOAPI.Stripe.Schemas.PaymentMethod.t() | map()} | {:error, any()} def get_payment_methods_payment_method(%ExOAPI.Client{} = client, payment_method, opts \\ []) do client |> ExOAPI.Client.set_module(ExOAPI.Stripe.SDK) |> ExOAPI.Client.add_method(:get) |> ExOAPI.Client.add_base_url("https://api.stripe.com/", :exoapi_default) |> ExOAPI.Client.add_path("/v1/payment_methods/{payment_method}") |> ExOAPI.Client.replace_in_path("payment_method", payment_method) |> ExOAPI.Client.add_arg_opts(:keyword, :query, opts, [ {:expand, "expand", "deepObject", true} ]) |> ExOAPI.Client.request() end @doc """ **description**:

Detaches a PaymentMethod object from a Customer. After a PaymentMethod is detached, it can no longer be used for a payment or re-attached to a Customer.

""" @spec post_payment_methods_payment_method_detach( client :: ExOAPI.Client.t(), body :: %{:expand => [String.t()]} | map(), payment_method :: String.t() ) :: {:ok, ExOAPI.Stripe.Schemas.Error.t() | ExOAPI.Stripe.Schemas.PaymentMethod.t() | map()} | {:error, any()} def post_payment_methods_payment_method_detach(%ExOAPI.Client{} = client, body, payment_method) do client |> ExOAPI.Client.set_module(ExOAPI.Stripe.SDK) |> ExOAPI.Client.add_method(:post) |> ExOAPI.Client.add_base_url("https://api.stripe.com/", :exoapi_default) |> ExOAPI.Client.add_path("/v1/payment_methods/{payment_method}/detach") |> ExOAPI.Client.add_body(body) |> ExOAPI.Client.replace_in_path("payment_method", payment_method) |> ExOAPI.Client.request() end end