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