ptpn/ion-client

Official PHP/Laravel client SDK for ION SSO API v2

Maintainers

Package info

github.com/yusren/ion-client

Homepage

Issues

pkg:composer/ptpn/ion-client

Statistics

Installs: 0

Dependents: 0

Suggesters: 0

Stars: 0

dev-main 2026-06-17 11:56 UTC

This package is auto-updated.

Last update: 2026-06-17 11:59:51 UTC


README

Official PHP/Laravel client SDK untuk mengonsumsi API ION SSO v2.

Latest Version on Packagist License

Fitur

  • Dukungan Laravel 8, 9, 10, 11, dan 12.
  • PHP 7.3+ dan PHP 8.x.
  • Menggunakan GuzzleHTTP sebagai HTTP client.
  • Laravel package auto-discovery.
  • Facade IonClient siap pakai.
  • Config publishable.
  • Custom exception IonClientException.

Instalasi

Install package melalui Composer:

composer require ptpn/ion-client

Konfigurasi

Publish file konfigurasi ke project Laravel:

php artisan vendor:publish --tag=ion-client-config

Setelah dipublish, file config/ion-client.php akan tersedia. Tambahkan environment variables berikut di .env:

ION_BASE_URL=https://ion.palmco.id/api/v2
ION_CLIENT_ID=your-client-id
ION_CLIENT_SECRET=your-client-secret
ION_TIMEOUT=30
ION_VERIFY_SSL=true

Penggunaan

Menggunakan Facade

use IonClient;

// Login user
$response = IonClient::login('johndoe', 'secret123');
$sessionId = $response['session_id'];

// Cek session
$session = IonClient::checkSession($sessionId);

// Verifikasi auth code
$user = IonClient::verify('AUTH_CODE_HERE');

// Ambil data session lengkap
$fullInfo = IonClient::getSessionFullInfo($sessionId);

// Ambil role user untuk aplikasi tertentu
$roles = IonClient::getUserRoles($sessionId, 'hris');

// Heartbeat agar session tetap aktif
IonClient::heartbeat($sessionId);

// Logout user
IonClient::logout($sessionId);

Menggunakan Dependency Injection

use Ptpn\IonClient\IonClient;

class AuthController extends Controller
{
    protected $ion;

    public function __construct(IonClient $ion)
    {
        $this->ion = $ion;
    }

    public function login(Request $request)
    {
        try {
            $data = $this->ion->login(
                $request->input('username'),
                $request->input('password')
            );

            return response()->json($data);
        } catch (\Ptpn\IonClient\Exceptions\IonClientException $e) {
            return response()->json(['error' => $e->getMessage()], 401);
        }
    }
}

Daftar Method

Method Endpoint Deskripsi
login($username, $password) POST /auth/login Login dengan username dan password.
checkSession($sessionId) GET /auth/check-session Cek apakah session SSO masih aktif.
verify($code) POST /auth/verify Tukar auth code menjadi session ID + data user.
getSessionFullInfo($sessionId) POST /client/session/full-info Ambil data session lengkap.
getUserRoles($sessionId, $application) POST /client/user/roles Ambil daftar role user untuk app tertentu.
heartbeat($sessionId) POST /client/heartbeat Pertahankan session tetap aktif.
logout($sessionId) POST /client/logout Logout user session.

Setiap request akan otomatis menyertakan header wajib:

  • X-Client-ID
  • X-Client-Secret
  • X-Timestamp

Penanganan Error

Semua error HTTP maupun error dari response ION akan dilempar sebagai Ptpn\IonClient\Exceptions\IonClientException. Pesan error akan diambil dari field message atau error pada response JSON ION jika tersedia.

use Ptpn\IonClient\Exceptions\IonClientException;

try {
    $user = IonClient::login('johndoe', 'wrong-password');
} catch (IonClientException $e) {
    // $e->getMessage() berisi pesan error dari ION
    logger()->error($e->getMessage());
}

Testing

Jalankan PHPUnit setelah menginstall dependency:

composer install
vendor/bin/phpunit

Publish ke Packagist

  1. Buat repository baru di GitHub: https://github.com/ptpn/ion-client.
  2. Push kode package ke repository tersebut.
  3. Login ke Packagist.
  4. Klik Submit dan masukkan URL repository GitHub.
  5. Packagist akan membaca composer.json dan membuat package ptpn/ion-client.
  6. (Opsional) Aktifkan webhook GitHub ke Packagist agar setiap tag/release otomatis diupdate.

License

Package ini dirilis di bawah lisensi MIT.