如何使用Stripe-Elixir捕获和存储用户的电子邮件

时间:2018-07-01 10:23:41

标签: elixir stripe-payments phoenix-framework stripe-elixir

我有以下代码,并且能够创建新用户。该电子邮件未存储。

代码:

    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 :(得分:0)

我可以发现此代码有两个小故障:

  1. 在Elixir的文字/术语中,单引号和双引号之间存在显着差异。差异在Elixir Guide, Chapter 6中进行了详细描述,并且通常是:用于字符列表的单引号与 binaries (字符串)基本上没有共同点。 / li>

看:

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

'abc'与(在伪代码中)

基本相同
[
   ascii-value-of(character a),
   ascii-value-of(character b),
   ascii-value-of(character c)
]

这应该被认为是二十世纪以来的遗产。每当需要二进制文件(字符串)时,总是使用双引号

  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