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.