Dokumentasi

API URL: /api/daftar.php

Parameter post:
id = Setiap sekolah diberi nomor ID yang unik.
nik = Nomor Induk Kependudukan calon peserta didik. Panjangnya harus 16 digit angka.
nama = Nama calon peserta didik.
catatan = (optional) String maksimal 10 karakter. Sebaiknya username operator sekolah.
token = password_hash(nik + apikey). Setiap sekolah diberi apikey yang unik dan harus dirahasiakan.

Contoh balasan dari server API berupa string JSON seperti ini:
{"sukses":true,"keterangan":"Pendaftaran diterima."}
{"sukses":false,"keterangan":"NIK tersebut telah terdaftar di SMK Percobaan."}

API URL: /api/cek.php

Parameter post:
id = Setiap sekolah diberi nomor ID yang unik.
nik = Nomor Induk Kependudukan calon peserta didik. Panjangnya harus 16 digit angka.
token = password_hash(nik + apikey). Setiap sekolah diberi apikey yang unik dan harus dirahasiakan.

Contoh balasan dari server API berupa string JSON seperti ini:
{"sukses":true,"keterangan":"NIK tersebut belum terdaftar di sekolah manapun."}
{"sukses":false,"keterangan":"NIK tersebut telah terdaftar di SMK Percobaan."}

API URL: /api/cabut.php

Parameter post:
id = Setiap sekolah diberi nomor ID yang unik.
nik = Nomor Induk Kependudukan calon peserta didik. Panjangnya harus 16 digit angka.
catatan = (optional) String maksimal 10 karakter. Sebaiknya username operator sekolah.
token = password_hash(nik + apikey). Setiap sekolah diberi apikey yang unik dan harus dirahasiakan.

Contoh balasan dari server API berupa string JSON seperti ini:
{"sukses":true,"keterangan":"Pencabutan berkas berhasil."}
{"sukses":false,"keterangan":"Gagal mencabut berkas. Mungkin NIK tersebut tidak didaftarkan di sekolah ini."}

Contoh script PHP di sisi sekolah:

Script di bawah ini dipasang di server masing-masing sekolah (misalkan: ppdb.namasekolah.sch.id). Ini hanya script minimal. Silakan tambahkan field-field lain, fungsi login/logout, dsb.

define('API_URL', 'https://www.tes.web.id/api/daftar.php');
define('API_ID', 88888888); // Kode sekolah.
define('API_KEY', 'rahasia888'); // Tiap sekolah mempunyai KEY berbeda.

$operator = 'admin';
$nik = '1234567890123456';
$nama = 'Upin Ipin';

$data = array(
'id' => API_ID,
'nik' => $nik,
'nama' => $nama,
'catatan' => $operator, // Sebaiknya username operator di sistem lokal.
'token' => password_hash($nik . API_KEY, PASSWORD_DEFAULT)
);

$options = array(
  'http' => array(
    'header'  => "Content-type: application/x-www-form-urlencoded\r\n",
    'method'  => 'POST',
    'content' => http_build_query($data)
  )
);
$context  = stream_context_create($options);
$result = @file_get_contents(API_URL, false, $context);
$hasil = json_decode($result);

echo $hasil->sukses;
echo $hasil->keterangan;

Contoh script PHP di sisi server:

Script di bawah ini dipasang di server API, misalkan tes.web.id bertindak sebagai server API.

$id = $_POST['id'];
$nik = $_POST['nik'];
$token = $_POST['token'];

// Lakukan query untuk mendapatkan apikey.
// Misalkan: select apikey from namatabel where id = $id

if (password_verify($nik . $apikey, $token)) {
  // Lakukan query ke database.
  // Misalkan select atau update atau delete.
  $tanggapan = array(
    $sukses => TRUE,
    $keterangan => 'Pendaftaran diterima.'
  );
}
else {
  $tanggapan = array(
    $sukses => FALSE,
    $keterangan => 'Token tidak cocok.'
  );
};
echo json_encode($tanggapan);

Demikian sedikit gambaran bagaimana cara membuat aplikasi PPDB (PSB) di mana setiap sekolah ingin membuat aplikasi sendiri-sendiri, tapi aplikasi-aplikasi tersebut tidak benar-benar terpisah karena masing-masing aplikasi sekolah saling memberi kabar tentang siapa saja calon peserta didik yang mendaftar di sekolahnya, sehingga calon peserta didik tidak bisa mendaftar di lebih dari satu sekolah.

Agar server API tidak kedodoran "dikeroyok" aplikasi dari berbagai sekolah, maka selain perangkat keras yang bagus, juga dibutuhkan perancangan database yang sangat matang, terutama pada penentukan index. Juga sebaiknya langsung dikode memakai PHP murni, tanpa bantuan framework.