PHPackages                             manh21/rajaongkir-laravel - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [API Development](/categories/api)
4. /
5. manh21/rajaongkir-laravel

ActiveLibrary[API Development](/categories/api)

manh21/rajaongkir-laravel
=========================

RajaOngkir Komerce Laravel Package adalah package PHP yang menyediakan integrasi mudah dan lengkap dengan API RajaOngkir V2 by Komerce. Package ini dirancang khusus untuk aplikasi Laravel dengan fitur-fitur modern seperti caching, validasi, dan dukungan multi-bahasa.

1.0.6(7mo ago)145[5 PRs](https://github.com/manh21/rajaongkir-laravel/pulls)MITPHPPHP ^8.3|^8.4CI passing

Since Oct 4Pushed 1mo agoCompare

[ Source](https://github.com/manh21/rajaongkir-laravel)[ Packagist](https://packagist.org/packages/manh21/rajaongkir-laravel)[ Docs](https://github.com/manh21/rajaongkir-laravel)[ GitHub Sponsors]()[ RSS](/packages/manh21-rajaongkir-laravel/feed)WikiDiscussions main Synced 1mo ago

READMEChangelog (7)Dependencies (12)Versions (14)Used By (0)

RajaOngkir Komerce Laravel
==========================

[](#rajaongkir-komerce-laravel)

[![Latest Version on Packagist](https://camo.githubusercontent.com/7f4c3f9aee36e2fd0e71e5645b5219a95871d0aad4f52bf41bb2a2c1450a5527/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f6d616e6832312f72616a616f6e676b69722d6c61726176656c2e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/manh21/rajaongkir-laravel)[![GitHub Tests Action Status](https://camo.githubusercontent.com/da6b097235939cd7f5848e1bcfb1d4646a863a3fa3ec47dab689af682ffee6b5/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f616374696f6e732f776f726b666c6f772f7374617475732f6d616e6832312f72616a616f6e676b69722d6c61726176656c2f72756e2d74657374732e796d6c3f6272616e63683d6d61696e266c6162656c3d7465737473267374796c653d666c61742d737175617265)](https://github.com/manh21/rajaongkir-laravel/actions?query=workflow%3Arun-tests+branch%3Amain)[![GitHub Code Style Action Status](https://camo.githubusercontent.com/ded7e581b152698cf1f3d1522ea61b8584008b1641d62af7a233a3ac99954479/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f616374696f6e732f776f726b666c6f772f7374617475732f6d616e6832312f72616a616f6e676b69722d6c61726176656c2f6669782d7068702d636f64652d7374796c652d6973737565732e796d6c3f6272616e63683d6d61696e266c6162656c3d636f64652532307374796c65267374796c653d666c61742d737175617265)](https://github.com/manh21/rajaongkir-laravel/actions?query=workflow%3A%22Fix+PHP+code+style+issues%22+branch%3Amain)[![Total Downloads](https://camo.githubusercontent.com/00b8128a03e7a969acc7075cfe04daf0e473c6993f7dd17efe089e237830246a/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f6d616e6832312f72616a616f6e676b69722d6c61726176656c2e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/manh21/rajaongkir-laravel)

**RajaOngkir Komerce Laravel** adalah package PHP yang menyediakan integrasi mudah dan lengkap dengan API RajaOngkir V2 by Komerce. Package ini dirancang khusus untuk aplikasi Laravel dengan fitur-fitur modern seperti caching, validasi, dan dukungan multi-bahasa.

✨ Fitur Utama
-------------

[](#-fitur-utama)

- 🚀 **Perhitungan Ongkos Kirim**: Mendukung perhitungan ongkir domestik dengan multiple kurir
- 📍 **Data Lokasi Lengkap**: Akses data provinsi, kota, kecamatan, dan kelurahan
- 🏷️ **Validasi Terintegrasi**: Form Request validation dengan CourierRule yang robust
- 💾 **Caching Pintar**: Sistem cache dengan tags untuk performa optimal
- 🌐 **Multi-bahasa**: Dukungan bahasa Indonesia dan Inggris
- 🛡️ **Exception Handling**: Penanganan error yang komprehensif
- 📦 **Laravel Ready**: Dibuat khusus untuk ekosistem Laravel

📋 Kurir yang Didukung
---------------------

[](#-kurir-yang-didukung)

Mendukung 13+ kurir populer di Indonesia:

- JNE (Jalur Nugraha Ekakurir)
- TIKI (Citra Van Titipan Kilat)
- POS Indonesia
- SiCepat Express
- J&amp;T Express
- Ninja Xpress
- ID Express
- SAP Express
- Wahana Express
- Lion Parcel
- Royal Express Indonesia (REX)
- Sentral Cargo
- Dan lainnya...

Installation
------------

[](#installation)

You can install the package via composer:

```
composer require manh21/rajaongkir-laravel
```

You can publish the config file with:

```
php artisan vendor:publish --tag="rajaongkir-laravel-config"
```

This is the contents of the published config file:

```
return [
    'api_key' => env('RAJAONGKIR_API_KEY'),
    'base_url' => env('RAJAONGKIR_BASE_URL', 'https://rajaongkir.komerce.id/api/v1'),
    'cost_cache_duration' => env('RAJAONGKIR_COST_CACHE_DURATION', 60), // in minutes
    'location_cache_duration' => env('RAJAONGKIR_LOCATION_CACHE_DURATION', 1440), // in minutes (1 day
];
```

🚀 Usage
-------

[](#-usage)

### Basic Usage

[](#basic-usage)

```
use Komodo\RajaOngkir\Rajaongkir;
use Komodo\RajaOngkir\Constants\Courier;

$rajaongkir = new Rajaongkir();
```

### Mendapatkan Data Lokasi

[](#mendapatkan-data-lokasi)

```
// Ambil semua provinsi
$provinces = $rajaongkir->getProvinces();

// Ambil kota berdasarkan provinsi
$cities = $rajaongkir->getCities(11); // DKI Jakarta

// Ambil kecamatan berdasarkan kota
$districts = $rajaongkir->getDistricts(152); // Jakarta Pusat

// Ambil kelurahan berdasarkan kecamatan
$subdistricts = $rajaongkir->getSubdistricts(1234);
```

### Perhitungan Ongkos Kirim

[](#perhitungan-ongkos-kirim)

#### Menggunakan Individual Parameters

[](#menggunakan-individual-parameters)

```
// Menggunakan Courier Enum (Recommended)
$cost = $rajaongkir->calculateDistrictCost(
    originId: 152,           // ID Kecamatan asal
    destinationId: 153,      // ID Kecamatan tujuan
    weight: 1000,           // Berat dalam gram (1kg)
    courier: [              // Array kurir enum
        Courier::JNE,
        Courier::TIKI,
        Courier::SICEPAT
    ],
    sortBy: 'lowest'        // Urutkan berdasarkan harga terendah
);

// Atau menggunakan string values
$cost = $rajaongkir->calculateDistrictCost(
    originId: 152,
    destinationId: 153,
    weight: 1000,
    courier: ['jne', 'tiki', 'sicepat'], // Array string
    sortBy: 'lowest'
);

// Mix enum dan string juga didukung
$cost = $rajaongkir->calculateDistrictCost(
    originId: 152,
    destinationId: 153,
    weight: 1000,
    courier: [
        Courier::JNE,      // Enum
        'tiki',            // String
        Courier::SICEPAT   // Enum
    ],
    sortBy: 'lowest'
);
```

### Menggunakan Courier Enum &amp; Validasi

[](#menggunakan-courier-enum--validasi)

```
use Komodo\RajaOngkir\Constants\Courier;
use Komodo\RajaOngkir\Rules\CourierRule;

// Menggunakan enum untuk type safety
$courierCode = Courier::JNE->value; // 'jne'

// Cek kemampuan kurir
if (CourierRule::supportsInternationalCost('jne')) {
    // JNE mendukung ongkir internasional
}

if (CourierRule::supportsAwb('sicepat')) {
    // SiCepat mendukung pelacakan resi
}

// Validasi array kurir (mixed enum & string)
$couriers = [Courier::JNE, 'tiki', Courier::SICEPAT];

if (CourierRule::validateCouriers($couriers)) {
    // Semua kurir valid
    $courierValues = CourierRule::convertCouriersToValues($couriers);
    // Result: ['jne', 'tiki', 'sicepat']
}

// Cek kurir yang tidak valid
$invalidCouriers = CourierRule::getInvalidCouriers(['jne', 'invalid', 'tiki']);
// Result: ['invalid']
```

### Pelacakan Resi (AWB Tracking)

[](#pelacakan-resi-awb-tracking)

```
// Menggunakan Courier enum
$tracking = $rajaongkir->trackAWB(
    waybill: 'JNE123456789',
    courier: Courier::JNE
);

// Menggunakan string
$tracking = $rajaongkir->trackAWB(
    waybill: 'TIKI987654321',
    courier: 'tiki'
);

// Dengan nomor telepon (untuk kurir tertentu)
$tracking = $rajaongkir->trackAWB(
    waybill: 'SICEPAT123456',
    courier: Courier::SICEPAT,
    last_phone_number: '12345' // 5 digit terakhir nomor penerima
);
```

### Pencarian Destinasi

[](#pencarian-destinasi)

```
// Pencarian destinasi domestik
$destinations = $rajaongkir->searchDomesticDestinations(
    search: 'Jakarta',
    limit: 10,
    offset: 0
);

// Pencarian destinasi internasional
$intlDestinations = $rajaongkir->searchInternationalDestinations(
    search: 'Singapore',
    limit: 10,
    offset: 0
);
```

### Cache Management

[](#cache-management)

```
// Set custom cache duration
$rajaongkir->setLocationCacheDuration(7200)  // 2 jam untuk data lokasi
          ->setCostCacheDuration(1800);      // 30 menit untuk ongkir

// Clear cache
$rajaongkir->clearLocationCache();           // Hapus cache lokasi
$rajaongkir->clearCostCache();              // Hapus cache ongkir
$rajaongkir->clearCache();                  // Hapus semua cache
```

### Exception Handling

[](#exception-handling)

```
use Komodo\RajaOngkir\Exceptions\ApiException;
use Illuminate\Validation\ValidationException;

try {
    $cost = $rajaongkir->calculateDistrictCost(
        originId: 152,
        destinationId: 152, // Error: sama dengan origin
        weight: 50000,      // Error: melebihi batas
        courier: ['invalid'] // Error: kurir tidak valid
    );
} catch (ValidationException $e) {
    // Handle validation errors
    $errors = $e->validator->errors();

} catch (ApiException $e) {
    // Handle API errors
    $message = $e->getMessage();
    $statusCode = $e->getStatusCode();
    $response = $e->getResponse();
}
```

Testing
-------

[](#testing)

```
composer test
```

Changelog
---------

[](#changelog)

Please see [CHANGELOG](CHANGELOG.md) for more information on what has changed recently.

🧪 Testing
---------

[](#-testing)

The package includes comprehensive tests covering all major functionality:

### Running Tests

[](#running-tests)

```
composer test
```

### Test Coverage

[](#test-coverage)

- **BasicFunctionalityTest** - Core components and validation ✅
- **CourierEnumTest** - Courier enum validation ✅
- **CourierRuleTest** - Laravel validation rules ✅
- **CostCalculationTest** - API cost calculations with mocking ✅
- **IntegrationTest** - Complete workflow testing ✅
- **ServiceProviderTest** - Laravel service provider integration ✅

### Test Structure

[](#test-structure)

```
// Example test usage
use Komodo\RajaOngkir\Constants\Courier;
use Komodo\RajaOngkir\Rules\CourierRule;

// Test courier validation
$validator = validator(['courier' => Courier::JNE], [
    'courier' => new CourierRule()
]);
expect($validator->passes())->toBeTrue();

// Test courier conversion
$converted = CourierRule::convertCouriersToValues([Courier::JNE, 'tiki']);
expect($converted)->toBe(['jne', 'tiki']);
```

### Cache Driver Testing

[](#cache-driver-testing)

The package automatically detects and adapts to your cache driver:

- **Redis/Memcached**: Full tagging support for granular cache management
- **File/Database/Array**: Basic caching with fallback mechanisms

Contributing
------------

[](#contributing)

Please see [CONTRIBUTING](CONTRIBUTING.md) for details.

Security Vulnerabilities
------------------------

[](#security-vulnerabilities)

Please review [our security policy](../../security/policy) on how to report security vulnerabilities.

Credits
-------

[](#credits)

- [Naufal Hakim](https://github.com/manh21)
- [All Contributors](../../contributors)

License
-------

[](#license)

The MIT License (MIT). Please see [License File](LICENSE.md) for more information.

###  Health Score

42

—

FairBetter than 90% of packages

Maintenance78

Regular maintenance activity

Popularity12

Limited adoption so far

Community9

Small or concentrated contributor base

Maturity60

Established project with proven stability

 Bus Factor1

Top contributor holds 95.1% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~0 days

Total

7

Last Release

219d ago

PHP version history (2 changes)v1.0.0PHP ^8.4

1.0.5PHP ^8.3|^8.4

### Community

Maintainers

![](https://www.gravatar.com/avatar/c70df80019e8205e7653e9c59dc900ac25f40edf83ecb3361b8f99a07bb8790c?d=identicon)[manh21](/maintainers/manh21)

---

Top Contributors

[![manh21](https://avatars.githubusercontent.com/u/31276236?v=4)](https://github.com/manh21 "manh21 (39 commits)")[![dependabot[bot]](https://avatars.githubusercontent.com/in/29110?v=4)](https://github.com/dependabot[bot] "dependabot[bot] (1 commits)")[![github-actions[bot]](https://avatars.githubusercontent.com/in/15368?v=4)](https://github.com/github-actions[bot] "github-actions[bot] (1 commits)")

---

Tags

laravellaravel-packagerajaongkirrajaongkir-v2laravelshippingindonesialogisticsrajaongkirrajaongkir-laravelnaufal-hakim

###  Code Quality

TestsPest

Static AnalysisPHPStan

Code StyleLaravel Pint

### Embed Badge

![Health badge](/badges/manh21-rajaongkir-laravel/health.svg)

```
[![Health](https://phpackages.com/badges/manh21-rajaongkir-laravel/health.svg)](https://phpackages.com/packages/manh21-rajaongkir-laravel)
```

###  Alternatives

[scalar/laravel

Render your OpenAPI-based API reference

6183.9k2](/packages/scalar-laravel)[ryangjchandler/bearer

Minimalistic token-based authentication for Laravel API endpoints.

8129.8k](/packages/ryangjchandler-bearer)[combindma/laravel-facebook-pixel

Meta pixel integration for Laravel

4956.9k](/packages/combindma-laravel-facebook-pixel)[stechstudio/laravel-hubspot

A Laravel SDK for the HubSpot CRM Api

2971.0k](/packages/stechstudio-laravel-hubspot)[njoguamos/laravel-plausible

A laravel package for interacting with plausible analytics api.

208.8k](/packages/njoguamos-laravel-plausible)[likeabas/filament-chatgpt-agent

Integrate with OpenAI ChatGPT

235.3k](/packages/likeabas-filament-chatgpt-agent)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
