Hello everyone I am trying to send json data from a completed checkout to my six website via webhook I need to retrieve the order number and the product that the customer have bought but I cannot figure out how to do that
Assume you are listening to the checkout.session.completed events. In your webhook event handling code, you can expand the line_item.data.price hash of the CheckoutSession object to get the price/product info.
I'm not sure about the order number that you refer to, perhaps you mean the payment_intent?
Related
I'm trying to use Stripe checkout in a first-come, first-served buying process. Multiple buyers may be trying to buy the same item at the same time, and only the one who completes the stripe checkout process first should get it. At the moment, the stripe checkout session duration requires me to 'book' the stock item and only release them back into stock once the session duration expires (even if they close the tab).
Is there a way to set up Stripe Checkout in a way that would detect whether the item has already been purchased by another buyer (e.g. the stock is no longer available), and for example show an error when the user tries to pay?
If not, any suggestions as to alternative ways of implementing this functionality while still using Stripe?
You can listen for checkout.session.completed events and add some event handler logic to retrieve the Session object while expanding the line_items:
https://stripe.com/docs/payments/checkout/fulfill-orders
https://stripe.com/docs/api/expanding_objects
This will allow you to inspect the price and product IDs for the completed Session. You could then have some logic to expire any other Checkout sessions so no other customers are able to go through the payment flow:
https://stripe.com/docs/payments/checkout/managing-limited-inventory
https://stripe.com/docs/api/checkout/sessions/expire
You can use the paymentIntent that allows you to confirm or reject the payment later. You can create the paymentIntent for all the customers are trying at the same time and next take the first one and confirm only this paymentIntent and reject the others
Read the Stripe documentation:
Stripe | PaymentIntent
We are using a number of webhooks for testing purposes with the DEMO company and this means the webhook queue is full of items.
Is it possible to remove all these items that i am seeing in the webhook queue as i am getting an error about too many requests?
It isn't possible to remove items from the queue manually. That said, once they've been sent and your script has responded correctly they won't be sent again. As such you should just need to allow your script to receive everything in the queue.
Alternatively you could reset your demo company. This will also reset the webhooks and any data you have entered.
We create PaymentIntents (with capture_method=manual in case that matters) in our iOS/Android apps when the user places an order.
We send the order to the connected venue once the charge.succeeded webhook fires. If this doesn't happen within a couple of minutes, we expired the placed order on our side.
So interestingly 2 out of 10 times we don't get this webhook to fire.
Im wondering if it's actually wise to listen to this webhook in order to decide if we send the order to the connected account's venue or not or if there is a better way to determine that the payment will actually work once we try to capture it.
Webhooks are the recommended way for getting a payment intent's status, but you can also use the API to get its status.
A quote from the Stripe docs:
It is technically possible to use polling instead of webhooks to
monitor for changes caused by asynchronous operations—repeatedly
retrieving a PaymentIntent so that you can check its status—but this
is markedly less reliable and may pose challenges if used at scale.
Stripe enforces rate limiting on API requests, so exercise caution
should you decide to use polling.
In your case, I'd recommend waiting for the webhook and then after a few minutes, call either the PaymentIntents API or the Charges API if you haven't received the webhook yet.
There's likely something else going on here, so I'd suggest you reach out to Stripe - webhooks should fire all the time, and it's a really really rare occurrence that they wouldn't.
I'm updating a webapp to Stripes SCA ready flow with PaymentIntent.
So far I have working (on my local test server):
Generate Intent on frontend and pass secret to form
Use Elements to collect card into
Use handleCardPayment to create the charge
Now here's the part where I am unsure. The handleCardPayment responses all seem to indicate a succeeded event, but the documentation warns to not use this repsonse, but instead wait for the Webhook response and only then fulfill customer orders.
Step 5: Asynchronously fulfill the customer’s order
You can use the PaymentIntent returned by Stripe.js to provide
immediate feedback to your customers when the payment completes on the
client. However, your integration should not attempt to handle order
fulfillment on the client side because it is possible for customers to
leave the page after payment is complete but before the fulfillment
process initiates. Instead, you will need to handle asynchronous
events in order to be notified and drive fulfillment when the payment
succeeds. Documentation
So far so good, I've set up test webhooks and tunneling through ngrok I can actually receive the paymentIntent from the Stripe webhook.
Now, my question comes at this point, where the Stripe documentation ends. How should I deal with the UI from the point of the "Pay" button being pressed, and how do I in the frontend detect that the webhook has been triggered?
I am wondering if I should poll my own server, which in turn retrieves a database result that indicated if the webhook for this order has been received? Or what is a reasonable way to deal with this, technically and from an UX perspective?
Any pointers?
I just implemented this, and I decided to poll my own server for the update and ask the user to wait. The webhook marks our internal representation as "paid", so we don't need to poll Stripe. If the webhook doesn't come within 30 seconds, we tell the user that it's ok to leave the page, and we'll email them the result.
Technically, these webhooks can take up to 7 days to come in, so that's why Stripe doesn't want you to have the user wait. In reality, it almost always comes in within 5 seconds, and I would rather just have the user wait and see a final confirmation in the same session.
I am working on a project where I need to integrate the google-services(like Gmail, Gcalendar). When the user gets a mail or something added to the gCalender I need to activate some code. Can I achieve it by webhooks or need to do polling with some time duration.
If I use webhooks, how to determine which user data that I get(consider I have thousands of users).
You can use webhooks to get push notifications. Webhooks are very similar to API's but they are inverted instead. For example instead of you making a call to an API you would define a callback URL in which the receiving end will then HTTP Post the information that you want, e.g name etc.
the creation or registration of a webhook will be the combination of:
--> a Friendly name for that webhook.
--> the URL where the callback should be sent
--> the scope of the webhook
--> the events to post to the URL either all events or a set of specific events.
Name: "MyWebhook"
URL: http://www.webhookapplication.com/webhookreciever
Scope: Project = .... and fixversion IN ("5.1")
Events: Updated and create etc.
You can create webhooks by first setting up an unique URL which I use RequestBin for e.g http://requestb.in/XXXXXXXX
Most Event Webhooks will notify a URL that you choose via the HTTP Post with information about events that occur.
A good example about webhooks can be found here:
https://sendgrid.com/docs/API_Reference/Webhooks/index.html
And this here will example how to use the send grid event to email:
https://sendgrid.com/docs/API_Reference/Webhooks/event.html