Membangun Web Service PDDIKTI Feeder Sederhana (WS Client)

Pada kesempatan ini saya ingin berbagi pengetahuan kepada teman-teman yang sedang berusaha belajar membuat Web Service PDDIKTI Feeder dengan librari yang sudah dikenal khalayak menggunakan NuSoap. Semoga dengan sekelumit script yang di share ini bisa mambantu dan menambah wawasan serta semoga bisa meringankan tugas-tugas teman-teman khususnya dalam entry data feeder untuk pelaporan semester pada laman http://forlap.ristekdikti.go.id.
Web Service yang di share dsini adalah sekedar teknik sederhana bagaimana mengambil data dari template excell untuk di-import ke database feeder, menggunakan library excel_reader.
Pembahasan Web Service sederhana disini adalah khusus cara import mahasiswa dari template excell, dan bisa dipakai sebagai acuan untuk dikembangkan dalam import data tabel yang lain.
Adapun hal-hal yang harus dipenuhi dalam membangun web service sederhana ini adalah :

  1. Komputer harus sudah terinstall PDDIKTI FEEDER (Ver 2.0)
  2. Install xampp pada drive selain drive C:
  3. Unduh librari nusoap disini
  4. Unduh excell_reader disini
  5. Unduh contoh template excell insert mahasiswa disini.
Langkah dalam pembuatan webservice adalah sebagai berikut :
  • Buat folder didalam folder xampp/htdocs misalkan tutorws

  • Dalam folder tutorws, extrak file zip sesuai dengan susunan folder seperti contoh
Jika perangkat-perangkat yang dibutuhkan sudah selesai di unduh dan diletakkan sesuai dengan folder seperti gambar, maka langkah selanjutnya adalah mulai menuliskan script.
    Langkah-langkahnya :

    Membuat Form Login

    login.php
    
    <html>
    <head>
    </head>
    <title>login</title>
    <body >
    <h1 align="center" class="form-signin-heading"> WS Feeder PD-DIKTI </h1>
         <h2 align="center" class="form-signin-heading"> Excel2Feeder</h2>
         
    <form class="form-signin" method="post" action="cek_login.php">
    <div style="color:white; padding:10px; text-align:center; font-family:Georgia, 'Times New Roman', Times, serif; font-size:30px"></i> Login User</div>
    
    <?php
     if (!empty($_GET['msg'])){
      if($_GET['msg']==1){
       echo '<div class="alert"><font color="#9D0000"><h6>Username dan password tidak boleh kosong</h6></font></div>';
      }elseif ($_GET['msg']==2){
       echo '<div class="alert"><font color="#9D0000"><h6>Pastikan username dan password benar</h6></font></div>';
      }
     }
    ?>
    <table width="100%">
    <tr><td valign=middle><input type="text" name="username" style="width:100%;" class="input-teks" placeholder="Username"/></td></tr>
    <tr><td valign=middle><input type="password" name="password" style="width:100%;" class="input-teks" placeholder="Password"/></td></tr>
    <tr width="100%"><td> <button type="submit"  class="styled-tombol-2" />Login</button></td></tr>
    <tr><tr><td>
    <h6 style="color:#FF0; text-align:center";><font face="Tahoma, Geneva, sans-serif">&copy; <?=$waktu= date("Y");?> Developed by Mary's UNISMA</font></h6>
    </td></tr></tr>
    </table>
    </form>
    </body>
    </html>
    
      <style type="text/css">
    .form-signin {
            max-width: 320px;
            padding: 20px;
            margin: 0 auto 20px;
            background-color:#2166E7;
            border: 1px solid #e5e5e5;
            -webkit-border-radius: 10px;
               -moz-border-radius: 10px;
                    border-radius: 10px;
            -webkit-box-shadow: 0 1px 2px rgba(0,0,0,.05);
               -moz-box-shadow: 0 1px 2px rgba(0,0,0,.05);
                    box-shadow: 0 1px 2px rgba(0,0,0,.05);
          }
          .form-signin .form-signin-heading,
          .form-signin .checkbox {
            margin-bottom: 10px;
          }
          .form-signin input[type="text"],
          .form-signin input[type="password"] {
            font-size: 16px;
            height: auto;
            margin-bottom: 15px;
            padding: 7px 9px;
      background-color:#99C;
      -webkit-border-radius: 5px;
               -moz-border-radius: 5px;
                    border-radius: 5px;
          }
       .alert {
      max-width: 320px;
            padding: 5px 30px;
            margin: 0 auto 5px;
            background-color:#FFD7FF;
      font-family:"Courier New", Courier, monospace;
            border: 1px solid #e5e5e5;
         -webkit-border-radius: 5px;
               -moz-border-radius: 5px;
                    border-radius: 5px;
       -webkit-box-shadow: 0 1px 2px rgba(0,0,0,.02);
                 -moz-box-shadow: 0 1px 2px rgba(0,0,0,.02);
                         box-shadow: 0 1px 2px rgba(0,0,0,.02);
       }
    
    .styled-tombol-2 {
     -webkit-box-shadow:rgba(0,0,0,0.0.1) 0 1px 0 0;
     -moz-box-shadow:rgba(0,0,0,0.0.1) 0 1px 0 0;
     box-shadow:rgba(0,0,0,0.0.1) 0 1px 0 0;
     background-color:#970000;
     border:1px solid #29447E;
     font-family:'Lucida Grande',Tahoma,Verdana,Arial,sans-serif;
     font-size:12px;
     font-weight:700;
     padding:2px 6px;
     height:40px;
     color:#fff;
     border-radius:5px;
     -moz-border-radius:5px;
     -webkit-border-radius:5px;
     width:320px;
    }
    
        </style>
    

    Hasil dari form login adalah seperti gambar berikut



    Kalau kita perhatikan script form login tersebut, terdapat script <form action="cek_login.php"...> dimaksudkan agar setelah form login diisikan user dan password secara lengkap, maka otentikasi user tersebut diarahkan ke script cek_login untuk di validasi user dan passwordnya sudah benar apa apa tidak.

    Otentikasi User dan Password

    cek_login.php

    
    
    <?php
    //require 'session.php';
    require 'nusoap/nusoap.php';
    require 'nusoap/class.wsdlcache.php';
    //$wsdl = 'http://192.168.20.119:8082/ws/live.php?wsdl';
    $wsdl = 'http://localhost:8082/ws/live.php?wsdl';
    //$wsdl = 'http://192.168.0.107:8082/ws/live.php?wsdl';
    $client = new nusoap_client($wsdl, true);
    
    function anti_injection($data){
      $filter = mysql_real_escape_string(stripslashes(strip_tags(htmlspecialchars($data,ENT_QUOTES))));
      return $filter;
    }
    
    $input_username=anti_injection($_POST['username']);
    $input_password=anti_injection($_POST['password']);
    
    
    
    $proxy = $client->getProxy();
    $username = $input_username;
    $password = $input_password;
    $gettoken = $proxy->GetToken($username, $password);
    $token=$gettoken;
    //var_dump ($gettoken);
    $sp="npsn='".$username."'";
    
    $result=$proxy->GetRecord($gettoken,'satuan_pendidikan',$sp);
    $id_sp=$result['result']['id_sp'];
    $nm_lemb=$result['result']['nm_lemb'];
    //echo "<br><br><br>".$id_sp['id_sp'];
    
    
    if (!ctype_alnum($gettoken)){
      header('location:login.php');
    }
    else{
    
    session_start();
    $_SESSION['token']=$gettoken;
    $_SESSION['username']=$username;
    $_SESSION['password']=$password;
    
    $_SESSION['id_sp']=$idsp;
    $_SESSION['nm_lemb']=$nm_lemb;
    
      header('location:depan.php');
    }
    ?>
    
    

    Kita perhatikan script cek_login diatas, pada baris $wsdl... komputer yang diakses adalah komputer itu sendiri (localhost), jadi silahkan localhost disesuaikan dengan alamat ip server feeder.

    Jika otentikasi user (sesuai kode PTS masing-masing) dan password (sesuai password di forlap) sudah benar, maka script selanjutnya akan mengarah pada halaman depan.php header('location:depan.php')

    Jika user dan password sudah benar maka akan tampil halaman depan yang memperlihatkan nama Perguruan Tinggi Masing-masing, contohnya adalah seperti gambar berikut :

    Halaman Depan

    depan.php

    
    <?php
    include "session.php";
    //echo "Id Perguruan Tinggi : <strong>".$id_sp."</strong><br />";
    echo "Nama Perguruan Tinggi : <strong>".$nm_lemb."</strong><br />";
    
    ?>
    <p>Untuk <strong><font color="#990000">instert mahasiswa</font></strong> silahkan download template excel <a href="temp_excell/inst_mhs.xls">disini</a></p>
    <form method="post" enctype="multipart/form-data" action="insert_mhs.php">
    Pilih File Excel*: <input name="fileexcel" type="file"> <input name="upload" type="submit" value="Import">
    <br /><br /><br />
    <a href="logout.php">Logout</a>
    

    Pada script diatas, ada sebuah link yang digunakan untuk download template excell, dimana menuliskan linknya adalah pada script <a href="temp_excell/inst_mhs.xls">disini</a>, artinya template excell sudah dipersiapkan pada folder temp_excell dengan nama file ins_mhs.xls.

    Ketika tombol Choose File kita pilih, maka kita akan diarahkan untuk mengambil file excell yang sudah terisi data untuk di import ke feeder, yang selanjutnya dipilih tombol Import.
    Sedangkan Tombol Import diarahkan pada insert_mhs,php

    Hasil import menunjukkan sukses adalah seperti tampilan berikut :


    Dari hasil import menunjukkan 2 data berhasil ditambahkan...dan script untuk insert_mhs.php adalah sebagai berikut :

    Insert_mhs.php

    
    <?php
    include 'session.php';
    include "excel_reader2.php";
    @$data = new Spreadsheet_Excel_Reader($_FILES['fileexcel']['tmp_name']);
    @$hasildata = $data->rowcount($sheet_index=0);
    $sukses = 0;
    $gagal = 0;
    
    for ($i=2; $i<=$hasildata; $i++)
    {
      
      //$record['nipd']=$data->val($i,1);
      $record['nm_pd'] = $data->val($i,2); 
      $record['tmpt_lahir'] = $data->val($i,3);
      $record['tgl_lahir'] = $data->val($i,4);
      $record['jk']  = $data->val($i,5);
      $record['id_agama'] =$data->val($i,6);
      $record['id_kk']=$data->val($i,7);
      //$record['id_jns_daftar'] = $data->val($i,8);
      //$record['tgl_masuk_sp'] = $data->val($i,9);
      //$record['mulai_smt'] = $data->val($i,10); 
      $record['jln'] = $data->val($i,11);
      $record['rt'] = $data->val($i,12);
      $record['rw'] = $data->val($i,13);
      $record['nm_dsn'] = $data->val($i,14);
      $record['ds_kel'] = $data->val($i,15);
      $record['id_wil']='000000';
      $record['a_terima_kps'] = $data->val($i,21); 
      $record['stat_pd'] = $data->val($i,23);
      $record['nm_ayah'] = $data->val($i,24);
      $record['id_jenjang_pendidikan_ayah'] = $data->val($i,26);
      $record['id_pekerjaan_ayah'] = $data->val($i,27);
      $record['id_penghasilan_ayah'] = $data->val($i,28);
      $record['id_kebutuhan_khusus_ayah'] = 0;
      $record['nm_ibu_kandung']  = $data->val($i,29);
      $record['id_jenjang_pendidikan_ibu'] = $data->val($i,31);
      $record['id_pekerjaan_ibu'] = $data->val($i,32);
      $record['id_penghasilan_ibu'] = $data->val($i,33);
      $record['id_kebutuhan_khusus_ibu'] = 0;
      $record['nik'] = $data->val($i,39);
      //$record['kode_prodi'] = $data->val($i,40);
      $record['kewarganegaraan']='ID';
      $records[]=$record;
    }
      
     $j_encode=json_encode($records);
     $mhs_json=$j_encode;
    
     
     $result=$proxy->InsertRecordset($gettoken,'mahasiswa',$mhs_json);    // fix insert banyak records
     //var_dump($result)."<br>";
    
    if ($result['result']) {
     for ($i=2; $i<=$hasildata; $i++){
      
      
       $idsp="id_sp='".$id_sp."'";
       $kode_prodi="kode_prodi='".$data->val($i,40)."'";
       $filter=$kode_prodi." AND ".$idsp;
      
       $result=$proxy->GetRecord($gettoken,'sms',$filter);
       $coba=$result['result'];
       $id_sms=$coba['id_sms'];
      
     
       
       
     
      // Kebutuhan tabel mahasiswa_pt
      
       $record1['id_reg_pd']='';
       $record1['id_sms']=$id_sms;//'851ef9fb-ee0a-4772-b868-43d9370c21df';//$coba['id_sms'];
        
       
       
       $filt_nm="nm_pd='".$data->val($i,2)."'";
       $filt_tpl="tmpt_lahir='".$data->val($i,3)."'";
       $filt_tgl="tgl_lahir='".$data->val($i,4)."'";
       $filter1=$filt_nm." AND ".$filt_tpl." AND ".$filt_tgl;
         //echo $filter1;
         $result=$proxy->GetRecord($gettoken,'mahasiswa',$filter1);
         $coba1=$result['result'];
         $id_pd=$coba1['id_pd'];
         //echo "<br />";
    //     print_r ("id_pd ='".$id_pd."'<br>");
       
       $record1['id_pd']=$id_pd;
       $record1['id_sp']=$id_sp;
       //     
       //if($row['StatusAwalID']=='B'){$id_daftar=1;}else{$id_daftar=2;}
       $record1['id_jns_daftar']=$data->val($i,8);
       $nipd=$data->val($i,1);
       $record1['nipd']=$nipd;
       //$record1['id_pd']=$id_pd;
       $record1['tgl_masuk_sp']=$data->val($i,9);
         $mulai_smt=$data->val($i,10);
       $record1['mulai_smt']=$mulai_smt;
       $record1s[]=$record1;
      
      if ($hasildata) $sukses++;
      else $gagal++;
     }
      $j_encode1=json_encode($record1s);
      $mhs_pt_json=$j_encode1;
      
     
     $result1=$proxy->InsertRecordset($gettoken,'mahasiswa_pt',$mhs_pt_json);    // fix insert banyak record
     
     echo "<pre>";
     var_dump($result1); 
     echo "</pre>";
    
    }
    echo "<b>import data selesai.</b> <br>";
    echo "Data yang berhasil di import : " . $sukses .  "<br>";
    echo "Data yang gagal diimport : ".$gagal .  "<br>";
    ?>
    

    Pada script diatas ada tulisan include "session.php";, artinya pada script tersebut kita sertakan file session.php, dimana session tersebut dimaksudkan untuk mengenali token yang sudah terbuat setelah login sukses, karena inti akses ke database feeder adalah harus selalui memiliki token.

    File Session
    session.php

    
    <?php
    session_start();
    
    //echo $_SESSION['token'];
    require 'nusoap/nusoap.php';
    require 'nusoap/class.wsdlcache.php';
    $wsdl = 'http://localhost:8082/ws/live.php?wsdl';
    //$wsdl = 'http://192.168.0.107:8082/ws/live.php?wsdl';
    $client = new nusoap_client($wsdl, true);
    $proxy = $client->getProxy();
    //echo $_SESSION['username'];
    //echo $_SESSION['password'];
    
    $input_username=$_SESSION['username'];
    $input_password=$_SESSION['password'];
    
    $username = $input_username;
    $password = $input_password;
    $gettoken = $proxy->GetToken($username, $password);
    
    $_SESSION["token"]=$gettoken;
    $token=$gettoken;
    //echo $token;
    
    $sp="npsn='".$username."'";
    
    $result=$proxy->GetRecord($gettoken,'satuan_pendidikan',$sp);
    $id_sp=$result['result']['id_sp'];
    $nm_lemb=$result['result']['nm_lemb'];
    $_SESSION['id_sp']=$id_sp;
    $_SESSION['nm_lemb']=$nm_lemb;
    //echo $nm_lemb;
    ?>
    

    Cek data pada feeder, untuk meyakinkan bahwa data sudah masuk, seperti gambar brikut :

    Demikian tutorial singkat koding script WS secara sederhana, dan selanjutnya bisa dikembangkan sesuai kreasi masing-masing untuk kebutuhan import tabel yang lain.

    Salam koding, selamat berkarya.
    Thanks.
    Previous
    Next Post »