March Developer Digest: Better time travel with Billing test clocks ⏰
Tags: stripedevdigest, payments, stripe, webdev
Published: 2022-03-31 22:19:17


📩 We're sharing our most recent developer digest here on DEV! If you're interested in subscribing to monthly developer updates, [sign up here](https://go.stripe.global/dev-digest).
![Horizontal rule](https://res.cloudinary.com/practicaldev/image/fetch/s--XRaNCJc4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/kwi5h27a7elyignm8iie.png)

# March Developer Digest
## Better time travel with Billing test clocks ⏰ 
![Billing clock flow - create simulation, advance the test clock, review test objects in the dashboard](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wat3o89q2zk76fr0i5js.jpg)

Building apps with recurring payments can be difficult to test. How can you simulate when an annual subscription is about to expire? What happens to the user experience at the end of a trial period? To answer these questions, we’re excited to introduce the top-requested Stripe Billing dev feature: [test clocks](https://stripe.com/docs/billing/testing/test-clocks?utm_medium=earned-email&utm_source=8cb7&utm_campaign=GLOBAL_42db&utm_content=b0a2&utm_term=eea18d8d98d2).

With test clocks, you can now simulate the forward movement of time in test mode in order to change state and trigger webhook events for resources such as subscriptions, trials, and upgrades.  

Try out test clocks in [our docs](http://stripe.com/docs/billing/testing/test-clocks?utm_medium=earned-email&utm_source=8cb7&utm_campaign=GLOBAL_42db&utm_content=b0a2&utm_term=eea18d8d98d2).

## Stay updated

**Cross-selling on Checkout and Payment Links:** [Cross-selling products](https://stripe.com/docs/payments/checkout/cross-sells?utm_medium=earned-email&utm_source=8cb7&utm_campaign=GLOBAL_42db&utm_content=b0a2&utm_term=eea18d8d98d2) is now available. You can increase your revenue by allowing customers to purchase complimentary products via Checkout or Payment Links.

**Build your crypto business with Stripe:** From NFTs to wallets and exchanges to marketplaces, explore the [common use cases to build with Stripe payments support for crypto](https://stripe.com/use-cases/crypto?utm_medium=earned-email&utm_source=8cb7&utm_campaign=GLOBAL_42db&utm_content=b0a2&utm_term=eea18d8d98d2).

**Apple App Clips:** The Stripe iOS SDK now has support for [Apple App Clips](https://stripe.com/docs/apple-pay?utm_medium=earned-email&utm_source=8cb7&utm_campaign=GLOBAL_42db&utm_content=b0a2&utm_term=eea18d8d98d2#app-clips), allowing customers to make purchases without installing a native app.

**Konbini payment method:** Merchants in Japan can now use the popular Konbini payment method to sell to customers in Japan. Read more here [in the docs](https://stripe.com/docs/payments/konbini?utm_medium=earned-email&utm_source=8cb7&utm_campaign=GLOBAL_42db&utm_content=b0a2&utm_term=eea18d8d98d2).

**Checkout fonts and border radius:** With Checkout, you can now [customize the font and border radius](https://dashboard.stripe.com/settings/branding?utm_medium=earned-email&utm_source=8cb7&utm_campaign=GLOBAL_42db&utm_content=b0a2&utm_term=eea18d8d98d2) of input elements in the hosted Checkout page to more closely align with your company branding.

**Invoicing integration builder:** A [new integration builder](https://stripe.com/docs/invoicing/integration/quickstart?utm_medium=earned-email&utm_source=8cb7&utm_campaign=GLOBAL_42db&utm_content=b0a2&utm_term=eea18d8d98d2) for Invoicing is now available to help you learn about using Invoicing with your favorite programming language.

**Future-proofing blog post:** Dawn Lambeth, a developer advocate at Stripe, has written [this comprehensive guide](https://dev.to/stripe/future-proofed-payments-6-ways-to-improve-upgrading-your-stripe-integration-2cc4?utm_medium=earned-email&utm_source=8cb7&utm_campaign=GLOBAL_42db&utm_content=b0a2&utm_term=eea18d8d98d2) on future-proofing your integration. It covers many relevant topics, from API versioning to Stripe tooling.

## Learn

**Building an ecommerce store with Jamstack:** In this three part miniseries with Sia Karamalegos ([@TheGreenGreek](https://twitter.com/TheGreenGreek?utm_medium=earned-email&utm_source=8cb7&utm_campaign=GLOBAL_42db&utm_content=b0a2&utm_term=eea18d8d98d2)) and Matt Ling ([@mattling_dev](https://twitter.com/mattling_dev?utm_medium=earned-email&utm_source=8cb7&utm_campaign=GLOBAL_42db&utm_content=b0a2&utm_term=eea18d8d98d2)) from Stripe, you’ll learn how to build an ecommerce store on Netlify.

- First, learn [how to model your product catalog](https://www.youtube.com/watch?utm_medium=earned-email&utm_source=8cb7&utm_campaign=GLOBAL_42db&utm_content=b0a2&utm_term=eea18d8d98d2&v=N7qSVXyHlCA).
- Next, you’ll see [how to leverage Netlify serverless functions for creating Checkout Sessions](https://www.youtube.com/watch?v=rxSm3THX748&utm_medium=earned-email&utm_source=8cb7&utm_campaign=GLOBAL_42db&utm_content=b0a2&utm_term=eea18d8d98d2).
- Finally, see how to [build a webhook endpoint to listen and react to payment events to fulfill your orders](https://www.youtube.com/watch?v=9g8UTYR5dH0&utm_medium=earned-email&utm_source=8cb7&utm_campaign=GLOBAL_42db&utm_content=b0a2&utm_term=eea18d8d98d2).

**Checkout 101:** There are several new episodes available in the Checkout 101 series to help you quickly get up and running. Now you can learn how to [build custom order confirmation pages](https://www.youtube.com/watch?v=COeMEHKbECw&utm_medium=earned-email&utm_source=8cb7&utm_campaign=GLOBAL_42db&utm_content=b0a2&utm_term=eea18d8d98d2), [make line items adjustable](https://www.youtube.com/watch?v=BIkk7RU5gEM&utm_medium=earned-email&utm_source=8cb7&utm_campaign=GLOBAL_42db&utm_content=b0a2&utm_term=eea18d8d98d2), and [recover abandoned carts](https://www.youtube.com/watch?v=gvFU9r9w3iU&utm_medium=earned-email&utm_source=8cb7&utm_campaign=GLOBAL_42db&utm_content=b0a2&utm_term=eea18d8d98d2).

**Test clocks:** Testing subscription lifecycles was a common challenge, so we built test clocks to simulate moving billing objects through time. Watch [this episode](https://www.youtube.com/watch?v=0GsVXfDPavg&utm_medium=earned-email&utm_source=8cb7&utm_campaign=GLOBAL_42db&utm_content=b0a2&utm_term=eea18d8d98d2) to see how to create test clocks and test your time-sensitive webhook handlers.

**Migrating to Stripe React Native:** Check out the [new multi-part series](https://www.callstack.com/blog/how-to-migrate-from-tipsi-stripe-to-stripe-react-native-sdk?utm_medium=earned-email&utm_source=8cb7&utm_campaign=GLOBAL_42db&utm_content=b0a2&utm_term=eea18d8d98d2) by [Callstack](https://twitter.com/callstackio?utm_medium=earned-email&utm_source=8cb7&utm_campaign=GLOBAL_42db&utm_content=b0a2&utm_term=eea18d8d98d2) and [@souhepend](https://twitter.com/@souhepend?utm_medium=earned-email&utm_source=8cb7&utm_campaign=GLOBAL_42db&utm_content=b0a2&utm_term=eea18d8d98d2) on how to migrate payments from [Tipsi](https://github.com/tipsi/tipsi-stripe?utm_medium=earned-email&utm_source=8cb7&utm_campaign=GLOBAL_42db&utm_content=b0a2&utm_term=eea18d8d98d2) to the new official [React Native SDK](https://github.com/stripe/stripe-react-native?utm_medium=earned-email&utm_source=8cb7&utm_campaign=GLOBAL_42db&utm_content=b0a2&utm_term=eea18d8d98d2).

**VS Code Day 2022 videos:** Check out the [playlist of developer talks](https://www.youtube.com/playlist?list=PLj6YeMhvp2S5UqPT4mG6ILDOLzoFNai2D&utm_medium=earned-email&utm_source=8cb7&utm_campaign=GLOBAL_42db&utm_content=b0a2&utm_term=eea18d8d98d2) covering GitLens, GitHub Pages, Python, Laravel, and Stripe.

## Community

- Learn how to [accept payments for multiple services in your Go application using Stripe](https://jaycoding.tech/tutorials/guides/accepting-payments-in-golang-using-strip-udwcis?utm_medium=earned-email&utm_source=8cb7&utm_campaign=GLOBAL_42db&utm_content=b0a2&utm_term=eea18d8d98d2). [blog post from [Jay Coding](https://jaycoding.tech/?utm_medium=earned-email&utm_source=8cb7&utm_campaign=GLOBAL_42db&utm_content=b0a2&utm_term=eea18d8d98d2)]
- [Connect Stripe to a Node.js app](https://blog.bitsrc.io/your-payment-gateway-for-your-next-project-4246452bbadf?utm_medium=earned-email&utm_source=8cb7&utm_campaign=GLOBAL_42db&utm_content=b0a2&utm_term=eea18d8d98d2). [blog post from [Adarsh Gupta](https://adarsh-gupta.medium.com/?utm_medium=earned-email&utm_source=8cb7&utm_campaign=GLOBAL_42db&utm_content=b0a2&utm_term=eea18d8d98d2)] 
- [Configure a new Django website to accept payments with Stripe](https://medium.com/geekculture/how-to-integrate-stripe-in-django-1f7b8e83c0a8?utm_medium=earned-email&utm_source=8cb7&utm_campaign=GLOBAL_42db&utm_content=b0a2&utm_term=eea18d8d98d2). [blog post from [Geek Culture](https://medium.com/geekculture?utm_medium=earned-email&utm_source=8cb7&utm_campaign=GLOBAL_42db&utm_content=b0a2&utm_term=eea18d8d98d2)]{% embed https://medium.com/geekculture/how-to-integrate-stripe-in-django-1f7b8e83c0a8 %}
- Watch a multipart series on [getting started with Laravel Cashier](https://www.youtube.com/watch?v=c4014oCoDX8&list=PLDc9bt_00KcJaSZXhpCqT6J05HP2qt5JQ&utm_medium=earned-email&utm_source=8cb7&utm_campaign=GLOBAL_42db&utm_content=b0a2&utm_term=eea18d8d98d2). [video playlist from [Career Development Lab](https://www.youtube.com/channel/UCDK30yVex7vYewwNaJP-IRA?utm_medium=earned-email&utm_source=8cb7&utm_campaign=GLOBAL_42db&utm_content=b0a2&utm_term=eea18d8d98d2)] {% embed https://www.youtube.com/watch?v=c4014oCoDX8&list=PLDc9bt_00KcJaSZXhpCqT6J05HP2qt5JQ %}
- [Create an order registration form with email notifications and Stripe payments](https://www.youtube.com/watch?v=OZmdfsnsRzc&utm_medium=earned-email&utm_source=8cb7&utm_campaign=GLOBAL_42db&utm_content=b0a2&utm_term=eea18d8d98d2). [video from [Laravel Daily](https://www.youtube.com/channel/UCTuplgOBi6tJIlesIboymGA?utm_medium=earned-email&utm_source=8cb7&utm_campaign=GLOBAL_42db&utm_content=b0a2&utm_term=eea18d8d98d2)] {% embed https://www.youtube.com/watch?v=OZmdfsnsRzc %}


**Open-source software updates:**
Thank you to our top open-source contributors this month: [AbrahamBrookes](https://github.com/AbrahamBrookes?utm_medium=earned-email&utm_source=8cb7&utm_campaign=GLOBAL_42db&utm_content=b0a2&utm_term=eea18d8d98d2), [LeonMelis](https://github.com/LeonMelis?utm_medium=earned-email&utm_source=8cb7&utm_campaign=GLOBAL_42db&utm_content=b0a2&utm_term=eea18d8d98d2), [Arsaev](https://github.com/Arsaev?utm_medium=earned-email&utm_source=8cb7&utm_campaign=GLOBAL_42db&utm_content=b0a2&utm_term=eea18d8d98d2), [kaznovac](https://github.com/kaznovac?utm_medium=earned-email&utm_source=8cb7&utm_campaign=GLOBAL_42db&utm_content=b0a2&utm_term=eea18d8d98d2), [christianaranda](https://github.com/christianaranda?utm_medium=earned-email&utm_source=8cb7&utm_campaign=GLOBAL_42db&utm_content=b0a2&utm_term=eea18d8d98d2), [ilyailya](https://github.com/ilyailya?utm_medium=earned-email&utm_source=8cb7&utm_campaign=GLOBAL_42db&utm_content=b0a2&utm_term=eea18d8d98d2), [vinistock](https://github.com/vinistock?utm_medium=earned-email&utm_source=8cb7&utm_campaign=GLOBAL_42db&utm_content=b0a2&utm_term=eea18d8d98d2), [Morriar](https://github.com/Morriar?utm_medium=earned-email&utm_source=8cb7&utm_campaign=GLOBAL_42db&utm_content=b0a2&utm_term=eea18d8d98d2), [paracycle](https://github.com/paracycle?utm_medium=earned-email&utm_source=8cb7&utm_campaign=GLOBAL_42db&utm_content=b0a2&utm_term=eea18d8d98d2), [KaanOzkan](https://github.com/KaanOzkan?utm_medium=earned-email&utm_source=8cb7&utm_campaign=GLOBAL_42db&utm_content=b0a2&utm_term=eea18d8d98d2), [hibariya](https://github.com/hibariya?utm_medium=earned-email&utm_source=8cb7&utm_campaign=GLOBAL_42db&utm_content=b0a2&utm_term=eea18d8d98d2), [swiknaba](https://github.com/swiknaba?utm_medium=earned-email&utm_source=8cb7&utm_campaign=GLOBAL_42db&utm_content=b0a2&utm_term=eea18d8d98d2), [rwstauner](https://github.com/rwstauner?utm_medium=earned-email&utm_source=8cb7&utm_campaign=GLOBAL_42db&utm_content=b0a2&utm_term=eea18d8d98d2), and [dougedey-shopify](https://github.com/dougedey-shopify?utm_medium=earned-email&utm_source=8cb7&utm_campaign=GLOBAL_42db&utm_content=b0a2&utm_term=eea18d8d98d2).


## Stay connected
💬 [Follow us at @StripeDev on Twitter](https://twitter.com/stripedev) for updates and answers to your developer questions. Let us know what you’re working on with the Stripe API!

👾 [Join the Stripe Discord server](https://stripe.com/go/developer-chat) to chat live with other developers.

📺 [Subscribe to Stripe Developers on YouTube](https://www.youtube.com/stripedevelopers) for office hours, live streams, and online technical workshops.

📚 [Add us on DEV](https://dev.to/stripe) for how-to articles and past editions of this developer digest.

![Horizontal rule](https://res.cloudinary.com/practicaldev/image/fetch/s--XRaNCJc4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/kwi5h27a7elyignm8iie.png)

What would you like to see more (or less) of? Let us know by replying to this email. If you have questions, comments, or need help with code, we’re here to help via [Discord](https://stripe.com/go/developer-chat), [Twitter](https://twitter.com/StripeDev), and [Stack Overflow](https://stackoverflow.com/tags/stripe-payments/info). View our [code samples](https://github.com/stripe-samples) on GitHub.

—The Stripe team