Как захватить и сохранить электронную почту пользователя с Stripe-Elixir - PullRequest
0 голосов
/ 01 июля 2018

У меня есть следующий код, и я могу создавать новых пользователей. Письмо не сохраняется.

Код:

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

      def index(conn, _params) do

        {:ok, customer_data} = Stripe.Customer.create(%{email: conn.body_params['stripeEmail']})

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

enter image description here

Как мне перехватить и сохранить их электронную почту?

1 Ответ

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

С этим кодом я могу заметить два глюка:

  1. существует значительная разница между одинарными и двойными кавычками в литералах / терминах Elixir. Разница подробно описана в Руководстве по эликсиру, глава 6 и в целом: одинарные кавычки, используемые для списков символов , которые в принципе не имеют ничего общего с двоичными файлами ( строки.)

Посмотрите:

iex|1 ▶ 'abc' == [97, 98, 99]
#⇒ true

'abc' по существу совпадает с (в псевдокоде)

[
   ascii-value-of(character a),
   ascii-value-of(character b),
   ascii-value-of(character c)
]

Вероятно, это следует считать наследием, которое пришло из XX века. Всякий раз, когда вам нужен двоичный файл (строка,) , всегда используйте двойные кавычки .

  1. Еще одна проблема - вы назначаете и сразу отбрасываете значение, возвращаемое из Stripe.Customer.create. Это маловероятно, что вы действительно хотите сделать; чтобы передать его нижележащему контроллеру, используйте Plug.Conn.assign/3 (или, по крайней мере, подтвердите результат вызова функции create и каким-то образом исправьте ошибки.

Подводя итог, решение, которое могло бы быть надежным, выглядит следующим образом:

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

  def index(conn, %{"stripeEmail" => email} = _params) do
    with {:ok, customer_data} <- Stripe.Customer.create(%{email: email}) do
      conn
      |> assign(:customer_data, customer_data)
      |> render("index.html")
    else
      # render error page
    end
  end
end
...