Dipost: 4 tahun yang lalu Update 2 tahun yang lalu
Jawaban
Jadi buat akun developer/sandbox Buat akun payment gateway Trus ngoding https://api-docs.midtrans.com/ API. Tapi saya pakainya buat WordPress dan API payment gateway lain (PayPal, Authorize.Net, Stripe)
@Astried
9 Kontribusi 3 Poin
Dipost: 4 tahun yang lalu Update 4 tahun yang lalu
Pake
composer kak, bisa di lihat github midtrans nya: https://github.com/midtrans/midtrans-php
Login untuk gabung berdiskusi
Melihat judul postingan ini, mungkin teman-teman sudah bisa membaca apa isi dari postingan kali ini. Ya, percobaan saya kali ini adalah integrasi midtrans di aplikasi yang dibangun menggunakan PHP. Midtrans ini saya gunakan sebagai payment gateway untuk menangani proses pembayaran. Karena tujuan awalnya itu untuk mempelajari cara kerja integrasi midtrans, jadi aplikasi yang saya jadikan studi kasus itu sederhana. Selain itu, di sini
saya hanya menggunakan PHP native dan belum menggunakan framework apapun. Untuk integrasi midtrans dengan framework bisa kita bahas di lain waktu.
Studi kasus postingan kali ini cukup sederhana. Hanya ada tampilan daftar item yang dibeli dan tombol checkout, lalu ada proses pembayaran, lalu menerima notifikasi dari midtrans dan selesai. Ya, sesuai dengan judulnya aplikasi payment sederhana menggunakan PHP dan midtrans.
Ada beberapa tahapan untuk membangun aplikasi payment sederhana
menggunakan PHP dan midtrans:
Step 1. Persiapan
Step 2. Create Halaman Checkout
Step 3. Create Checkut Process
Step 4. Create Notification Handler
Step 5. Uji Coba
Teman-teman ingin coba juga? Yuk, kita mulai.
Persiapan
Sebelum mengikuti tutorial ini, ada beberapa hal yang harus kita persiapkan:
Download dan Setup NGROK
Untuk keperluan uji coba menggunakan midtrans, aplikasi kita itu harus terhubung ke internet.
Kabar baiknya kita bisa menggunakan NGROK untuk mengatasi problem tersebut. Teman-teman bisa coba mendaftar dulu untuk masuk ke dashboard NGROK dan mendapatkan authtoken.
Selanjutnya kita download terlebih dahulu ngrok. Kita bisa download langsung di web resminya. Setelah ngrok kita download (dengan nama file ngrok.zip), kita unzip ngrok.zip. Buka terminal lalu run command di bawah ini.
unzip /path/to/ngrok.zip
Kita bisa lihat ada file baru
ngrok. Selanjutnya kita run ngrok, lalu kita hubungkan ke akun kita menggunakan authtoken.
ngrok authtoken
Authtoken-nya ada di menu Getting Started > Your Authtoken. Sampai tahapan ini pengaturan ngrok sudah selesai, nanti kita coba gunakan untuk keperluan uji coba aplikasi.
Mendapatkan Midtrans API Access Key
Teman-teman harus punya API access key midtrans terlebih dahulu. Untuk mendapatkan key tersebut, teman-teman daftar terlebih dahulu dan selesaikan
pendaftaran. Setelah itu masuk ke halaman dashboard dengan environtment sandbox (bisa lihat di sidebar ada opsi untuk mengubah environment). Di dalam halaman dashboard, masuk ke menu Settings (atau Pengaturan) lalu pilih sub menu Access Key.
Di halaman Access Key, terdapat Merchant ID, Client Key dan Server Key. Nanti kita akan pakai ketiganya, untuk client key nanti kita gunakan untuk authorization di front end, sedangkan Server Key untuk authorization di bagian backend.
Keterangan:
Ada baiknya key ini tidak dibagikan kesiapapun, terutama Server Key.
Setup Codelab
Codelab ini kita gunakan untuk project payment sederhana menggunakan PHP dan midtrans. Sekarang kita akan buat folder khusus project kita. Buka terminal lalu buat folder baru.
mkdir payment-php-midtrans
lalu masuk folder yang baru saja kita buat.
cd payment-php-midtrans
Selanjutnya kita install package yang meng-handle integrasi dengan midtrans.
composer require midtrans/midtrans-php
Untuk menggunakan api key yang sudah kita dapatkan
di tahapan sebelumnya, kita akan menggunakan file .env untuk menyimpan key. Jadi kita coba install terlebih dahulu package untuk membaca variable dari .env.
composer require vlucas/phpdotenv
Setelah package selesai terinstall, buat file baru dengan nama .env. Lalu kita masukan merchant id dan juga kedua api key midtrans.
Keterangan: Api Key yang kita pakai untuk environment sandbox ya.. bukan untuk production.
Ini tahapan opsional, jaga-jaga kalau aplikasinya diupload
ke github. Buat file baru dengan nama .gitignore, lalu kita ketik beberapa file yang akan kita ignore apabila menggunakan git.
.env
log/*
vendor
Oke, codelab untuk aplikasi payment sederhana sudah selesai.
Create Halaman Checkout
Halaman ini akan menampilkan halaman untuk checkout ketika kita belanja di online store atau pun market place. Untuk membuat halaman checkout, buat file baru dengan nama index.php, lalu kita ketik baris kode berikut ini.
Integrasi midtrans di aplikasi payment sederhana - qadrlabs.com
Cart:
Ebook Belajar PHP OOP at qadrLabs x @100000
Ebook Belajar Laravel 8 at qadrLabs x @180000
Total: Rp 280.000,00
Seperti yang terlihat
pada baris kode di atas, halaman ini menampilkan daftar barang yang dibeli dan juga terdapat form untuk melakukan aksi checkout. Pada form tersebut, terdapat input yang disembunyikan yang berisi value total yang akan dibayarkan melalui payment gateway. Selain itu untuk prosesnya akan ditangani oleh file checkout-process.php yang akan kita buat di tahapan selanjutnya.
Create Checkout Process
Langkah selanjutnya adalah membuat file untuk menangani proses input dari halaman checkout. Buat file
baru dengan nama checkout-process.php. Lalu kita ketik baris kode berikut ini.
Setelah pengguna menyelesaikan proses pendaftaran melalui interface dari midtrans ataupun terdapat perubahan status transaksi, notifikasi via HTTP(S) POST / webhooks akan dikirimkan ke server. Nah untuk menangani notifikasi ini kita buat handler-nya. Kita buat file baru dengan nama notification-handler.php dan kita ketik baris kode berikut ini.
load();
Midtrans\Config::$isProduction = false;
Midtrans\Config::$serverKey = $_ENV['MIDTRANS_SERVER_KEY'];
$notif = new Midtrans\Notification();
$transaction = $notif->transaction_status;
$type = $notif->payment_type;
$order_id = $notif->order_id;
$fraud = $notif->fraud_status;
$message = 'ok';
if ($transaction == 'capture') {
// For credit card transaction, we need to check whether transaction is challenge by FDS or not
if ($type == 'credit_card') {
if ($fraud == 'challenge') {
// TODO set payment status in merchant's database to 'Challenge by FDS'
// TODO merchant should decide whether this transaction is authorized or not in MAP
$message = "Transaction order_id: " . $order_id ." is challenged by FDS";
} else {
// TODO set payment status in merchant's database to 'Success'
$message = "Transaction order_id: " . $order_id ." successfully captured using " . $type;
}
}
} elseif ($transaction == 'settlement') {
// TODO set payment status in merchant's database to 'Settlement'
$message = "Transaction order_id: " . $order_id ." successfully transfered using " . $type;
} elseif ($transaction == 'pending') {
// TODO set payment status in merchant's database to 'Pending'
$message = "Waiting customer to finish transaction order_id: " . $order_id . " using " . $type;
} elseif ($transaction == 'deny') {
// TODO set payment status in merchant's database to 'Denied'
$message = "Payment using " . $type . " for transaction order_id: " . $order_id . " is denied.";
} elseif ($transaction == 'expire') {
// TODO set payment status in merchant's database to 'expire'
$message = "Payment using " . $type . " for transaction order_id: " . $order_id . " is expired.";
} elseif ($transaction == 'cancel') {
// TODO set payment status in merchant's database to 'Denied'
$message = "Payment using " . $type . " for transaction order_id: " . $order_id . " is canceled.";
}
$filename = $order_id . ".txt";
$dirpath = 'log';
is_dir($dirpath) || mkdir($dirpath, 0777, true);
echo file_put_contents($dirpath . "/" . $filename, $message);
Dari baris kode di atas, ketika terdapat
notifikasi via webhook ataupun HTTP(S), handler akan membaca notifikasi lalu membaca status transaksi. Setiap ada perubahan transaksi, keterangannya akan ditulis di dalam variable $message. Karena di sini kita belum menggunakan database apapun, jadi kita coba tulis keterangan dari setiap prosesnya ke dalam file dengan ekstensi .txt.
Uji Coba
Untuk melakukan uji coba aplikasi payment sederhana ini, kita perlu mendaftarkan terlebih dahulu URL yang digunakan sebagai notification
handler. Buka kembali dashboard midtrans, lalu masuk ke menu PENGATURAN, lalu pilih sub menu KONFIGURASI. Pada halaman ini terdapat form untuk mendaftarkan URL yang diperlukan seperti Payment notification URL, Recurring Notification URL, Finish Redirect URL dan lain-lain.
Untuk menangani webhook atau HTTP(S) POST notification, isi payment notification URL dengan url notification-handler.php, misalnya https://your-web.com/notification-handler.php ditulis menggunakan URL protocol prefix https. Ya, notikasinya mesti terhubung dengan internet. Midtrans tidak bisa mengirim notifikasi ke
localhost, jadi kita coba pakai ngrok yang sudah kita siapkan sebelumnya.
Sekarang kita coba run dulu aplikasi payment.
php -S localhost:8080
Setelah itu kita buka terminal yang kedua untuk running ngrok. Di dalam direktori ngrok, kita run ngrok dengan port 8080.
./ngrok http 8080
Setelah kita run, nanti terdapat keterangan link aplikasi kita dengan format: https://3xxx-1xx-1x4-xx2-xxxx.ngrok.io/. Ya, linknya beda beda. Nah dengan menggunakan link ini kita sudah terhubung ke internet. Jadi kita bisa mendaftarkan link untuk
Payment notification URL dengan URL https://3xxx-1xx-1x4-xx2-xxxx.ngrok.io/notification-handler.php.
Buka kembali halaman KONFIGURASI di dahsboard midtrans, di bagian Payment notification URL isi dengan link https://3xxx-1xx-1x4-xx2-xxxx.ngrok.io/notification-handler.php, setelah itu tekan button UPDATE.
Persiapan uji coba sudah selesai, selanjutnya kita bisa coba langsung buka aplikasi dengan menggunakan url dari ngrok. Kalau kita buka melalui chrome, halaman ini tidak bisa kita buka langsung, klik Visit this unsafe site untuk membukan halaman.
Di halaman awal tampil daftar item yang dibeli dan terdapat button checkout. Klik
button checkout untuk masuk ke halaman checkout-process.php. Ketika membuka halaman ini, kita bisa lihat ada snapToken. SnapToken ini kita dapatkan setelah mengirim request menggunakan server key dan function getSnapToken() dari package midtrans.
Nah snapToken ini kita gunakan untuk memanggil built-in interface (snap) dari midtrans. Bisa kita lihat di bagian kode javascript.
snap.pay('',
... kode lainnya
)
Selanjutnya coba klik button Pay!. Kita bisa lihat ada interface untuk melakukan pembayaran. Pilih Continue,
lalu pilih metode pembayaran (misalnya Mandiri), lalu klik SEE ACCOUNT NUMBER. Setelah itu kita bisa lihat Company Code dan juga Payment Code. Keterangan: ini hanya uji coba jadi tidak perlu mengirim uang betulan, sekali lagi mengingatkan jangan coba mengirim uang betulan ya.
Nah ketika selesai proses di atas, midtrans akan mengirimkan HTTP(S) POST notification dan kita bisa lihat di folder log terdapat file .txt, tanda notication handler kita berjalan dengan baik.
Penutup
Pada tutorial kali ini, yaitu membuat aplikasi payment sederhana menggunakan PHP dan midtrans, ada beberapa hal yang kita pelajari. Dimulai dari proses instalasi API Client dari midtrans sampai dengan uji coba proses pembayaran menggunakan built-in interface atau snap.
Berbeda dengan tutorial sebelumnya, aplikasi kita harus terhubung ke internet ketika proses uji coba, karena harus menerima notifikasi via HTTP(S) POST atau webhook dari midtrans. Di sini kita sudah coba
menggunakan ngrok untuk tunneling, supaya aplikasi dapat diakses lewat internet dan supaya HTTP(S) POST dapat dihandle langsung oleh notification-handler. Selain itu, untuk mengetahui apakah proses pembayaran melalui midtrans berhasil atau gagal, kita sudah coba untuk menuliskannya ke dalam file .txt dan setelah uji coba kita bisa lihat beberapa file .txt setiap proses pembayaran atau terjadinya perubahan status transaksi.
Tertarik untuk eksplorasi lebih jauh? Selamat bereksperimen
dan tetap semangat berkarya.