Implementasi Payment Gateway Xendit pada Laravel
By Muhammad Satria Rajendra
Tingginya kebutuhan akan pembayaran digital yang efisien dan aman membuat payment gateway menjadi solusi dalam menyediakan pembayaran. Salah satu payment gateway yang populer di Indonesia adalah Xendit, yang menawarkan beragam fitur untuk memudahkan proses transaksi. Artikel ini akan membahas bagaimana mengimplementasikan Xendit dalam aplikasi berbasis back-end menggunakan Laravel.
- Persiapan Xendit
Langkah pertama yang perlu dilakukan adalah mendaftar dan mendapatkan akun Xendit. Proses pendaftaran ini sangat sederhana dan cepat, kamu hanya perlu mengikuti beberapa langkah mudah di situs resmi Xendit. Setelah itu, login ke akun Xendit dan klik Manage API Keys.
Lalu klik generate secret key dan sesuaikan permission nya dengan kebutuhan. Pada tutorial kali ini saya mengatur semua permission nya menjadi WRITE.
Setelah itu, kamu akan mendapatkan public key dan secret key yang kelak akan digunakan untuk melakukan dan menerima request.
- Instalasi dan Konfigurasi .env
Langkah selanjutnya adalah instalasi Xendit pada proyek laravel. Instalasi Xendit dapat dilakukan dengan composer
composer require xendit/xendit-php
Setelah Xendit berhasil diinstall, buka file .env lalu masukan public key dan secret key
XENDIT_SECRET_KEY=your-secret-key
XENDIT_PUBLIC_KEY=your-public-key
- Membuat PaymentController
Untuk melakukan request payment, pertama kita akan membuat PaymentController dengan menjalankan perintah:
php artisan make:controller PaymentController
Lalu import class Configuration,InvoiceApi dan CreateInvoiceRequest dari Xendit
use Xendit\Configuration;
use Xendit\Invoice\CreateInvoiceRequest;
use Xendit\Invoice\InvoiceApi;
Setelah itu, kita perlu membuat variabel _construct untuk mendapatkan Xendit API key yang sudah kita letakkan pada file .env sebelumnya
public function __construct()
{
Configuration::setXenditKey(env('XENDIT_SECRET_KEY'));
}
Lalu kita akan membuat function createInvoice yang berfungsi untuk mengirimkan request invoice ke Xendit
public function createInvoice(Request $request)
{
try {
$order = new Payment;
$order->user_id = $request->input('user_id');
$order->external_id = (string) Str::uuid();
$order->amount = $request->input('amount');
$order->payer_email = $request->input('payer_email');
$order->description = $request->input('description');
$createInvoice = new CreateInvoiceRequest([
'external_id' => $order->external_id,
'amount' => $request->input('amount'),
'payer_email' => $request->input('payer_email'),
'description' => $request->input('description'),
'invoice_duration' => 172800,
]);
$apiInstance = new InvoiceApi();
$generateInvoice = $apiInstance->createInvoice($createInvoice);
$order->checkout_link = $generateInvoice['invoice_url'];
$order->save();
return response()->json([
'message' => 'Invoice created',
'checkout_link' => $order->checkout_link,
]);
} catch (\Throwable $th) {
throw $th;
}
}
Response dari request tersebut berisi link pembayaran dan message. Selanjutnya kita akan membuat function untuk menerima callback dari request dan pembayaran.
public function handleWebhook(Request $request)
public function handleWebhook(Request $request)
{
$data = $request->all();
$external_id = $data['external_id'];
$status = strtolower($data['status']);
$payment_method = $data['payment_method'];
$order = Payment::where('external_id', $external_id)->first();
$order->status = $status;
$order->payment_method = $payment_method;
$order->save();
return response()->json([
'message' => 'Webhook received',
'status' => $status,
'payment_method' => $payment_method,
]);
}
- Menyiapkan url sebagai penerima callback dari Xendit
Kita perlu menjadikan function handleWebhook menjadi sebuah API yang nantinya API tersebut akan dikirim callback oleh Xendit. Buat rute di api.php seperti di bawah ini
Route::post('/payments/webhook',[PaymentController::class,'handleWebhook']);
Lalu simpan alamat API tersebut di bagian callback Xendit
- Testing
Pada testing kali ini saya akan menggunakan POSTMAN dengan contoh request sebagai berikut
Request pembayaran berhasil dilakukan, lalu buka checkout_link di dalam browser dan lakukan simulasi pembayaran
Apabila request pembayaran berhasil dibayar, maka status transaksi akan berubah menjadi Successful
Dan apabila callback dari Xendit berhasil dikirim ke /api/payments/webhook maka seharusnya status request dari request tersebut berubah menjadi PAID
KESIMPULAN
Melalui langkah-langkah di atas, Kamu bisa dengan mudah mengintegrasikan Xendit di Laravel untuk menyediakan pembayaran dan penagihan di dalam aplikasi web dengan mudah. Xendit menyediakan berbagai fitur dan dukungan yang bisa membantumu dalam menyederhanakan proses pembayaran dan meningkatkan kepuasan pelanggan
Writer : Muhammad Satria Rajendra, Back-end Developer