Stripe-Elixir Как получить «источник оплаты» - PullRequest
0 голосов
/ 03 июля 2018

Я использую этот пакет для включения Stripe в приложение Phoenix:

https://github.com/sikanhe/stripe-elixir


Я пытаюсь создать клиента, который подписывается на план.

defmodule StripeTestWeb.PaymentController do
  use StripeTestWeb, :controller
  use Stripe.API

  def index(conn, %{"stripeEmail" => email} = _params) do
    {:ok, customer_data} = Stripe.Customer.create(%{email: email})

    Stripe.Subscription.create(%{
      customer: customer_data["id"],
      items: [%{plan: "plan_D9JehUOiyPGtgp"}]
    })

    render(conn, "index.html")
  end
end

Клиент создан, но запрос возвращает ошибку при попытке создать подписку. Ошибка:

{
  "error": {
    "code": "resource_missing",
    "doc_url": "https://stripe.com/docs/error-codes/resource-missing",
    "message": "This customer has no attached payment source",
    "type": "invalid_request_error"
  }
}

Я не знаю, что API ожидает от меня в качестве «источника платежа», и не ясно, предполагается ли это отправлять при создании клиента или при создании подписки.

Я использую встроенный код JavaScript для создания всплывающего окна оплаты:

  <form action="payment" method="POST">
      <input type="hidden" name="_csrf_token" value="<%= Plug.CSRFProtection.get_csrf_token()%>">

      <script
      src="https://checkout.stripe.com/checkout.js" class="stripe-button"
      data-key="pk_test_2vzqy4IW9zHAYyKSjDNZkd2l"
      data-amount="14900"
      data-name="Demo Site"
      data-description="Subscription $149"
      data-locale="auto">
      </script>

  </form>

1 Ответ

0 голосов
/ 03 июля 2018

Я не знаком с Stripe Elixir, но вы можете передать source при создании клиента в Stripe, поэтому попробуйте передать его с помощью вызова create.

defmodule StripeTestWeb.PaymentController do
  use StripeTestWeb, :controller
  use Stripe.API

  def index(conn, %{"stripeEmail" => email, "stripeToken" => stripe_token} = _params) do
    {:ok, customer_data} = Stripe.Customer.create(%{email: email, source: stripe_token})

    Stripe.Subscription.create(%{
      customer: customer_data["id"],
      items: [%{plan: "plan_D9JehUOiyPGtgp"}]
    })

    render(conn, "index.html")
  end
end
...