Stripe Terminal requires integrating hardware and software to bring Stripe to the physical world. As you develop your integration, refer to this checklist to make sure you cover all the critical steps.
It’s fine to go out of order, but understanding the full scope of a Terminal integration helps you connect all the pieces.
After following the integration guides for Stripe Terminal, check that your application is set up correctly.
To handle the ConnectionToken lifecycle, set up an endpoint on your backend that creates a ConnectionToken for your client application. Authenticate this endpoint to control who can access your readers. Do not hardcode the ConnectionToken in your application—it prevents you from reconnecting to a reader. To further control access to internet-connected readers like the Verifone P400, use Locations.
When the SDK returns a processed PaymentIntent to your application, the payment is authorized but not captured. To complete collection of funds, you must capture the PaymentIntent.
When your application receives a processed PaymentIntent from the SDK, make sure it notifies your backend to capture the PaymentIntent.
Provide your customer with the option to receive a paper or email receipt. You can use Stripe’s pre-built receipts, or use receipt data from the Stripe API to build custom receipts that are on-brand for your business. Test that you receive a receipt when you create a livemode payment using your application.
If you provide your customers with custom receipts, save a copy of each receipt as dispute evidence. If you use Stripe’s pre-built receipts, a copy of the receipt is saved automatically and available in the Dashboard.
Reconcile payments with your internal orders system on your server at the end of a day’s activity to avoid unintended authorizations or uncaptured funds:
- A user abandoning your application’s checkout flow early can result in an uncaptured PaymentIntent, which may appear to the cardholder as an unintended authorization.
- Similarly, the request from your application notifying your backend to capture the PaymentIntent may fail, resulting in incomplete collection of funds.
The BBPOS Chipper 2X BT does not auto-update, so it’s important for your application to support updates. Although they’re rare, updates usually contain important features or critical fixes. Make sure your app supports the following:
- First, check for whether an update is available.
- If an update is available, display in the UI the estimated time to complete the update, along with options to continue or cancel.
- While the update is in progress, have the UI tell the user to leave the reader powered on and nearby. Block the user from navigating away from the page.
- Display a visual indicator of the update progress (e.g., percentage, progress bar).
For smaller deployments, register each reader in the Stripe Dashboard. For larger deployments that require shipping readers to various locations, site managers should be able to add new readers to your company’s Stripe account. Build a workflow into your application to let others register readers to your Stripe account. The endpoint for registering a reader must be called server side. If you support registering readers from your client application, the app must communicate with your backend to register the reader.
Make sure your application can display an updating list of discovered readers, with the label and/or serial number of each. Refer to our example applications for a sample UI.
If you expect your mobile app to be used with multiple Bluetooth readers, use the Bluetooth Proximity discovery method. Include in your app instructions to hold the reader close to the app device, and wait for it to begin flashing multiple colors. Make sure your app’s UI allows canceling the reader discovery process.
If you use the Verifone P400, check that the reader and the device running your application are both on the correct LAN. Include in your application instructions for verifying the correct LAN.
The BBPOS and Chipper™ name and logo are trademarks or registered trademarks of BBPOS Limited in the United States and/or other countries. The Verifone® name and logo are either trademarks or registered trademarks of Verifone in the United States and/or other countries. Use of the trademarks does not imply any endorsement by BBPOS or Verifone.