Skip to content

Latest commit

 

History

History
172 lines (151 loc) · 11.3 KB

File metadata and controls

172 lines (151 loc) · 11.3 KB

Implement Stripe with PHP | Step by Step Guide

Disclaimer: This is a personal summary and interpretation based on a YouTube video. It is not official material and not endorsed by the original creator. All rights remain with the respective creators.

AI-Powered buttons

Teach Me: 5 Years Old | Beginner | Intermediate | Advanced | (reset auto redirect)

Learn Differently: Analogy | Storytelling | Cheatsheet | Mindmap | Flashcards | Practical Projects | Code Examples | Common Mistakes

Check Understanding: Generate Quiz | Interview Me | Refactor Challenge | Assessment Rubric | Next Steps

This document summarizes the key takeaways from the video. I highly recommend watching the full video for visual context and coding demonstrations.

Before You Get Started

  • I summarize key points to help you learn and review quickly.
  • Simply click on Ask AI links to dive into any topic you want.

Introduction to Stripe Integration

  • Summary: The video covers implementing Stripe payment gateway with PHP, including 3D Secure, using plain PHP, JavaScript, HTML/CSS, and Bootstrap. It uses the latest Stripe API as of May 2024, with a mention of an older 2021 integration video linked in the description.
  • Key Takeaway/Example: Focus on core PHP for simplicity, but adaptable to frameworks like Laravel or CodeIgniter. Start by setting up a basic HTML form for payments.
  • Link for More Details: Ask AI: Stripe Integration Basics

Setting Up the Frontend Payment Form

  • Summary: Create a simple HTML form with a div for the card element, a submit button, and include Bootstrap for styling. Add the Stripe JavaScript SDK to handle card input.
  • Key Takeaway/Example: Use <script src="https://js.stripe.com/v3/"></script> and add an event listener to the form for submission handling.
<form id="payment-form">
    <div id="payment-element"></div>
    <button id="submit" type="submit" class="btn btn-primary">Pay now</button>
</form>

Backend: Installing Stripe SDK and Creating Payment Intent

  • Summary: Install the Stripe PHP SDK via Composer, require the autoload, set your secret key, and create a payment intent endpoint that returns a client secret.
  • Key Takeaway/Example: Handle JSON requests to create intents with amount and currency (e.g., INR). Update amount dynamically based on the product.
require 'vendor/autoload.php';
\Stripe\Stripe::setApiKey('your_secret_key');
$request = json_decode(file_get_contents('php://input'));
$intent = \Stripe\PaymentIntent::create([
    'amount' => 100,
    'currency' => 'inr',
]);
echo json_encode(['clientSecret' => $intent->client_secret]);

Initializing and Mounting the Payment Element

  • Summary: In JavaScript, fetch the client secret from the backend, initialize Stripe elements, create a payment element, and mount it to the form div.
  • Key Takeaway/Example: Call an async initialize function on page load to set up the form.
const stripe = Stripe('your_publishable_key');
async function initialize() {
    const response = await fetch('payment.php', { method: 'POST' });
    const { clientSecret } = await response.json();
    const elements = stripe.elements({ clientSecret });
    const paymentElement = elements.create('payment');
    paymentElement.mount('#payment-element');
}
initialize();

Handling Payment Submission

  • Summary: Add an async submit handler to the form that confirms the payment with Stripe and handles errors, redirecting back to a success URL.
  • Key Takeaway/Example: Use test card details for demo (e.g., 4242 4242 4242 4242).
document.querySelector('#payment-form').addEventListener('submit', async (e) => {
    e.preventDefault();
    const { error } = await stripe.confirmPayment({
        elements,
        confirmParams: { return_url: window.location.origin + '/payment_response.html' }
    });
    if (error) console.log(error.message);
});

Processing Payment Response

  • Summary: Create a response page that retrieves the client secret from the URL, checks payment status with Stripe, and displays success or error messages.
  • Key Takeaway/Example: Handle statuses like 'succeeded' in an async function.
async function checkPaymentStatus() {
    const clientSecret = new URLSearchParams(window.location.search).get('payment_intent_client_secret');
    if (!clientSecret) return;
    const { paymentIntent } = await stripe.retrievePaymentIntent(clientSecret);
    if (paymentIntent.status === 'succeeded') {
        document.querySelector('#alert').innerText = 'Payment succeeded!';
    }
}
checkPaymentStatus();

Setting Up Webhooks for Reliable Status Updates

  • Summary: For real-world use, set up a webhook endpoint to handle delayed status changes (e.g., processing to succeeded/failed) by verifying signatures and processing events.
  • Key Takeaway/Example: Use try-catch for exceptions like signature mismatches.
$payload = @file_get_contents('php://input');
$sig_header = $_SERVER['HTTP_STRIPE_SIGNATURE'];
$event = \Stripe\Webhook::constructEvent($payload, $sig_header, 'your_webhook_secret');
switch ($event->type) {
    case 'payment_intent.succeeded':
        $paymentIntent = $event->data->object;
        // Store or log
        break;
    // Other cases
}

Database Integration for Webhook Events

  • Summary: Store webhook event data in a database using PDO for persistence, handling successes and failures in separate cases.
  • Key Takeaway/Example: Connect to MySQL and insert JSON-encoded payment info.
try {
    $conn = new PDO("mysql:host=$server;dbname=$dbname", $username, $password);
} catch (PDOException $e) {
    echo $e->getMessage();
}
$sql = "INSERT INTO payments (event_data) VALUES (:event_data)";
$stmt = $conn->prepare($sql);
$stmt->execute(['event_data' => json_encode($paymentIntent)]);

Testing Locally with ngrok

  • Summary: Use ngrok to expose your local server for webhook testing, adding the generated HTTPS URL to your Stripe dashboard.
  • Key Takeaway/Example: Run ngrok http 8000 and configure in Stripe for real-time updates during development.
  • Link for More Details: Ask AI: Testing Stripe with ngrok

Conclusion and Next Steps

  • Summary: The basic integration works for demos, but webhooks ensure reliability. Check Stripe docs for more details, and test thoroughly.
  • Key Takeaway/Example: Verify payments in your Stripe dashboard and database after testing.
  • Link for More Details: Ask AI: Advanced Stripe PHP Tips

About the summarizer

I'm Ali Sol, a Backend Developer. Learn more: