Home Mobile Panduan Lengkap Integrasi Stripe di Laravel

Panduan Lengkap Integrasi Stripe di Laravel

0

Stripe adalah salah satu penyedia layanan pembayaran online yang paling populer dan dapat diandalkan saat ini. Mengintegrasikan Stripe ke dalam aplikasi Laravel Anda dapat membantu Anda memproses pembayaran dengan aman dan efisien. Artikel ini akan memberikan panduan langkah demi langkah untuk mengintegrasikan Stripe ke dalam aplikasi Laravel Anda.

Langkah 1: Instalasi Laravel dan Stripe Package

Pertama, pastikan Anda memiliki aplikasi Laravel yang berjalan. Jika belum, Anda bisa membuatnya dengan perintah berikut:

composer create-project --prefer-dist laravel/laravel stripe-integration

Kemudian, instal package Stripe menggunakan Composer:

composer require stripe/stripe-php

Langkah 2: Konfigurasi Stripe

Buat file konfigurasi Stripe dengan menjalankan perintah berikut:

php artisan vendor:publish --tag="stripe-config"

Setelah itu, tambahkan kunci API Stripe Anda ke dalam file .env:

STRIPE_KEY=sk_test_your_secret_key
STRIPE_SECRET=pk_test_your_publishable_key

Langkah 3: Membuat Controller untuk Pembayaran

Buat controller untuk menangani logika pembayaran:

php artisan make:controller PaymentController

Tambahkan metode untuk menampilkan halaman pembayaran dan menangani proses pembayaran ke dalam PaymentController:

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Stripe\Stripe;
use Stripe\Charge;

class PaymentController extends Controller
{
    public function show()
    {
        return view('payment');
    }

    public function process(Request $request)
    {
        Stripe::setApiKey(env('STRIPE_SECRET'));

        Charge::create([
            "amount" => 1000,
            "currency" => "usd",
            "source" => $request->stripeToken,
            "description" => "Test Payment"
        ]);

        return back()->with('success_message', 'Payment successful!');
    }
}

Langkah 4: Membuat Rute

Tambahkan rute untuk menampilkan halaman pembayaran dan memproses pembayaran di file routes/web.php:

use App\Http\Controllers\PaymentController;

Route::get('/payment', [PaymentController::class, 'show'])->name('payment.show');
Route::post('/payment', [PaymentController::class, 'process'])->name('payment.process');

Langkah 5: Membuat Halaman Pembayaran

Buat file tampilan resources/views/payment.blade.php untuk halaman pembayaran:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Payment</title>
    <script src="https://js.stripe.com/v3/"></script>
</head>
<body>
    <h1>Stripe Payment</h1>

    @if (session('success_message'))
        <div class="alert alert-success">
            {{ session('success_message') }}
        </div>
    @endif

    <form action="{{ route('payment.process') }}" method="POST" id="payment-form">
        @csrf
        <div class="form-row">
            <label for="card-element">
                Credit or debit card
            </label>
            <div id="card-element">
                <!-- A Stripe Element will be inserted here. -->
            </div>

            <!-- Used to display form errors. -->
            <div id="card-errors" role="alert"></div>
        </div>

        <button type="submit">Submit Payment</button>
    </form>

    <script>
        var stripe = Stripe('{{ env('STRIPE_KEY') }}');
        var elements = stripe.elements();

        var style = {
            base: {
                color: '#32325d',
                fontFamily: '"Helvetica Neue", Helvetica, sans-serif',
                fontSmoothing: 'antialiased',
                fontSize: '16px',
                '::placeholder': {
                    color: '#aab7c4'
                }
            },
            invalid: {
                color: '#fa755a',
                iconColor: '#fa755a'
            }
        };

        var card = elements.create('card', {style: style});
        card.mount('#card-element');

        card.addEventListener('change', function(event) {
            var displayError = document.getElementById('card-errors');
            if (event.error) {
                displayError.textContent = event.error.message;
            } else {
                displayError.textContent = '';
            }
        });

        var form = document.getElementById('payment-form');
        form.addEventListener('submit', function(event) {
            event.preventDefault();

            stripe.createToken(card).then(function(result) {
                if (result.error) {
                    var errorElement = document.getElementById('card-errors');
                    errorElement.textContent = result.error.message;
                } else {
                    stripeTokenHandler(result.token);
                }
            });
        });

        function stripeTokenHandler(token) {
            var form = document.getElementById('payment-form');
            var hiddenInput = document.createElement('input');
            hiddenInput.setAttribute('type', 'hidden');
            hiddenInput.setAttribute('name', 'stripeToken');
            hiddenInput.setAttribute('value', token.id);
            form.appendChild(hiddenInput);

            form.submit();
        }
    </script>
</body>
</html>

Langkah 6: Menambahkan Validasi dan Error Handling

Tambahkan validasi dan penanganan error ke dalam PaymentController untuk memastikan pembayaran yang aman:

public function process(Request $request)
{
    $request->validate([
        'stripeToken' => 'required'
    ]);

    Stripe::setApiKey(env('STRIPE_SECRET'));

    try {
        Charge::create([
            "amount" => 1000,
            "currency" => "usd",
            "source" => $request->stripeToken,
            "description" => "Test Payment"
        ]);

        return back()->with('success_message', 'Payment successful!');
    } catch (\Exception $e) {
        return back()->withErrors('Error! ' . $e->getMessage());
    }
}

Kesimpulan

Mengintegrasikan Stripe ke dalam aplikasi Laravel Anda dapat dilakukan dengan mudah menggunakan langkah-langkah di atas. Dengan mengikuti panduan ini, Anda dapat mengatur pembayaran online yang aman dan efisien untuk pengguna aplikasi Anda. Selamat mencoba!

Jika ada langkah-langkah lain atau fitur tambahan yang ingin Anda integrasikan, seperti langganan berulang atau pengelolaan pelanggan, Stripe dan Laravel memiliki dokumentasi yang sangat baik yang dapat membantu Anda lebih lanjut.