Saving incoming data from Stripe

UPDATE:

The answer is that the data are sent back to the application.

Alternatively, ngrok can also be used.

Fot test you will need 3 terminals open:

  1. In the first terminal, ensure the Stripe CLI listener is running (stripe listen --forward-to localhost:4000/webhook/stripe)
  2. In the second terminal, ensure your app is running (mix phx.server). Remember you may need to run source .env in the terminal first
  3. In the third terminal, execute stripe trigger checkout.session.completed.

I am replacing step three by going through and filling in the data directly in the application.

My handle event for saving to the database now looks like this:

  @impl true
  def handle_event(%Stripe.Event{type: "invoice.paid"} = event) do
    IO.inspect(gettext("Payment Success"))
    IO.inspect(event)

    %{customer: customer_id, customer_email: email, amount_paid: amount} = event.data.object

    Purchases.create_customer(%{
      email: email,
      stripe_customer_id: customer_id,
      amount: amount
    })

    {:ok, "success"}
  end

Practically the whole issue with a link to a sample application is available in the tutorial at this link.

3 Likes