PHP code example of gonon / midtrans

1. Go to this page and download the library: Download gonon/midtrans library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

gonon / midtrans example snippets


use Gonon\Midtrans\Config\MidtransConfig;
use Gonon\Midtrans\Client\MidtransClient;
use Gonon\Core\Configuration\Environment;

// 1. Define your configuration
$config = new MidtransConfig(
    serverKey: 'SB-Mid-server-YOUR_SERVER_KEY',
    clientKey: 'SB-Mid-client-YOUR_CLIENT_KEY', // Optional, 

use Gonon\Midtrans\DTO\Snap\CreateSnapTransactionRequest;
use Gonon\Midtrans\DTO\Shared\TransactionDetails;
use Gonon\Midtrans\DTO\Shared\CustomerDetails;
use Gonon\Midtrans\DTO\Snap\Callbacks;

$request = new CreateSnapTransactionRequest(
    transactionDetails: new TransactionDetails(
        orderId: 'ORDER-' . time(),
        grossAmount: 150000
    ),
    customerDetails: new CustomerDetails(
        firstName: 'John',
        lastName: 'Doe',
        email: '[email protected]',
        phone: '08123456789'
    ),
    callbacks: new Callbacks(
        finish: 'https://yourwebsite.com/payment/success'
    )
);

$snapResponse = $client->snap()->createRedirectUrl($request);

echo $snapResponse->redirectUrl; // Redirect user to this URL

// Assuming the same $request object from above...
$snapResponse = $client->snap()->createToken($request);

echo $snapResponse->token; // Pass this token to your frontend JavaScript

use Gonon\Midtrans\DTO\Core\CreateChargeRequest;
use Gonon\Midtrans\DTO\Core\BankTransferDetails;
use Gonon\Midtrans\DTO\Shared\TransactionDetails;

$request = new CreateChargeRequest(
    paymentType: 'bank_transfer',
    transactionDetails: new TransactionDetails('ORDER-CORE-123', 50000),
    bankTransfer: new BankTransferDetails(
        bank: 'bca'
    )
);

$response = $client->charge()->charge($request);

echo $response->transactionId;
echo $response->transactionStatus; // e.g., 'pending'

use Gonon\Midtrans\DTO\Core\CreditCardDetails;
use Gonon\Midtrans\DTO\Shared\CustomerDetails;
use Gonon\Midtrans\DTO\Shared\TransactionDetails;
use Gonon\Midtrans\DTO\Core\CreateChargeRequest;

$request = new CreateChargeRequest(
    paymentType: 'credit_card',
    transactionDetails: new TransactionDetails('order102', 789000),
    customerDetails: new CustomerDetails(
        firstName: 'budi',
        lastName: 'pratama',
        email: '[email protected]',
        phone: '08111222333'
    ),
    creditCard: new CreditCardDetails(
        tokenId: '<token_id from Get Card Token Step>',
        authentication: true
    )
);

$response = $client->charge()->charge($request);

use Gonon\Midtrans\DTO\Core\GopayDetails;
use Gonon\Midtrans\DTO\Core\ShopeepayDetails;

// GoPay Example
$gopayRequest = new CreateChargeRequest(
    paymentType: 'gopay',
    transactionDetails: new TransactionDetails('ORDER-GOPAY-123', 50000),
    gopay: new GopayDetails(
        enableCallback: true,
        callbackUrl: 'https://yourwebsite.com/gopay/callback'
    )
);

$response = $client->charge()->charge($gopayRequest);

// ShopeePay Example
$shopeepayRequest = new CreateChargeRequest(
    paymentType: 'shopeepay',
    transactionDetails: new TransactionDetails('ORDER-SHOPEEPAY-123', 50000),
    shopeepay: new ShopeepayDetails(
        callbackUrl: 'https://yourwebsite.com/shopeepay/callback'
    )
);

$response = $client->charge()->charge($shopeepayRequest);

use Gonon\Midtrans\DTO\Core\CstoreDetails;

$request = new CreateChargeRequest(
    paymentType: 'cstore',
    transactionDetails: new TransactionDetails('ORDER-CSTORE-123', 50000),
    cstore: new CstoreDetails(
        store: 'indomaret', // or 'alfamart'
        message: 'Payment for Order 123'
    )
);

$response = $client->charge()->charge($request);

$orderId = 'ORDER-123';

$status = $client->transactions()->status($orderId);
echo $status->transactionStatus; // 'settlement', 'pending', etc.

$cancelResult = $client->transactions()->cancel($orderId);

$client->transactions()->approve($orderId);
$client->transactions()->deny($orderId);

$client->transactions()->expire($orderId);

use Gonon\Midtrans\Exceptions\NotificationException;

// Retrieve the raw JSON payload sent by Midtrans
$jsonPayload = file_get_contents('php://input');

try {
    // This strictly validates the SHA512 signature automatically using the serverKey configured in MidtransClient.
    // If the signature is invalid, it throws a NotificationException.
    $notification = $client->notifications()->parse($jsonPayload);
    
    $orderId = $notification->orderId;
    $status = $notification->transactionStatus;
    
    if ($status === 'settlement' || $status === 'capture') {
        // Safe to mark the order as paid in your database!
        echo "Payment successful for order: {$orderId}";
    } elseif ($status === 'cancel' || $status === 'deny' || $status === 'expire') {
        // Mark as failed
    }

    // Always return a 200 OK to Midtrans so they stop retrying
    http_response_code(200);
    echo "OK";
    
} catch (NotificationException $e) {
    // The signature was invalid or the JSON was malformed.
    // Do NOT process the order.
    http_response_code(403);
    echo "Invalid Signature: " . $e->getMessage();
}

use Gonon\Midtrans\Exceptions\MidtransException;
use Gonon\Midtrans\Exceptions\ChargeException;
use Gonon\Midtrans\Exceptions\SnapException;

try {
    $snap->createToken($request);
} catch (SnapException $e) {
    // Handle Snap API specific failure
    echo $e->getMessage();
} catch (MidtransException $e) {
    // Catch-all for any Midtrans SDK exception
    echo $e->getMessage();
}
bash
composer analyse