PHP code example of winpay / laravel-sdk

1. Go to this page and download the library: Download winpay/laravel-sdk 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/ */

    

winpay / laravel-sdk example snippets


use Winpay;

$response = Winpay::snap()->va()->create([...]);

use Winpay\Core\WinpayClient;

class OrderController
{
    public function __construct(
        private readonly WinpayClient $winpay,
    ) {}

    public function store()
    {
        $response = $this->winpay->va->create([...]);
    }
}

$response->responseCode     // string|null, e.g. "2002700"
$response->responseMessage  // string|null, e.g. "Successful"
$response->httpStatusCode   // int, e.g. 200
$response->data             // array, full response payload
$response->isSuccess()      // bool, true jika 2xx
$response->get('key')       // mixed, akses data by key
$response->get('key', 'default')

$snap = Winpay::snap();

$snap->va()->create($payload)
$snap->va()->inquiry($payload)
$snap->va()->status($payload)
$snap->va()->delete($payload)

$snap->qris()->create($payload)
$snap->qris()->status($payload)
$snap->qris()->cancel($payload)

$snap->ewallet()->create($payload)
$snap->ewallet()->status($payload)
$snap->ewallet()->cancel($payload)

$snap->creditCard()->create($payload)
$snap->creditCard()->status($payload)
$snap->creditCard()->cancel($payload)

$snap->retail()->create($payload)
$snap->retail()->status($payload)
$snap->retail()->cancel($payload)

$snap->report()->balance($payload)
$snap->report()->history($payload)
$snap->report()->statement($payload)

# Checkout Page (HMAC)
$snap->checkout()->create($payload)
$snap->checkout()->find($id)
$snap->checkout()->findByRef($merchantRef)
$snap->checkout()->update($id, $payload)
$snap->checkout()->delete($id)
$snap->checkout()->deleteByRef($merchantRef)

use Winpay\Core\Enums\VaChannel;
use Winpay\Core\Enums\VaType;

// Create VA
$va = Winpay::snap()->va()->create([
    'partnerServiceId' => '35539457',
    'customerNo' => '9876543210',
    'virtualAccountNo' => '355394579876543210',
    'virtualAccountName' => 'John Doe',
    'virtualAccountTrxType' => VaType::ONE_OFF->value,
    'totalAmount' => ['value' => '100000.00', 'currency' => 'IDR'],
    'expiredDate' => '2026-12-31T23:59:59+07:00',
]);

// Inquiry VA
$va = Winpay::snap()->va()->inquiry([
    'partnerServiceId' => '35539457',
    'customerNo' => '9876543210',
    'virtualAccountNo' => '355394579876543210',
]);

// Status VA
$va = Winpay::snap()->va()->status([
    'partnerServiceId' => '35539457',
    'customerNo' => '9876543210',
    'virtualAccountNo' => '355394579876543210',
]);

// Delete VA
Winpay::snap()->va()->delete([
    'partnerServiceId' => '35539457',
    'customerNo' => '9876543210',
    'virtualAccountNo' => '355394579876543210',
]);

// Generate QRIS
$qris = Winpay::snap()->qris()->create([
    'partnerServiceId' => '35539457',
    'amount' => [
        'value' => '50000.00',
        'currency' => 'IDR',
    ],
    'merchantId' => 'MERCHANT001',
    'storeId' => 'STORE001',
    'validityPeriod' => '2026-12-31T23:59:59+07:00',
]);

// Query QRIS
$qris = Winpay::snap()->qris()->status([
    'originalReferenceNo' => 'ORIG_REF_001',
]);

// Cancel QRIS
Winpay::snap()->qris()->cancel([
    'originalReferenceNo' => 'ORIG_REF_001',
]);

use Winpay\Core\Enums\EwalletChannel;

// Create Payment
$ewallet = Winpay::snap()->ewallet()->create([
    'partnerReferenceNo' => 'REF-001',
    'amount' => ['value' => '25000.00', 'currency' => 'IDR'],
    'additionalInfo' => [
        'channel' => EwalletChannel::DANA->value,
        'customerName' => 'John Doe',
    ],
]);

// Status
$ewallet = Winpay::snap()->ewallet()->status([
    'originalReferenceNo' => 'REF-001',
]);

// Cancel
Winpay::snap()->ewallet()->cancel([
    'originalReferenceNo' => 'REF-001',
]);

// Create Payment
$cc = Winpay::snap()->creditCard()->create([
    'partnerReferenceNo' => 'REF-001',
    'amount' => ['value' => '500000.00', 'currency' => 'IDR'],
    'additionalInfo' => [
        'channel' => 'CC',
        'customerName' => 'John Doe',
    ],
]);

// Status
$cc = Winpay::snap()->creditCard()->status([...]);

// Cancel
Winpay::snap()->creditCard()->cancel([...]);

use Winpay\Core\Enums\RetailChannel;

$retail = Winpay::snap()->retail()->create([
    'partnerServiceId' => '35539457',
    'customerNo' => '9876543210',
    'paymentCode' => '355394579876543210',
    'customerName' => 'John Doe',
    'totalAmount' => ['value' => '50000.00', 'currency' => 'IDR'],
    'additionalInfo' => [
        'channel' => RetailChannel::ALFAMART->value,
    ],
]);

// Status
$retail = Winpay::snap()->retail()->status([
    'originalReferenceNo' => 'REF-001',
]);

// Cancel
Winpay::snap()->retail()->cancel([
    'originalReferenceNo' => 'REF-001',
]);

// Balance Inquiry
$balance = Winpay::snap()->report()->balance([
    'partnerServiceId' => '35539457',
]);

// Transaction History
$history = Winpay::snap()->report()->history([
    'fromDateTime' => '2026-01-01T00:00:00+07:00',
    'toDateTime' => '2026-12-31T23:59:59+07:00',
]);

// Bank Statement
$statement = Winpay::snap()->report()->statement([
    'accountNo' => '1234567890',
    'fromDateTime' => '2026-01-01T00:00:00+07:00',
    'toDateTime' => '2026-12-31T23:59:59+07:00',
]);

// Create Invoice
$invoice = Winpay::snap()->checkout()->create([
    'customer' => [
        'name' => 'John Doe',
        'email' => '[email protected]',
        'phone' => '081234567890',
    ],
    'items' => [
        [
            'id' => 'ITEM001',
            'name' => 'Product A',
            'price' => 25000,
            'quantity' => 2,
        ],
    ],
    'totalAmount' => 50000,
    'merchantRef' => 'INV-001',
    'expiryMinutes' => 60,
    'successUrl' => 'https://example.com/success',
    'failureUrl' => 'https://example.com/failure',
]);

// Find by ID
$invoice = Winpay::snap()->checkout()->find('inv-id-123');

// Find by Merchant Reference
$invoice = Winpay::snap()->checkout()->findByRef('INV-001');

// Update Invoice
$invoice = Winpay::snap()->checkout()->update('inv-id-123', [
    'totalAmount' => 75000,
]);

// Delete by ID
Winpay::snap()->checkout()->delete('inv-id-123');

// Delete by Merchant Reference
Winpay::snap()->checkout()->deleteByRef('INV-001');

// Di routes/api.php
Winpay\Laravel\WinpayServiceProvider::callbackRoutes('webhook/winpay');

// Di App\Providers\EventServiceProvider.php
use Winpay\Laravel\Events\WinpayCallbackReceived;

protected $listen = [
    WinpayCallbackReceived::class => [
        HandleWinpayCallback::class,
    ],
];

class HandleWinpayCallback
{
    public function handle(WinpayCallbackReceived $event): void
    {
        if (! $event->verified) {
            logger()->warning('Winpay callback invalid signature', [
                'type' => $event->type,
            ]);
            return;
        }

        if ($event->transactionStatus === '00') {
            // Process successful payment
            // $event->type: 'va' | 'qris' | 'ewallet' | 'credit_card'
            // $event->payload: full request body
        }
    }
}

use Winpay\Core\Exceptions\WinpayException;
use Winpay\Core\Exceptions\HttpException;

try {
    $result = Winpay::snap()->va()->create([...]);
} catch (HttpException $e) {
    // 4xx/5xx — error dari server Winpay
    $e->getStatusCode(); // int
    $e->getMessage();    // string
    $e->getErrors();     // array|null (responseCode, responseMessage, full payload)
} catch (WinpayException $e) {
    // Config error, signature error, network error
}
bash
php artisan vendor:publish --tag=winpay-config
bash
php vendor/bin/phpunit