License API

Dokumentasi ini ditujukan untuk developer atau pengguna yang sudah memahami proses pengembangan WordPress secara teknis.

Kami menyediakan dokumentasi dan contoh kode dasar untuk membantu proses integrasi API lisensi eiMember. Namun, kami tidak menyediakan layanan debugging atau pembuatan sistem custom secara gratis.

Jika Anda membutuhkan bantuan pengembangan lebih lanjut atau penyesuaian sistem tertentu, silakan hubungi layanan custom development yang tersedia.

Base URL

Seluruh endpoint menggunakan prefix berikut:

https://YOUR-STORE-DOMAIN.com/wp-json/eimember/v1

Ganti YOUR-STORE-DOMAIN.com dengan domain website WordPress yang menggunakan plugin eiMember.

Parameter

Parameter Type Required Description
id string Yes Lisensi ID produk/file yang dibuat oleh owner
key string Yes Purchase code milik buyer
host string Yes Domain website yang mengaktifkan lisensi

Check / Activate License

Digunakan untuk memvalidasi lisensi sekaligus mendaftarkan domain website sebagai aktivasi lisensi aktif.

Endpoint: GET /wp-json/eimember/v1/file/license/{id}

Query parameters: key, host

Contoh PHP (Menggunakan wp_remote_get)

function my_plugin_check_license( $license_id, $purchase_key, $site_host = null ) {
    $store_url = 'https://YOUR-STORE-DOMAIN.com';

    if ( empty( $site_host ) ) {
        $site_host = parse_url( home_url(), PHP_URL_HOST );
    }

    $url = add_query_arg(
        array(
            'key'  => $purchase_key,
            'host' => $site_host,
        ),
        trailingslashit( $store_url ) . 'wp-json/eimember/v1/file/license/' . rawurlencode( $license_id )
    );

    $response = wp_remote_get( $url, array(
        'timeout' => 15,
    ) );

    if ( is_wp_error( $response ) ) {
        return array(
            'code'    => 'request_failed',
            'message' => $response->get_error_message(),
        );
    }

    $body = wp_remote_retrieve_body( $response );
    $data = json_decode( $body, true );

    return $data;
}

Cara Penggunaan

$result = my_plugin_check_license( 'YOUR-LICENSE-ID', 'XXXX-XXXX-XXXX-XXXX' );

if ( $result['code'] === 'active' ) {
    update_option( 'my_plugin_license_data', $result['data'] );
    echo 'License active. Usage: ' . $result['data']['usage'] . '/' . $result['data']['limit'];
} else {
    echo 'License error: ' . $result['message'];
}

Response Code

Code Description
active Lisensi valid dan host berhasil didaftarkan
invalid Purchase code salah atau tidak sesuai dengan lisensi ID
inactive Lisensi dinonaktifkan secara manual oleh owner
expired Masa aktif lisensi telah berakhir
exceeded Jumlah aktivasi lisensi telah mencapai batas maksimum
not_found Produk dengan lisensi ID tersebut tidak ditemukan

Contoh Response Berhasil

{
    "code": "active",
    "message": "License granted for host \"yoursite.com\"",
    "data": {
        "key": "XXXX-XXXX-XXXX-XXXX",
        "host": "yoursite.com",
        "usage": 1,
        "limit": 3,
        "expired_at": 1767225600
    }
}

Note: expired_at menggunakan format Unix timestamp. Nilainya akan null jika lisensi tidak memiliki masa aktif. Parameter limit akan bernilai 0 jika tidak ada batas aktivasi lisensi.

Contoh Response Error

{
    "code": "expired",
    "message": "This purchase code has been expired, please renew or use another active purchase code",
    "data": {
        "key": "XXXX-XXXX-XXXX-XXXX",
        "host": "yoursite.com"
    }
}
{
    "code": "exceeded",
    "message": "This purchase code has reached the usage limit of 3",
    "data": {
        "key": "XXXX-XXXX-XXXX-XXXX",
        "host": "yoursite.com",
        "usage": 3,
        "limit": 3
    }
}

Remove / Deactivate License

Digunakan untuk menghapus host/domain dari daftar aktivasi lisensi aktif sehingga slot aktivasi dapat digunakan kembali.

Endpoint: DELETE /wp-json/eimember/v1/file/license/{id}

Query parameters: key, host

Note: Method DELETE menggunakan wp_remote_request karena wp_remote_get dan wp_remote_post tidak mendukung method DELETE.

Contoh PHP (Menggunakan wp_remote_request)

function my_plugin_remove_license( $license_id, $purchase_key, $site_host = null ) {
    $store_url = 'https://YOUR-STORE-DOMAIN.com';

    if ( empty( $site_host ) ) {
        $site_host = parse_url( home_url(), PHP_URL_HOST );
    }

    $url = add_query_arg(
        array(
            'key'  => $purchase_key,
            'host' => $site_host,
        ),
        trailingslashit( $store_url ) . 'wp-json/eimember/v1/file/license/' . rawurlencode( $license_id )
    );

    $response = wp_remote_request( $url, array(
        'method'  => 'DELETE',
        'timeout' => 15,
    ) );

    if ( is_wp_error( $response ) ) {
        return array(
            'code'    => 'request_failed',
            'message' => $response->get_error_message(),
        );
    }

    $body = wp_remote_retrieve_body( $response );
    $data = json_decode( $body, true );

    return $data;
}

Cara Penggunaan

$result = my_plugin_remove_license( 'YOUR-LICENSE-ID', 'XXXX-XXXX-XXXX-XXXX' );

if ( $result['code'] === 'removed' ) {
    echo 'License deactivated successfully.';
    delete_option( 'my_plugin_license_key' );

} else {
    echo 'Error: ' . $result['message'];
}

Response Code

Code Description
removed Host berhasil dihapus dari aktivasi lisensi
invalid Purchase code tidak sesuai dengan lisensi ID
not_found Produk dengan lisensi ID tersebut tidak ditemukan

Contoh Response Berhasil

{
    "code": "removed",
    "message": "License removed"
}

Contoh Integrasi Lengkap

class My_Plugin_License {

    const STORE_URL     = 'https://YOUR-STORE-DOMAIN.com';
    const LICENSE_ID    = 'YOUR-LICENSE-ID';
    const OPTION_KEY    = 'my_plugin_license_key';
    const OPTION_STATUS = 'my_plugin_license_status';

    /**
     * Activate the license and save the result.
     */
    public static function activate( $purchase_key ) {
        $host = parse_url( home_url(), PHP_URL_HOST );

        $url = add_query_arg(
            array(
                'key'  => $purchase_key,
                'host' => $host,
            ),
            trailingslashit( self::STORE_URL ) . 'wp-json/eimember/v1/file/license/' . self::LICENSE_ID
        );

        $response = wp_remote_get( $url, array( 'timeout' => 15 ) );

        if ( is_wp_error( $response ) ) {
            return false;
        }

        $data = json_decode( wp_remote_retrieve_body( $response ), true );

        if ( isset( $data['code'] ) && $data['code'] === 'active' ) {
            update_option( self::OPTION_KEY, $purchase_key );
            update_option( self::OPTION_STATUS, 'active' );
            return true;
        }

        update_option( self::OPTION_STATUS, $data['code'] ?? 'invalid' );
        return false;
    }

    /**
     * Deactivate the license and clear saved data.
     */
    public static function deactivate() {
        $purchase_key = get_option( self::OPTION_KEY );
        $host         = parse_url( home_url(), PHP_URL_HOST );

        if ( empty( $purchase_key ) ) {
            return false;
        }

        $url = add_query_arg(
            array(
                'key'  => $purchase_key,
                'host' => $host,
            ),
            trailingslashit( self::STORE_URL ) . 'wp-json/eimember/v1/file/license/' . self::LICENSE_ID
        );

        wp_remote_request( $url, array(
            'method'  => 'DELETE',
            'timeout' => 15,
        ) );

        delete_option( self::OPTION_KEY );
        delete_option( self::OPTION_STATUS );

        return true;
    }

    /**
     * Check if the license is currently active.
     */
    public static function is_active() {
        return get_option( self::OPTION_STATUS ) === 'active';
    }
}

Notes

  • Parameter host akan dibersihkan secara otomatis oleh server. Prefix seperti http://, https://, dan www. akan dihapus sebelum disimpan.
  • Parameter key (purchase code) bersifat case-insensitive dan otomatis diubah menjadi lowercase.
  • Memanggil endpoint check/activate pada host yang sudah terdaftar tidak akan membuat data duplikat, melainkan akan memperbarui data yang sudah ada.
  • Untuk memindahkan lisensi ke website baru: panggil endpoint remove dari website lama terlebih dahulu, kemudian panggil endpoint check dari website baru.