Contoh bridging BPJS dengan PHP (Registrasi SEP)

<?php

$dataid    = "1234"; //Ganti dengan consumerID dari BPJS
$secretKey = "1234"; //Ganti dengan consumerSecret dari BPJS
$localIP   = "192.168.0.1";
$url       = "http://".$localIP."/devWSLokalRest/SEP/sep"; //Lihat katalog, jangan sertakan port
$port      = 8081; //port url

date_default_timezone_set('UTC');
$tStamp              = strval(time() - strtotime('1970-01-01 00:00:00'));
$signature           = hash_hmac('sha256', $dataid . "&" . $tStamp, $secretKey, true);
$encodedSignature    = base64_encode($signature);
$urlencodedSignature = urlencode($encodedSignature);

echo "X-cons-id: " . $dataid . "<br>";
echo "X-timestamp:" . $tStamp . "<br>";
echo "X-signature: " . $encodedSignature . "<br>";

function post_request($url, $port, $dataid, $tStamp, $encodedSignature, $data, $referer = '')
{
    
    //-Convert the data array into URL Parameters like a=b&foo=bar etc.
    //$data = http_build_query($data);
    
    // parse the given URL
    $url = parse_url($url);
    
    if ($url['scheme'] != 'http') {
        die('Error: Only HTTP request are supported !');
    }
    
    // extract host and path:
    $host = $url['host'];
    $path = $url['path'];
    
    // open a socket connection on port 80 - timeout: 50 sec
    $fp = fsockopen($host, $port, $errno, $errstr, 50);
    
    if ($fp) {
        
        // send the request headers:
        fputs($fp, "POST $path HTTP/1.1\r\n");
        fputs($fp, "Host: $host\r\n");
        
        if ($referer != '')
            fputs($fp, "Referer: $referer\r\n");
        
        fputs($fp, "x-cons-id: " . $dataid . "\r\n");
        fputs($fp, "x-timestamp: " . $tStamp . "\r\n");
        fputs($fp, "x-signature: " . $encodedSignature . "\r\n");
        fputs($fp, "Content-Type: application/x-www-form-urlencoded\r\n");
        fputs($fp, "Content-length: " . strlen($data) . "\r\n");
        fputs($fp, "Connection: close\r\n\r\n");
        fputs($fp, $data);
        
        $result = '';
        while (!feof($fp)) {
            // receive the results of the request, 128 char
            $result .= fgets($fp, 128);
        }
    } else {
        return array(
            'status' => 'err',
            'error' => "$errstr ($errno)"
        );
    }
    
    // close the socket connection:
    fclose($fp);
    
    // split the result header from the content
    $result = explode("\r\n\r\n", $result, 2);
    
    $header  = isset($result[0]) ? $result[0] : '';
    $content = isset($result[1]) ? $result[1] : '';
    
    // return as structured array:
    return array(
        'status' => 'ok',
        'header' => $header,
        'content' => $content
    );
    
}


$databpjs = "<request>
<data>
<t_sep>
<noKartu>0001134632924</noKartu>
<tglSep>2016-08-4 11:05:03</tglSep>
<tglRujukan>2016-08-2 11:05:03</tglRujukan>
<noRujukan>12345</noRujukan>
<ppkRujukan>0142U037</ppkRujukan>
<ppkPelayanan>3302191</ppkPelayanan>
<jnsPelayanan>2</jnsPelayanan>
<catatan>dari WS</catatan>
<diagAwal>K04.1</diagAwal>
<poliTujuan>GIG</poliTujuan>
<klsRawat>3</klsRawat>
<lakaLantas>2</lakaLantas>
<user>bpjs</user>
<noMr>1234</noMr>
</t_sep>
</data>
</request>";

$data = array(
    'Data' => $databpjs
);


$result = post_request($url, $port, $dataid, $tStamp, $encodedSignature, $databpjs, $referer = '');
if ($result['status'] == 'ok') {
    
    // Print headers
    echo $result['header'];
    
    echo '<hr />';
    
    //mengubah "re d sponse" menjadi "response"
    $resultstr = str_replace("re d sponse", "response", trim(preg_replace('/\s\s+/', ' ', $result['content'])));
    
    // print the result of the whole request:
    echo "<pre>";
    echo $resultstr;
    echo "</pre>";
    
} else {
    echo 'A error occured: ' . $result['error'];
}

?>

30 thoughts on “Contoh bridging BPJS dengan PHP (Registrasi SEP)

    1. oh, saya lupa, soanya saya cuman bantu teman selesaikan masalah errornya. Klo tidak salah sid nya 1000 dan cid nya 6789. atau kalau tidak malah kebalikannya

  1. mas, sy coba yg insert SEP gagal ya, sy sdh dapat consID dan secretID dari BPJS.
    url yg dari katalog SEP pake http://“.$localIP.”/WSLokalRest/SEP/insert (beda dgn yg di artikel ini)
    hanya ada teks “A error occur : ()” saja
    ada kesalahan dimana ya? kalo boleh minta bantuan 🙂

    1. wah sya tidak bisa jawab kalau yang diinfolan cuman errornya saja. coba infokan kodenya ke email saya contact[at]latiful.hayat.web.id (ganti [at] dengan @)

  2. assalau alaikum mas, melanjutkan yg sebelumnya. sy coba pake no.kartu BPJS dari data di RS, tapi jawaban errornya selalu : {“metadata”:{“code”:”800″,”message”:”No.Kartu Tidak Ada”},”response”:null} 0
    sy cobanya di “http://dvlp.bpjs-kesehatan.go.id/devWsLokalRest/SEP/insert”, apakah no.kartu bpjs pasien RS (yg sebenarnya valid) di server dvlp tsb tidak ada ? bagaimana cara sy mencoba pake no.kartu yg bisa dikenali server dvlp tsb?
    mohon bantuannya ya mas, terima kasih

    1. sudah coba cek di request cek kepesertaan (cek peserta berdasarkan nik)? kalau di cek bagian peserta ada ya seharusnya ada di dvlp. Atau coba kirim kodenya ke alamat email saya: contact [at] latiful.hayat.web.id

  3. Oh iya, error yg tadi ”No.Kartu Tidak Ada”, hanya terjadi di server onlien (dvlp), tapi kalo di local SEP, tetap error tapi malah tidak ada keterangan errorny apa… (spt pertanyaan sy yg tgl 19 yg lalu)

  4. alhamdulillah sdh berhasil buat sep dgn pedoman tulisan di atas.
    hanya sy mau tanyakan bgmn kalo data variabelnya di input dari form?
    maksudnya untuk data data seperti: noKartu, tglSep, tglRujukan, dll

    1. Saya tidak punya wewenang untuk memberikan informasi cons id dan secret id. Karena yang saya punya adalah id untuk rumah sakit yang saya bantu proses bridgingnya. Silahkan request ke BPJS, BPJS pasti memberikan kepada pegawai bagian IT Rumah Sakit maupun kepada kru bridging.

  5. mas tanya saya coba, selalu muncul pesan “metadata”:{“code”:”401″,”message”:”Expired Service”},”response”:null}
    entah itu pencarian peserta pake no bpjs,nik atau lainnya sama aja

    kenapa yaa mas, saya id dan keynya baru dapat masih berlaku ampe februari ini

    1. bisa jadi jam komputer tidak sama dengan jam server, atau kode (id) salah ketik yang menjadi kesalahan biasanya: I l 1 dan 0 O karena hampir sama

  6. $localIP tu ip nya komputer kita ? atau ip komputer yang kita tuju mas ?
    saya sudah punya cons-id dan sercret-id utk bpjs nya…

    1. itu hanya contoh, silahkan dimasukkan ke Sistem informasi rumah sakit, lebih jelasnya silahkan tanya admin sistem informasi. Untuk di masukkan ke file mana, itu berbeda-beda tergantung dari programer yang telah buat sistem yg telah ada

  7. mas saya dah coba tapi selalu tampil seperti ini :
    84 {“metadata”:{“code”:”201″,”message”:”Unexpected character encountered while parsing value: <. Line 1, position 1."},"response":null} 0
    kira2 knp ya?bisa bantu mas

  8. Selamat siang mas latiful hayat,

    mau tanya kenapa, kenapa punya saya muncul pesan {“response”:null,”metaData”:{“message”:”UNAUTHORIZED – cause : consID expired”,”code”:401}}

    apa mungkin dikarenakan consID yg diberikan pada BPJS expired atau ada faktor lain y mas,, mogon bantuannya.

    Terima Kasih :d

Comments are closed.