Many times, our applications require to provide an easy way to make payments to purchase products or services. Stripe can be a good option to receive payments. In this post, we are going to learn how to create a stripe payment link so that you can redirect your users to those link to send their payments.
Stripe is a technology company that provides online payment processing services, allowing businesses to accept payments over the internet. It offers a suite of tools and APIs that enable companies to manage online transactions, subscriptions, and other payment-related tasks.
Before starting to write code, we must understand the following Stripe components:
Price: A price is a specific pricing configuration for a product. It defines the amount that a customer will pay for a product, as well as any additional pricing details such as currency, billing cycle, and pricing tiers. As an example, for a service named "Community Membership" you could have two prices:
Payment link: A payment link is a URL that allows customers to make a payment for a specific price. When a customer clicks on a payment link, they are redirected to a Stripe-hosted payment page where they can enter their payment information and complete the transaction. Payment links can be shared via email, messaging apps, or embedded on your website.
Prices also allow us to define the payment type which can be "recurring" or "one_time". For the "Community membership example", the annual payment could be one_type and the monthly one could be recurrent. Every year, the users would renew (or not) their memberships and would choose the payment type again.
The stripe php library can be installed using composer, so, to install it, you simply have to execute the following command in your project root folder:
composer require stripe/stripe-php
Before you can retrieve your api key, you must be registered on Stripe. One you have been registered, you can follow the next steps:
We can create the Stripe Price creating the product first and then the price or embedding the product name into the price options. Let's code it using the first way so we can see all the process.
$stripe = new \Stripe\StripeClient(<your_stripe_api_key>); $product = $stripe->products->create([ 'name' => 'Community Subscription', 'description' => 'A Subscription to our community', ]); $price = $stripe->prices->create([ 'currency' => 'usd', 'unit_amount' => 5025, 'product': $product->id, 'type' => 'one_time' ]);
Let's explain the above code step by step:
The unit_amount parameter deserves special attention. The Stripe documentation says the following about unit_amount: "A positive integer in cents (or 0 for a free price) representing how much to charge." This means that we must multiply the price by 100 to convert it to cents before passing it to the unit_amount parameter. For example, if the price is $10.99, we would set unit_amount to 1099. This is a common gotcha, so be sure to double-check your code to avoid any unexpected pricing issues.
For instance, if you have an "$amount" variable which holds a float value as amount, you could code something like this:
$formattedAmount = (int)($amount * 100);
So far, we have a price created with a correctly formatted amount. Now its time to create the payment link.
$stripe = new \Stripe\StripeClient(<your_stripe_api_key>); $paymentLink = $stripe->paymentLinks->create([ 'line_items' => [ [ 'price' => $price->id, 'quantity' => 1, ] ], 'after_completion' => [ 'type' => 'redirect', 'redirect' => [ 'url' => <your redirect link> ] ] ]);
Let's explain it step by step:
We could redirect to an intermediate url which could perform some stuff such as updating our database register payment. The following code shows a simple Symfony controller which would perform the required tasks and then would redirect to the final url where the user will see that the payment has been completed.
class StripeController extends AbstractController { #[Route('/confirm-payment', name: 'confirm-payment', methods: ['GET'])] public function confirmPayment(Request $request): Response { // Here you perform the necessary stuff $succeedUrl = '...'; return new RedirectResponse($succeedUrl); } }
After we have created the PaymentLink object, we can access the string payment url by the url property:
$paymentUrl = $paymentLink->url;
In this post we have learned how to configure our php backend to easily accept payments with stripe using the stripe-php component.
Processing the payments in your php backend offers some advantages such as:
If you like my content and enjoy reading it and you are interested in learning more about PHP, you can read my ebook about how to create an operation-oriented API using PHP and the Symfony Framework. You can find it here: Building an Operation-Oriented Api using PHP and the Symfony Framework: A step-by-step guide
The above is the detailed content of Receive payments easily using Stripe and PHP. For more information, please follow other related articles on the PHP Chinese website!