Tutorial Lengkap Integrasi API JagoanItem untuk Website Topup

Tutorial Lengkap Integrasi API JagoanItem untuk Website Topup

Tutorial Lengkap Integrasi API JagoanItem

Tutorial ini dibuat untuk pemilik website topup game, aplikasi kasir, bot Telegram, atau sistem H2H yang ingin menyambungkan produk JagoanItem ke sistem sendiri. Hasil akhirnya: website kamu bisa menarik daftar layanan, membuat pesanan, dan memantau status transaksi secara otomatis melalui API JagoanItem.

1. Persiapan Awal

Sebelum mulai koding, siapkan beberapa hal berikut:

  • Akun JagoanItem dengan role minimal Basic, atau role Gold/Platinum jika ingin harga khusus.
  • API ID dan API KEY dari halaman akun/reseller.
  • Saldo yang cukup untuk melakukan transaksi.
  • IP server kamu sebaiknya dimasukkan ke IP Whitelist agar keamanan lebih baik.
  • Domain website kamu, contoh: https://domainanda.com.

2. Dasar Autentikasi API

Semua endpoint API JagoanItem menggunakan method POST. Setiap request wajib mengirim parameter:

  • api_id: ID akun API kamu.
  • api_key: KEY akun API kamu.
  • signature: hash dari md5(api_id + api_key).

Rumus signature:

signature = md5(api_id + api_key)

Contoh:

API_ID  = abc123
API_KEY = secret123
SIGNATURE = md5("abc123secret123")

Contoh PHP untuk membuat signature:

<?php
$apiId  = 'API_ID_KAMU';
$apiKey = 'API_KEY_KAMU';
$signature = md5($apiId . $apiKey);

echo $signature;

Penting: jangan hardcode API KEY di JavaScript frontend. Simpan API KEY di backend/server kamu.

3. Daftar Endpoint API JagoanItem

Base URL yang digunakan pada tutorial ini:

https://jagoanitem.com/api

A. Profile

Endpoint:

POST https://jagoanitem.com/api/profile

Fungsi: mengecek apakah API ID/API KEY valid, melihat saldo, dan role akun.

B. Service

Endpoint:

POST https://jagoanitem.com/api/service

Fungsi: menarik daftar layanan non-SMM seperti topup game, voucher, dan produk digital lain.

C. Service SMM

Endpoint:

POST https://jagoanitem.com/api/service/smm

Fungsi: menarik daftar layanan sosial media seperti followers, likes, views, subscribers, dan layanan SMM lain.

Response service SMM sekarang sudah mengandung metadata layanan seperti:

  • min: jumlah minimal order.
  • max: jumlah maksimal order.
  • catatan: deskripsi layanan dari provider.
  • average: estimasi proses.
  • refill: status ketersediaan garansi/refill.

D. Order

Endpoint:

POST https://jagoanitem.com/api/order

Fungsi: membuat transaksi ke JagoanItem. Order akan memotong saldo sesuai role harga akun API kamu.

E. Status

Endpoint:

POST https://jagoanitem.com/api/status

Fungsi: mengecek status order. Kamu bisa memakai order_id sistem JagoanItem atau order_id milik sistem reseller.

F. Get Everything

Endpoint:

POST https://jagoanitem.com/api/get-everything

Fungsi: validasi nickname, region MLBB, dan ID pelanggan PLN secara real-time.

4. Contoh PHP cURL Lengkap

Simpan kode berikut sebagai JagoanItemApi.php atau sesuaikan dengan framework kamu.

<?php

class JagoanItemApi
{
    private $baseUrl = 'https://jagoanitem.com/api';
    private $apiId;
    private $apiKey;

    public function __construct($apiId, $apiKey)
    {
        $this->apiId  = $apiId;
        $this->apiKey = $apiKey;
    }

    private function signature()
    {
        return md5($this->apiId . $this->apiKey);
    }

    private function request($endpoint, $data = [])
    {
        $payload = array_merge($data, [
            'api_id'    => $this->apiId,
            'api_key'   => $this->apiKey,
            'signature' => $this->signature(),
        ]);

        $ch = curl_init($this->baseUrl . $endpoint);
        curl_setopt_array($ch, [
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_POST           => true,
            CURLOPT_POSTFIELDS     => http_build_query($payload),
            CURLOPT_HTTPHEADER     => [
                'Content-Type: application/x-www-form-urlencoded',
            ],
            CURLOPT_TIMEOUT        => 60,
        ]);

        $response = curl_exec($ch);

        if ($response === false) {
            $error = curl_error($ch);
            curl_close($ch);
            return [
                'result' => false,
                'msg'    => 'cURL error: ' . $error,
                'data'   => null,
            ];
        }

        curl_close($ch);
        return json_decode($response, true);
    }

    public function profile()
    {
        return $this->request('/profile');
    }

    public function service()
    {
        return $this->request('/service');
    }

    public function serviceSmm()
    {
        return $this->request('/service/smm');
    }

    public function order($orderIdReseller, $serviceId, $targetId, $targetServer = '')
    {
        return $this->request('/order', [
            'order_id'      => $orderIdReseller,
            'service_id'    => $serviceId,
            'target_id'     => $targetId,
            'target_server' => $targetServer,
        ]);
    }

    public function status($orderId)
    {
        return $this->request('/status', [
            'order_id' => $orderId,
        ]);
    }

    public function getEverything($type, $targetId, $server = '', $gameCode = '')
    {
        return $this->request('/get-everything', [
            'type'          => $type,
            'target_id'     => $targetId,
            'target_server' => $server,
            'game_code'     => $gameCode,
        ]);
    }
}

$api = new JagoanItemApi('API_ID_KAMU', 'API_KEY_KAMU');

// 1. Cek profile
$profile = $api->profile();
if (!empty($profile['result'])) {
    echo "Saldo: " . number_format($profile['data']['balance'], 0, ',', '.') . "
";
}

// 2. Ambil layanan game/digital
$services = $api->service();
foreach ($services['data'] as $item) {
    echo $item['kode_produk'] . " | " . $item['nama_layanan'] . " | Rp" . $item['harga']['basic'] . "
";
}

// 3. Ambil layanan SMM
$smmServices = $api->serviceSmm();
foreach ($smmServices['data'] as $item) {
    echo $item['kode_produk'] . " | " . $item['nama_layanan'] . " | Min " . ($item['min'] ?? '-') . " | Max " . ($item['max'] ?? '-') . "
";
}

5. Contoh Membuat Order

Contoh order dari sistem website kamu:

<?php
$orderId = 'WEB-' . date('YmdHis') . '-' . rand(1000, 9999);

$create = $api->order(
    $orderId,
    'FF5-S13',
    '123456789',
    '2201'
);

if (!empty($create['result'])) {
    $orderSystemId = $create['data']['order_id'];
    $resellerOrderId = $create['data']['reseller_order_id'];
    $status = $create['data']['status'];

    echo "Order dibuat: " . $orderSystemId . "
";
    echo "ID reseller: " . $resellerOrderId . "
";
} else {
    echo "Gagal: " . $create['msg'];
}

Setelah order berhasil, simpan 3 hal ini di database kamu:

  • order_id dari JagoanItem, contoh JIIapi....
  • reseller_order_id dari sistem website kamu.
  • trx_id jika ada, untuk pencocokan internal.

6. Contoh Cek Status Order

Rekomendasi: jalankan cronjob setiap 1-3 menit agar status order di website kamu otomatis update.

<?php
$status = $api->status($orderSystemId);

if (!empty($status['result'])) {
    $statusBaru = $status['data']['status'];
    $note = $status['data']['note'];

    echo "Status: " . $statusBaru . "
";
    echo "Catatan: " . $note . "
";

    if ($statusBaru === 'Sukses') {
        // tandai order sukses di database website kamu
    } elseif ($statusBaru === 'Gagal') {
        // tandai order gagal, kembalikan saldo, atau refund
    }
} else {
    echo "Gagal cek status: " . $status['msg'];
}

7. Contoh cURL Shell / Terminal

Cek profile:

API_ID="API_ID_KAMU"
API_KEY="API_KEY_KAMU"
SIGNATURE="$(printf '%s%s' "$API_ID" "$API_KEY" | md5sum | awk '{print $1}')"

curl -s -X POST https://jagoanitem.com/api/profile \
  -d "api_id=$API_ID" \
  -d "api_key=$API_KEY" \
  -d "signature=$SIGNATURE"

Ambil layanan:

curl -s -X POST https://jagoanitem.com/api/service \
  -d "api_id=$API_ID" \
  -d "api_key=$API_KEY" \
  -d "signature=$SIGNATURE"

Ambil layanan SMM:

curl -s -X POST https://jagoanitem.com/api/service/smm \
  -d "api_id=$API_ID" \
  -d "api_key=$API_KEY" \
  -d "signature=$SIGNATURE"

Buat order:

curl -s -X POST https://jagoanitem.com/api/order \
  -d "api_id=$API_ID" \
  -d "api_key=$API_KEY" \
  -d "signature=$SIGNATURE" \
  -d "order_id=WEB-001" \
  -d "service_id=FF5-S13" \
  -d "target_id=123456789" \
  -d "target_server=2201"

Cek status:

curl -s -X POST https://jagoanitem.com/api/status \
  -d "api_id=$API_ID" \
  -d "api_key=$API_KEY" \
  -d "signature=$SIGNATURE" \
  -d "order_id=WEB-001"

8. Validasi Target dengan Get Everything

Gunakan endpoint ini untuk validasi nickname game, region MLBB, atau ID pelanggan PLN sebelum order dibuat.

$check = $api->getEverything('region', '123456789', '2201');

if (!empty($check['result'])) {
    print_r($check['data']);
} else {
    echo "Gagal validasi: " . $check['msg'];
}

Pilihan type:

  • nickname: cek nickname game.
  • region: cek region/server MLBB.
  • pln: cek ID pelanggan PLN.

9. IP Whitelist

Jika kamu mengisi IP Whitelist di akun JagoanItem, maka semua endpoint API akan menolak IP di luar daftar whitelist. Ini sangat disarankan untuk keamanan.

Contoh isi whitelist:

203.0.113.10
203.0.113.11

Contoh respons jika IP ditolak:

{
  "result": false,
  "msg": "IP 203.0.113.99 tidak ada dalam whitelist"
}

10. Format Response Standar

Sebagian besar endpoint memakai format:

{
  "result": true,
  "msg": "pesan",
  "data": []
}

Contoh gagal:

{
  "result": false,
  "msg": "API ID atau API KEY tidak ditemukan"
}

Selalu cek result terlebih dahulu sebelum membaca data.

11. Kesalahan yang Sering Terjadi

1. Signature salah

Signature harus dibuat di server dengan rumus md5(api_id + api_key). Jangan pakai API KEY di frontend publik.

2. Endpoint dikirim pakai GET

Semua endpoint API wajib method POST.

3. order_id duplikat

System menyimpan reseller_order_id dari kamu. Jika order ID sudah dipakai, response menolak order agar tidak double order. Gunakan ID unik untuk setiap transaksi.

4. Saldo tidak cukup

Cek endpoint /api/profile berkala. Kamu bisa simpan saldo di cache database lokal untuk menampilkan ke user sebelum order.

5. Tidak menyimpan order_id sistem

Simpan data.order_id yang dikembalikan API JagoanItem, bukan hanya ID dari sistem kamu. Untuk cek status, ID sistem JagoanItem adalah ID yang paling aman digunakan.

12. Alur Sistem yang Disarankan

  1. User memilih produk di website kamu.
  2. Website kamu menampilkan harga dari API JagoanItem + margin.
  3. User memasukkan target ID/server.
  4. Opsional: validasi target dengan /api/get-everything.
  5. User membayar di website kamu.
  6. Setelah pembayaran berhasil, website kamu mengirim order ke /api/order.
  7. Simpan order_id sistem, reseller_order_id, status, dan catatan ke database.
  8. Jalankan cronjob /api/status untuk update status otomatis.
  9. Jika status Sukses, tandai order selesai.
  10. Jika status Gagal, refund user atau lanjut proses manual.

13. Checklist Integrasi

  • API ID dan API KEY sudah diisi di konfigurasi server.
  • IP server sudah di-whitelist.
  • Endpoint profile bisa mengembalikan saldo.
  • Endpoint service bisa menarik daftar produk.
  • Endpoint service/smm bisa menarik layanan sosial media.
  • Endpoint order berhasil saat saldo cukup.
  • Website menyimpan order_id dari JagoanItem.
  • Cronjob status berjalan rutin.
  • Website menampilkan pesan error yang jelas ke user.
  • API KEY tidak pernah terlihat di JavaScript/browser.

14. Kesimpulan

Integrasi API JagoanItem relatif simpel karena semua endpoint memakai format standar POST + form data. Kuncinya ada di 3 hal: signature yang benar, penyimpanan order ID yang rapi, dan cronjob status yang konsisten. Dengan begitu website kamu bisa menjadi sistem H2H yang lebih otomatis, cepat, dan aman.

Pelajari dokumentasi teknis lengkap di Dokumentasi API JagoanItem.