Hallo, Tutorial kali ini adalah Cara menghubungkan Payment Midtrand dengan Project Php kalian. Terlebih dahulu saya perkenalkan Midtras merupakan Payment Gateway yang melayani Terima pembayaran dan dana dengan lebih mudah .
- Bank Indonesia, Midtrans terdaftar dan memegang lisensi dari bank Indonesia sejak tahun 2018.
- Kementrian Komunikasi dan Informatika Republik indonesia ( Kominfo), Midtrans terdaftar sebagai penyelenggara sistem elektronik di Kementrian Komunikasi dan Informatika Republik indonesia
- AES 256, AES adalah Standar Enkripsi elektronik yang didirikan Oleh U.S National Institute. AES 256 ini memastikan untuk melindungi data sensitif dari pencuri dan Akses yang tidak Otorisasi.
- PCI DSS, Yaitu untuk menjamin keamanan Transaksi Konsumen sesuai yang ditetapkan oleh PCI Security Standard.
- ISO 27001, Untuk melindungi Transaksi Secara Internal dan eksternal berdasarkan standar internasional.
Mengapa Memilih Midtrans?
Midtrans menawarkan beberapa keuntungan yang membuatnya populer di antara pengembang dan bisnis online:
- Keamanan: Midtrans menyediakan lapisan keamanan yang tinggi dengan teknologi enkripsi untuk memproses transaksi.
- Kemudahan Integrasi: Midtrans menyediakan SDK dan dokumentasi yang lengkap untuk berbagai bahasa pemrograman, termasuk PHP.
- Dukungan untuk Berbagai Metode Pembayaran: Dari kartu kredit/debit hingga pembayaran virtual seperti e-wallet, Midtrans mendukung berbagai cara pembayaran.
![]() |
Demo Aplikasi Payment Midtrans |
a. Membuat Akun Midtrans dan Access Key
Tampilan Register Midtrans |
Halaman Login Midtrans |
Tampilan Halaman Utama |
Client Key dan Server Key untuk menghubungkan Midtrans dan Projek Kalian |
b. Pengenalan Komponen Aplikasi.
<?php// This is just for very basic implementation reference, in production, you should validate the incoming requests and implement your backend more securely.// Please refer to this docs for snap popup:// https://docs.midtrans.com/en/snap/integration-guide?id=integration-steps-overview
namespace Midtrans;
require_once dirname(__FILE__) . '/../../Midtrans.php';// Set Your server key// can find in Merchant Portal -> Settings -> Access keysConfig::$serverKey = '<your server key>';Config::$clientKey = '<your client key>';
// non-relevant function only used for demo/example purposeprintExampleWarningMessage();
// Uncomment for production environment// Config::$isProduction = true;
// Enable sanitizationConfig::$isSanitized = true;
// Enable 3D-SecureConfig::$is3ds = true;
// Uncomment for append and override notification URL// Config::$appendNotifUrl = "https://example.com";// Config::$overrideNotifUrl = "https://example.com";
// Required$transaction_details = array( 'order_id' => rand(), 'gross_amount' => 94000, // no decimal allowed for creditcard);
// Optional$item1_details = array( 'id' => 'a1', 'price' => 18000, 'quantity' => 3, 'name' => "Apple");
// Optional$item2_details = array( 'id' => 'a2', 'price' => 20000, 'quantity' => 2, 'name' => "Orange");
// Optional$item_details = array ($item1_details, $item2_details);
// Optional$billing_address = array( 'first_name' => "Andri", 'last_name' => "Litani", 'address' => "Mangga 20", 'city' => "Jakarta", 'postal_code' => "16602", 'phone' => "081122334455", 'country_code' => 'IDN');
// Optional$shipping_address = array( 'first_name' => "Obet", 'last_name' => "Supriadi", 'address' => "Manggis 90", 'city' => "Jakarta", 'postal_code' => "16601", 'phone' => "08113366345", 'country_code' => 'IDN');
// Optional$customer_details = array( 'first_name' => "Andri", 'last_name' => "Litani", 'email' => "andri@litani.com", 'phone' => "081122334455", 'billing_address' => $billing_address, 'shipping_address' => $shipping_address);
// Optional, remove this to display all available payment methods$enable_payments = array('credit_card','cimb_clicks','mandiri_clickpay','echannel');
// Fill transaction details$transaction = array( 'enabled_payments' => $enable_payments, 'transaction_details' => $transaction_details, 'customer_details' => $customer_details, 'item_details' => $item_details,);
$snap_token = '';try { $snap_token = Snap::getSnapToken($transaction);}catch (\Exception $e) { echo $e->getMessage();}
echo "snapToken = ".$snap_token;
function printExampleWarningMessage() { if (strpos(Config::$serverKey, 'your ') != false ) { echo "<code>"; echo "<h4>Please set your server key from sandbox</h4>"; echo "In file: " . __FILE__; echo "<br>"; echo "<br>"; echo htmlspecialchars('Config::$serverKey = \'<your server key>\';'); die(); } }
?>
<!DOCTYPE html><html> <body> <button id="pay-button">Pay!</button> <pre><div id="result-json">JSON result will appear here after payment:<br></div></pre>
<!-- TODO: Remove ".sandbox" from script src URL for production environment. Also input your client key in "data-client-key" --> <script src="https://app.sandbox.midtrans.com/snap/snap.js" data-client-key="<?php echo Config::$clientKey;?>"></script> <script type="text/javascript"> document.getElementById('pay-button').onclick = function(){ // SnapToken acquired from previous step snap.pay('<?php echo $snap_token?>', { // Optional onSuccess: function(result){ /* You may add your own js here, this is just example */ document.getElementById('result-json').innerHTML += JSON.stringify(result, null, 2); }, // Optional onPending: function(result){ /* You may add your own js here, this is just example */ document.getElementById('result-json').innerHTML += JSON.stringify(result, null, 2); }, // Optional onError: function(result){ /* You may add your own js here, this is just example */ document.getElementById('result-json').innerHTML += JSON.stringify(result, null, 2); } }); }; </script> </body></html>
Tampilan Payment php |
Menghubungkan Payment Midtrans ke PHP: Panduan Langkah-demi-Langkah
Langkah 1: Registrasi dan Mendapatkan Kunci API
Langkah pertama dalam mengintegrasikan Midtrans adalah dengan mendaftar dan memperoleh kunci API. Berikut langkah-langkahnya:
- Buat Akun Midtrans: Kunjungi situs Midtrans dan daftar untuk mendapatkan akun.
- Dapatkan Kunci API: Setelah berhasil masuk, navigasikan ke bagian dashboard atau pengaturan akun untuk mendapatkan
Server Key
danClient Key
.
Langkah 2: Instalasi Library Midtrans PHP
Untuk memudahkan integrasi dengan PHP, Midtrans menyediakan library resmi yang dapat diinstal menggunakan Composer:
composer require midtrans/midtrans-php
Langkah 3: Konfigurasi Midtrans dalam PHP
Setelah menginstal library, konfigurasikan kunci API yang sudah Anda dapatkan dalam aplikasi PHP Anda:
require_once('vendor/autoload.php');
Midtrans\Config::$serverKey = 'your_server_key';
Midtrans\Config::$isProduction = false; // Set true jika sudah di production
Midtrans\Config::$isSanitized = true; // Set true jika data harus di-sanitized
Midtrans\Config::$is3ds = true; // Set true jika perlu 3DS
Pastikan untuk mengganti your_server_key
dengan kunci API yang sesuai dari akun Midtrans Anda.
Langkah 4: Membuat Transaksi
Untuk membuat transaksi pembayaran, Anda perlu menentukan detail transaksi dan mengirimnya ke Midtrans:
$transaction_details = array( 'order_id' => 'ORD-123456',
'gross_amount' => 145000, // total harga dalam rupiah
);
$transaction = array(
'transaction_details' => $transaction_details,
);
$snapToken = \Midtrans\Snap::getSnapToken($transaction);
Langkah 5: Integrasi dengan Halaman Pembayaran
Gunakan token yang diperoleh ($snapToken
) untuk mengarahkan pengguna ke halaman pembayaran Midtrans:
echo "<a href='https://app.sandbox.midtrans.com/snap/v2/vtweb/$snapToken'>Bayar Sekarang</a>";
Pastikan untuk mengubah URL ke https://app.midtrans.com/snap/v2/vtweb/
jika sudah di production.
Langkah 6: Handle Callback
Midtrans akan mengirimkan status pembayaran ke endpoint yang telah Anda tentukan. Handle callback ini untuk memverifikasi transaksi dan memperbarui status pesanan di sistem Anda:
// Contoh callback handler$notif = new \Midtrans\Notification();
$transaction_status = $notif->transaction_status;
$order_id = $notif->order_id;
// Proses sesuai dengan status transaksi
// Contoh: update status order di database Anda
Langkah 7: Pengaturan Tambahan
Pastikan untuk mengonfigurasi notifikasi status transaksi dan pengaturan lainnya melalui dashboard Midtrans untuk memastikan pengalaman pembayaran yang lancar bagi pengguna Anda.
Setting Callback Handler Payment Midtrans
Setting callback handler untuk pembayaran Midtrans dalam PHP sangat penting untuk memverifikasi dan memproses status pembayaran secara otomatis setelah pengguna melakukan pembayaran. Berikut langkah-langkahnya:Langkah 1: Mendefinisikan Endpoint Callback
Anda perlu menyiapkan endpoint di aplikasi PHP Anda yang akan menerima notifikasi callback dari Midtrans setelah transaksi pembayaran selesai. Misalnya, endpoint ini bisa berada di file callback.php
.
<?php// callback.php
require_once('vendor/autoload.php');
// Konfigurasi kunci API Midtrans
Midtrans\Config::$serverKey = 'your_server_key';
Midtrans\Config::$isProduction = false; // Ganti menjadi true jika sudah di production
use Midtrans\Notification;
// Mengambil data notifikasi dari Midtrans
$notification = new Notification();
// Tangkap data dari notifikasi
$transaction_status = $notification->transaction_status;
$order_id = $notification->order_id;
$transaction_id = $notification->transaction_id;
$gross_amount = $notification->gross_amount;
// Proses data sesuai dengan status transaksi
if ($transaction_status == 'capture') {
// Pembayaran telah sukses
// Proses untuk mengupdate status pesanan di sistem Anda, misalnya:
// - Menandai pesanan sebagai sudah dibayar
// - Mengirim email konfirmasi, dll.
// Contoh: Update status pesanan dalam database
// $order_id = updateOrderStatus($order_id, 'paid');
// echo "Status pembayaran untuk pesanan $order_id sudah diperbarui.";
// Response 200 OK untuk memberitahu Midtrans bahwa callback telah diterima dengan sukses
http_response_code(200);
} elseif ($transaction_status == 'cancel') {
// Pembayaran dibatalkan oleh pengguna
// Lakukan sesuatu jika diperlukan, misalnya:
// - Memperbarui status pesanan sebagai dibatalkan
// - Mengirim email notifikasi, dll.
// Response 200 OK untuk memberitahu Midtrans bahwa callback telah diterima dengan sukses
http_response_code(200);
} elseif ($transaction_status == 'pending') {
// Pembayaran masih dalam proses
// Misalnya, tidak melakukan apa-apa karena masih menunggu pembayaran dikonfirmasi
http_response_code(200);
} else {
// Selain dari 'capture', 'cancel', dan 'pending'
// Misalnya, gagal dalam proses pembayaran atau status tidak jelas
// Lakukan penanganan sesuai kebijakan aplikasi Anda, misalnya:
// - Memperbarui status pesanan sebagai gagal
// - Mengirim email notifikasi ke admin, dll.
// Response 200 OK untuk memberitahu Midtrans bahwa callback telah diterima dengan sukses
http_response_code(200);
}
?>
Langkah 2: Registrasi Endpoint Callback di Midtrans Dashboard
- Login ke Dashboard Midtrans: Masuk ke dashboard Midtrans menggunakan akun Anda.
- Pilih Setelan Konfigurasi: Navigasi ke bagian konfigurasi atau pengaturan.
- Tambahkan URL Callback: Masukkan URL lengkap dari endpoint callback yang Anda siapkan (misalnya,
https://yourdomain.com/callback.php
untuk produksi atauhttps://yourdomain.com/callback.php
untuk pengembangan).
Pastikan URL callback sudah benar dan dapat diakses. Midtrans akan mengirimkan data notifikasi ke URL callback ini setiap kali ada perubahan status transaksi.
Langkah 3: Menanggapi Notifikasi Callback
- Verifikasi Keaslian: Pastikan untuk selalu memverifikasi keaslian notifikasi yang diterima dari Midtrans menggunakan signature yang disediakan.
- Update Status Transaksi: Sesuaikan status pesanan di database atau sistem Anda berdasarkan status pembayaran yang diterima dari notifikasi.
- Tanggapi dengan Kode Status HTTP: Beri respons HTTP 200 OK ke Midtrans untuk setiap notifikasi yang diterima, ini penting untuk memastikan bahwa Midtrans tidak akan mengirim notifikasi yang sama berulang kali.
Catatan Tambahan
- Pastikan kode Anda dapat menangani setiap kemungkinan status transaksi yang diterima dari Midtrans dengan mempertimbangkan tindakan yang tepat untuk setiap status tersebut.
- Selalu uji callback handler Anda dengan menggunakan mode pengembangan (sandbox) terlebih dahulu sebelum beralih ke mode produksi.