С этим кодом я могу заметить два глюка:
- существует значительная разница между одинарными и двойными кавычками в литералах / терминах 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 века. Всякий раз, когда вам нужен двоичный файл (строка,) , всегда используйте двойные кавычки .
- Еще одна проблема - вы назначаете и сразу отбрасываете значение, возвращаемое из
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