Learn how to use Stripe Terminal to accept in-person payments from Charles Watkins.
We’ve built several workflows using Stripe Payment links. In this livestream Dev Rel at Stripe Charles Watkins (@charlesw_dev) showed me how to take in-person payments using Stripe Terminal.
Stripe’s offerings enable businesses to accept payments in a myriad of ways: From one-time payments to recurring subscriptions and from online to in-person. The various options are interoperable, so Stripe is a solid platform that works with a business as it grows and changes. A new business could start online only with Payment Links and then add Stripe Terminal for processing payments at a brick-and-mortar store, pop-up, etc.
In this intermediate-level stream, Charles and I build a workflow for processing in-person payments for a hypothetical hamburger restaurant. The Airtable base and scripts used are available so beginners can take advantage of the content too.
Payment Links and Terminal share similar constructs, making prior knowledge of Stripe Payment Links helpful.
To follow the featured workflow, you will need accounts on the following services:
To jump start your building, the following resources are available:
Tip: Be sure to add in your API keys, Stripe Terminal ID and other variables when using the scripts.
For this workflow, Airtable stores all information and services as a point-of-sale interface. We started with five tables and added additional fields and relationships throughout the stream.
The base includes the following tables:
Tip: If your Stripe configuration is set to US Dollars, you will be seeing amounts shown in pennies. Add a formula field to convert the value to dollars.
While in test mode, I went from the Dashboard in Stripe to Readers to configure the Terminal. The serial ID is used as part of API calls and scripts.
You are likely familiar with tapping, swiping, or inserting a credit card into a physical piece of hardware to make a purchase. As a consumer, the process appears as if one workflow. Behind the scenes, it’s actually multiple steps.
The first step is sending the payment to the terminal (aka reader). This is called a payment intent and it represents a customer intending to make a purchase and includes the amount.
Once the system knows about the purchase, the appropriate credit card network is contacted for authorization. It’s at this point that a payment is pending.
The second step is taking the payment intent and sending it to the reader using the terminal API.
As you work with the Stripe APIs, you’ll see varying status messages to reflect the different parts of the process:
We used Airtable buttons with scripts to cause our order to go to the Terminal and then to send data to Stripe.
We then set up the Point-of-Sale Dashboard to prompt the Stripe reader to shift to its payment acceptance screen to collect payment.
Check the YouTube chapter descriptions for extending the workflow with webhooks, adapting the scripts, and adding in receipts.
Ready to accept in person payments with Stripe Terminal? Let me know what you build!