John_Shelby
Saving incoming data from Stripe
Hello everyone,
I am trying to create a payment gateway using Stripe. My solution is based on this tutorial.
I think I have everything set up well, but I’m not sure if Stripe is returning the required data that I would like to store in a database and work with afterwards.
In the tutorial, after a successful payment is made in the terminal after the stripe listen command, the following is the output:
However, my output looks like this:
If the return values from webhook are correct anyway, which I’m not sure. How should I continue to work with them within the handle event to save them?
Thanks to IO.inspect I was expecting some data in the terminal, where for example %Stripe.Event{type: "invoice.paid"}
defmodule MyAppWeb.StripeHandler do
import MyAppWeb.Gettext
@behaviour Stripe.WebhookHandler
@impl true
def handle_event(%Stripe.Event{type: "invoice.paid"} = event) do
IO.inspect(gettext("Payment Success"))
IO.inspect(event)
:ok
end
end
I have added the handler in the endpoint
plug Stripe.WebhookPlug,
at: "/webhook/stripe",
handler: MyAppWeb.StripeHandler,
secret: {Application, :get_env, [:stripity_stripe, :stripe_webhook_secret]}
It’s about storing data like customer_id, emai, etc that I can see in the payment in my Stripe account.
I am still a newbie and this is my first attempt at a payment gateway. Thanks a lot for any advice.
Have a nice day. ![]()
Marked As Solved
John_Shelby
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:
- In the first terminal, ensure the Stripe CLI listener is running (
stripe listen --forward-to localhost:4000/webhook/stripe) - In the second terminal, ensure your app is running (
mix phx.server). Remember you may need to runsource .envin the terminal first - 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.
Popular in Questions
Other popular topics
Categories:
Sub Categories:
Forums
Popular Tags
- #ecto
- #liveview
- #troubleshooting
- #learning-elixir
- #deployment
- #library
- #erlang
- #testing
- #genserver
- #mix
- #absinthe
- #remote-other
- #otp
- #plug
- #how-to-question
- #macros
- #postgres
- #channels
- #elixirconf
- #exunit
- #discussion
- #code-sync
- #javascript
- #podcasts
- #onsite
- #dialyzer
- #docker
- #authentication
- #umbrella
- #full-time-contract
- #podcasts-by-brainlid
- #ecto-query
- #elixir-ls
- #phoenix_html
- #iex
- #blog-post
- #graphql
- #genstage
- #ai
- #websockets
- #supervisor
- #advent-of-code
- #elixirconf-us
- #distillery
- #processes
- #forms
- #api
- #metaprogramming
- #security
- #performance












