Accepting a payment using Stripe (Kotlin/Javalin)
Stripe is a cloud-based service that enables charging customers for your products or services. With Stripe API, you don’t manage sensitive information like credit cards. Let’s learn how to use it.
--
1. Setup
- Register a Stripe account if you don’t own one.
- Create a new Kotlin project.
2. Web handlers
- Add Javalin (web framework) and Stripe client to your
build.gradle.kts
dependencies:
implementation(“com.stripe:stripe-java:20.+”)
implementation(“org.slf4j:slf4j-simple:1.+”)
implementation(“io.javalin:javalin:4.+”)
2. We need to set up the web request handlers. Create a src/kotlin/Main.kt
with the following content:
Beware you need to replace two values:
STRIPE_API_KEY
: Ensure your Stripe Dashboard is in “Test mode” (top-right corner). Head on to “Developers” (top right) → “API Keys” (left-side menu) → “Standard keys” → “Publishable key” (this is a demo key). Beware that you should set an environment variable with this rather than leave it in the code and thus in source control.PRICE_ID
: In the Stripe Dashboard find and click “Products” and then, create a new product. Confirm the product creation and within the newly created product, scroll to the “Pricing” section. There, you can copy the “API ID” of the desired price.
📝 You can fetch the product details (e.g. title, image URL) with Product.retrieve(PROD_ID)
.
3. Web pages
We need the HTML pages that the user will see. In this sample, we could use just resort to hardcoded HTML. However, let’s add a server-side templating library so we can display the price details obtained from the Stripe API. Add jte to build.gradle.kts
:
implementation(“gg.jte:jte:1.+”)
We need a checkout page to represent the checkout of a shopping cart; it contains all the products the customer added. In our case, it contains a single product. In a real case, it could contain the products stored in a session. Add src/main/jte/checkout.jte
with the following content:
We need a success page that represents the callback from Stripe when the payment is successful. Add src/main/jte/success.jte
with the following content:
The cancel page deals with the user canceling the payment. Add src/main/jte/cancel.jte
with the following content:
4. A test payment
Let’s do a fake payment in localhost:
- Run
Main.kt
and go tohttp://localhost:7000/checkout
. - Click the “Checkout” button to move on to the Stripe payment page.
- Now you can use the fake card
4242 4242 4242 4242
(the remaining details can be set at will). This fake card number simulates a fake successful payment so you can test the whole flow.