ndradev / okeconnect-php-client
PHP Client untuk OkeConnect H2H API - Parsing lengkap untuk transaksi, webhook, dan price list
4.0.0
2026-02-20 05:57 UTC
Requires
- php: >=8.2
- ext-json: *
- guzzlehttp/guzzle: ^7.0
Requires (Dev)
- phpunit/phpunit: ^10.0|^11.0
README
Package PHP untuk integrasi API OkeConnect H2H dengan parsing lengkap untuk semua response.
Requirement: PHP 8.2 atau lebih baru
Developer: NdraDeveloper
Instalasi
composer require ndradev/okeconnect-php-client
Daftar Contoh Penggunaan
Tersedia 10 file contoh penggunaan lengkap di folder examples/:
| File | Deskripsi |
|---|---|
01_transaction.php |
Transaksi pulsa/data (fixed denom) |
02_transaction_open_denom.php |
Transaksi e-wallet (open denom/bebas nominal) |
03_check_status.php |
Cek status transaksi |
04_parse_webhook.php |
Parse webhook callback |
05_get_price_list.php |
Ambil semua daftar harga |
06_get_price.php |
Ambil harga satu produk |
07_find_product_by_code.php |
Cari produk berdasarkan kode |
08_find_product_by_category.php |
Cari produk berdasarkan kategori |
09_find_product_by_keterangan.php |
Cari produk berdasarkan keterangan |
10_find_product_by_status.php |
Cari produk berdasarkan status |
webhook.php |
Handler webhook untuk callback |
Cara Penggunaan
1. Inisialisasi Client
use OkeConnect\OkeConnect; $oke = new OkeConnect( memberId: 'OK00123', pin: '123456', password: 'secret' ); OkeConnect::setInstance($oke);
2. Menggunakan Helper Function
oke_connect('OK00123', '123456', 'secret'); $response = oke_transaction('T1', '089660522887', 'REF123');
Fitur Transaksi
Transaksi Fixed Denom (Pulsa/Data)
use OkeConnect\OkeConnectException; try { $response = $oke->transaction('T1', '089660522887', 'TRX123'); echo $response->transactionId; echo $response->refId; echo $response->provider; echo $response->nominal; echo $response->destination; if ($response->isSuccessful()) { echo "Berhasil"; echo $response->serialNumber; } if ($response->isFailed()) { echo "Gagal: " . $response->failureReason; } } catch (OkeConnectException $e) { echo "Error: " . $e->getUserMessage(); }
Transaksi Open Denom (E-Wallet)
try { $response = $oke->transactionOpenDenom('BBSDN', '085736044280', 50000, 'EW123'); echo $response->nominal; echo $response->transactionId; } catch (OkeConnectException $e) { if ($e->getCode() === OkeConnectException::INVALID_PARAMETER) { echo "Nominal harus antara 10.000 - 10.000.000"; } }
Cek Status Transaksi
try { $status = $oke->checkStatus('T5', '08980204060', 'REF123'); echo $status->getStatusText(); if ($status->isSuccessful()) { echo $status->serialNumber; echo $status->price; } if ($status->isFailed()) { echo $status->failureReason; } if ($status->isPending()) { echo "Transaksi masih pending"; } if ($status->isNoData()) { echo "Data tidak ditemukan"; } } catch (OkeConnectException $e) { echo "Error: " . $e->getUserMessage(); }
Parse Webhook Callback
try { $callback = $oke->parseWebhook($_GET); echo $callback->transactionId; echo $callback->refId; echo $callback->getStatusText(); if ($callback->isSuccessful()) { echo $callback->serialNumber; echo $callback->date; echo $callback->time; } if ($callback->isFailed()) { echo $callback->failureReason; } } catch (OkeConnectException $e) { echo "Error: " . $e->getUserMessage(); }
Price List dan Pencarian Produk
Ambil Semua Price List
try { $products = $oke->getPriceList(); foreach ($products as $product) { echo $product->code; echo $product->description; echo $product->getFormattedPrice(); if ($product->isAvailable()) { echo "Tersedia"; } } } catch (OkeConnectException $e) { echo "Error: " . $e->getUserMessage(); }
Cari Produk Berdasarkan Kode
$produk = $oke->findProductByCode('SMDC150'); if ($produk) { echo $produk->description; echo $produk->getFormattedPrice(); }
Cari Produk Berdasarkan Kategori
$products = $oke->findProductByCategory('SMARTFREN'); foreach ($products as $product) { echo $product->code . ": " . $product->description; }
Cari Produk Berdasarkan Keterangan
$products = $oke->findProductByKeterangan('30GB'); foreach ($products as $product) { echo $product->code . ": " . $product->description; }
Cari Produk Berdasarkan Status
$available = $oke->findProductByStatus('1'); $unavailable = $oke->findProductByStatus('0');
Ambil Harga Produk
$harga = $oke->getPrice('SMDC150');
Helper Functions
$response = oke_transaction('T1', '089660522887', 'REF123'); $response = oke_topup('BBSDN', '085736044280', 50000, 'REF123'); $status = oke_check_status('T5', '08980204060', 'REF123'); $callback = oke_webhook($_GET); $products = oke_products(); $product = oke_product('SMDC150'); $price = oke_price('SMDC150'); $product = oke_find_product_by_code('SMDC150'); $products = oke_find_product_by_category('SMARTFREN'); $products = oke_find_product_by_keterangan('30GB'); $products = oke_find_product_by_status('1');
Webhook Handler
<?php require_once 'vendor/autoload.php'; use OkeConnect\OkeConnect; use OkeConnect\OkeConnectException; header('Content-Type: application/json'); if (empty($_GET['message'])) { http_response_code(400); echo json_encode(['error' => 'Missing message parameter']); exit; } try { $oke = new OkeConnect('OK00123', '123456', 'secret'); $callback = $oke->parseWebhook($_GET); if ($callback->isSuccessful()) { echo json_encode([ 'success' => true, 'ref_id' => $callback->refId, 'transaction_id' => $callback->transactionId, 'serial_number' => $callback->serialNumber, ]); } if ($callback->isFailed()) { echo json_encode([ 'success' => false, 'ref_id' => $callback->refId, 'failure_reason' => $callback->failureReason, ]); } } catch (OkeConnectException $e) { http_response_code(400); echo json_encode([ 'success' => false, 'error' => $e->getUserMessage(), ]); }
Exception Handling
OkeConnectException Codes
| Code | Constant | Keterangan |
|---|---|---|
| 1001 | MISSING_CREDENTIALS | Kredensial tidak lengkap |
| 1002 | INVALID_PARAMETER | Parameter tidak valid |
| 1003 | REQUEST_FAILED | Gagal connect ke server |
| 1004 | PARSE_ERROR | Gagal parse response |
| 1005 | TRANSACTION_FAILED | Transaksi gagal |
| 1006 | INSUFFICIENT_BALANCE | Saldo tidak cukup |
| 1007 | PRODUCT_NOT_FOUND | Produk tidak ditemukan |
Cara Menggunakan Exception
try { $response = $oke->transaction('T1', '089660522887', 'REF123'); } catch (OkeConnectException $e) { echo $e->getCode(); echo $e->getUserMessage(); echo $e->getMessage(); print_r($e->getContext()); if ($e->isCredentialError()) { echo "Periksa kredensial Anda"; } if ($e->isTransactionError()) { echo "Transaksi gagal"; } }
Validation
Ref ID Validation
- Tidak boleh kosong
- Maksimal 50 karakter
Phone Number Validation
- Tidak boleh kosong
- Harus 10-15 digit angka
Qty Validation (Open Denom)
- Minimal 10.000
- Maksimal 10.000.000
Response Models
TransactionResponse
| Property | Tipe | Keterangan |
|---|---|---|
| transactionId | string | null |
| refId | string | null |
| provider | string | null |
| nominal | string | null |
| productCode | string | null |
| destination | string | null |
| status | string | null |
| price | float | null |
| time | string | null |
| serialNumber | string | null |
| failureReason | string | null |
Methods:
isProcessing()- Cek apakah sedang diprosesisSuccessful()- Cek apakah berhasilisFailed()- Cek apakah gagalgetStatusText()- Dapatkan teks statustoArray()- Convert ke arraytoJson()- Convert ke JSON
StatusCheckResponse
| Property | Tipe | Keterangan |
|---|---|---|
| refId | string | null |
| provider | string | null |
| nominal | string | null |
| productCode | string | null |
| destination | string | null |
| transactionTime | string | null |
| status | string | null |
| serialNumber | string | null |
| price | float | null |
| failureReason | string | null |
| transactionId | string | null |
Methods:
isSuccessful()- Cek apakah suksesisFailed()- Cek apakah gagalisPending()- Cek apakah pendingisNoData()- Cek apakah tidak ada datagetStatusText()- Dapatkan teks statustoArray()- Convert ke arraytoJson()- Convert ke JSON
WebhookCallback
| Property | Tipe | Keterangan |
|---|---|---|
| transactionId | string | null |
| refId | string | null |
| provider | string | null |
| nominal | string | null |
| productCode | string | null |
| destination | string | null |
| status | string | null |
| serialNumber | string | null |
| price | float | null |
| date | string | null |
| time | string | null |
| failureReason | string | null |
Methods:
isSuccessful()- Cek apakah suksesisFailed()- Cek apakah gagalgetStatusText()- Dapatkan teks statusgetFullDateTime()- Dapatkan tanggal + waktutoArray()- Convert ke arraytoJson()- Convert ke JSON
PriceListItem
| Property | Tipe | Keterangan |
|---|---|---|
| code | string | Kode Produk |
| description | string | Deskripsi |
| product | string | Nama Produk |
| category | string | Kategori |
| price | float | Harga |
| status | string | Status (1=tersedia) |
Methods:
isAvailable()- Cek ketersediaangetFormattedPrice()- Format harga RupiahgetCategoryShort()- Nama kategori pendektoArray()- Convert ke arraytoJson()- Convert ke JSON
Testing
composer install vendor/bin/phpunit
Changelog
Lihat CHANGELOG.md untuk riwayat perubahan lengkap.
License
MIT License
Developer
NdraDeveloper
- GitHub: https://github.com/NdraDev
- Package: https://github.com/NdraDev/okeconnect-php-client
- Packagist: https://packagist.org/packages/ndradev/okeconnect-php-client
Support
Jika ada pertanyaan atau masalah, silakan buat issue di: https://github.com/NdraDev/okeconnect-php-client/issues