Langkah Demi Langkah: Instalasi Midtrans Multipayment di PHP untuk Transaksi Lebih Lancar!

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 .

Midtrans Multipayment juga menyediakan layanan Pembayaran melalui Bank Transfer, Gojek, Alfamart/Indomart, BCA dan lainnya. midtrans sendiri mempunyai lisensi dari Bank Indonesia yang membuat sitem  pembayaran menjadi Aman Berikut ini adalah keamanan yang dimiliki oleh Midtrasns 

  1. Bank Indonesia, Midtrans terdaftar dan memegang lisensi dari bank Indonesia sejak tahun 2018.
  2. Kementrian Komunikasi dan Informatika Republik indonesia ( Kominfo), Midtrans terdaftar sebagai penyelenggara sistem elektronik di Kementrian Komunikasi dan Informatika Republik indonesia
  3. 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.
  4. PCI DSS, Yaitu untuk menjamin keamanan Transaksi Konsumen sesuai yang ditetapkan oleh PCI Security Standard.
  5. ISO 27001,  Untuk melindungi Transaksi Secara Internal dan eksternal berdasarkan standar internasional.
Data diatas merupakan Sertifikasi yang  dimiliki oleh Midtrans Sendiri. 

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.

Terus Bagaimana cara Instalasi Midtrans di Php ?  untuk instalasi midtrans di Php adalah sebagai berikut.

Demo Aplikasi Payment Midtrans


a. Membuat Akun Midtrans dan Access Key

1. Langkah Pertama Kalian harus mendaftarkan Akun kalian ke Midtrans dengan cara kalian bisa klik Tautan ini
2. kemudian kalian isi sesuai Data yang diminta

Tampilan Register Midtrans
3. Jika Kalian sudah Membuat akun baru di Midtrans, Langkah selanjutnya kalian Login sesuai akun yang tadi Kalian Buat ingin.

Halaman Login Midtrans

4.Jika sudah di Halaman Menu Utama, Kalian Klik Environment yang sudah saya tandai di gambar bawah ini. Dan Kalian Pilih Environmentnya dari production Menjadi Sandbox.

Tampilan Halaman Utama

 

5. Kemudian Klik Pengaturan -> Access Key. Nah disini Kalian Copy Paste Client Key dan Server Key kedalam Notepad kalian supaya lebih mudah. 

Client Key dan Server Key untuk menghubungkan Midtrans dan Projek Kalian

b. Pengenalan Komponen Aplikasi. 

1. Kalian Download terlebih Dahulu Midtrans-php disini
2. Ekstrak File Midtrans yang sudah di download.
3. Pindahkan Folder Midtrans yang sudah di ektrak tadi ke folder HTdoc di xampp.
3. Langkah selanjutnya, Kita test dulu nih file Midtrans kita apakah sudah terbung atau tidak, dengan cara kalian msauk ke folder Example -> Snap 


Di Folder snap ada 3 File diantaranya :
    a. Checkout-Process.php
    b. index.php 
    c. Checkout-Process-Simple-version.php

Kemudian kalian buka file Checkout-process.php

<?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 keys
Config::$serverKey = '<your server key>';
Config::$clientKey = '<your client key>';

// non-relevant function only used for demo/example purpose
printExampleWarningMessage();

// Uncomment for production environment
// Config::$isProduction = true;

// Enable sanitization
Config::$isSanitized = true;

// Enable 3D-Secure
Config::$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>
Kemudian kalian Ubah yang sudah Saya Tandai <your server key> dengan Server Key dan <your client key>  dengan Client key yang sudah Kalian Copy ke dalam Notepad.  kalian Akses folder Snap di web Browser kalian http://Localhost/midtrans-php/example/snap.

kalian coba klik Tombol Pay Apakah masih error atau tidak Jika sudah Terhubung akan keluar tampilan seperti dibawah ini

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:

  1. Buat Akun Midtrans: Kunjungi situs Midtrans dan daftar untuk mendapatkan akun. 
  2. Dapatkan Kunci API: Setelah berhasil masuk, navigasikan ke bagian dashboard atau pengaturan akun untuk mendapatkan Server Key dan Client Key.
Langkah ini sama seperti point a diatas. Jika kalian sudah punya key nya langung saja ke langkah yang selanjutnya. 

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

  1. Login ke Dashboard Midtrans: Masuk ke dashboard Midtrans menggunakan akun Anda.
  2. Pilih Setelan Konfigurasi: Navigasi ke bagian konfigurasi atau pengaturan.
  3. Tambahkan URL Callback: Masukkan URL lengkap dari endpoint callback yang Anda siapkan (misalnya, https://yourdomain.com/callback.php untuk produksi atau https://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.
Mengintegrasikan layanan pembayaran Midtrans dengan PHP tidak hanya memungkinkan Anda untuk menerima pembayaran online dengan aman, tetapi juga memperluas opsi pembayaran bagi pelanggan Anda. Dengan mengikuti langkah-langkah di atas, Anda dapat dengan mudah menambahkan fungsionalitas pembayaran online ke aplikasi PHP Anda, mendukung pertumbuhan dan kenyamanan pelanggan.

Untuk Upgrade Kalian Bisa Info Lebih Lanjut di Situs Web Resminya di https://midtrans.com/id/pricing .

Untuk demonya Bisa kalian kunjungi ke alamat https://docs.midtrans.com/en/snap/interactive-demo


Kesimpulan

Midrans merupakan Multipayment yang menyediakan layanan Pembayaran melalui Bank Transfer, Gojek, Alfamart/Indomart, BCA dan lainnya. Dengan keamanan yang dimiliki oleh Midtrans sendiri, Banyak seorang Web Development menggunakan Payment ini, Karena Midtrans ini lebih Mudah untuk di Instalasi Oleh seorang Developer. 

Lebih baru Lebih lama