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.
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 | 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 |
•
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
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;
}
$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'];
}
| 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 |
{
"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_atmenggunakan format Unix timestamp. Nilainya akannulljika lisensi tidak memiliki masa aktif. Parameterlimitakan bernilai0jika tidak ada batas aktivasi lisensi.
{
"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
}
}
•
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
DELETEmenggunakanwp_remote_requestkarenawp_remote_getdanwp_remote_posttidak mendukung methodDELETE.
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;
}
$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'];
}
| 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 |
{
"code": "removed",
"message": "License removed"
}
•
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';
}
}
host akan dibersihkan secara otomatis oleh server. Prefix seperti http://, https://, dan www. akan dihapus sebelum disimpan.key (purchase code) bersifat case-insensitive dan otomatis diubah menjadi lowercase.