cURL dan Web Services (Studi Kasus: Login)

Buat: 02/02/2013 - 20:39
cURL dan Web Services (Studi Kasus: Login)

Ter-inspirasi dari pertanyaan salah satu anggota di group FB PHP Indonesia, saya jadi kepikiran pengen Nulis tutorial ini. Walaupun sebener nya sudah banyak blog yang ngebahas tentang ini, disini saya cuman pengen menjelas kan dengan cara saya sendiri sekalian belajar menulis hehe.. Pertanyaan nya kira-kira begini:

bisa gak sih login ke website kita menggunakan akun website lain.

Saya tertarik dengan jawaban OM cahya nsn, maaf om saya sebut2 nama nya, soal nya saya nge-fan haha…, klo gak salah begini jawaban beliau :

  1. jika sistem yang satu bisa ngakses database sistem yang satunya lagi.. tinggal di konekin ke database tersebut untuk validasi loginnya
  2. Jika ingin menggunakan webservice, pastikan di sistem yang buat ngecek login-nya itu nyediain API-nya, kalo nggak ada ya.. gak bisa tho?

pada tutorial kali ini saya akan membahas poin ke dua dari jawaban om cahya dsn. sedikit gambaran : disini ada dua system, system A dan system B, untuk login ke system A menggunakan Akun system B, pastinya system B harus menyediakan webservice(API). Yang nanti nya API tersebut akan di gunakan untuk mengecek validitas username dan password yang dikirim oleh system B melalui GET/POST request dengan parameter username dan password. Kemudian respon yang akan di kasih oleh API tersebut bisa berbentuk XML atau jSON, dalam hal ini saya kan menggunakan jSON.

ok biar gak terkesan banyak basa basi mari kita langsung implementasi saja. buat table "user" , sebagai contoh:

CREATE TABLE user (
     email varchar(100) NOT NULL,
     username varchar(100),
     password varchar(200),
PRIMARY KEY (email)
)

Contoh Data :

 
1.  INSERT INTO user (email,username,password)
VALUES ('[email protected]','faiz fadly', '21232f297a57a5a743894a0e4a801fc3');
2.   INSERT INTO user (email,username,password)
VALUES ('[email protected]','Adly', ' fe01ce2a7fbac8fafaed7c982a04e229');

Ket password :

  • 21232f297a57a5a743894a0e4a801fc3 = admin
  • fe01ce2a7fbac8fafaed7c982a04e229 = demo

Selanjut buat Folder baru di htdoc anda dengan nama "system_B" kita asusmsi kan sebagai Sistem B kemudian buat file baru dengan nama "api.php" di dalam folder "system_B". berikut script nya :

1.   <?php
2. //Koneksi
3.    mysql_connect("localhost", "root", "") or die(mysql_error());
4.  mysql_select_db("test") or die(mysql_error());
5. 
6.    //cek username.
7.  $email    = $_POST['email'];
8.   $password = $_POST['password'];
9.    
10.   $Q = mysql_query("SELECT * FROM user WHERE email='$email'
11.                      AND PASSWORD='$password'")or die(mysql_error());
12.          if($Q){
13.                  $posts = array();
14.                   if(mysql_num_rows($Q))
15.                  {
16.                          while($post = mysql_fetch_assoc($Q)){
17.                           $posts[] = $post;
18.                           }
19.                    } 
20.                     echo json_encode(array('user'=>$posts));                   
21.      }
22.   ?>

Respon yang akan di kemnalikan oleh skrip di atas berupa data jSON.

selanjut nya kita bikin satu folder lagi dengan nama “System_A” kita asusmsikan ini sebagai Sistem A. buat file dengan nama "formlogin.php" :

1.   <form class="form-signin" action="" method="post">
2.   <h2 class="form-signin-heading">Please sign in</h2>
3.    <input type="text" class="input-block-level" name="email" placeholder="Email address">
4. <input type="password" class="input-block-level" name="password" placeholder="Password">
5.   <button class="btn btn-large btn-primary" type="submit">Sign in</button>
6. </form>

Skrip di bawah ini adalah fungsi Login Untuk Action Form di atas :

1.   <?php
2. function doLogin($url,$email,$password){
3.     
4.            $datauser = array(
5.                            //'API_key' => $key,
6.                            'email' => $email,
7.                          'password' => $password,
8.           );
9.         
10.         $postdatauser = "";
11.           foreach($datauser as $k => $v){
12.                   $postdatauser .=  $k . "=" . $v."&";
13.           }
14.   
15.           //$postData = http_build_query($user_data);
16.         $curlHandle = curl_init();
17.          curl_setopt($curlHandle, CURLOPT_URL, $url);
18.            curl_setopt($curlHandle, CURLOPT_POSTFIELDS, $postdatauser); //
19.         curl_setopt($curlHandle, CURLOPT_HEADER, 0);
20.            curl_setopt($curlHandle, CURLOPT_RETURNTRANSFER, 1);
21.            curl_setopt($curlHandle, CURLOPT_TIMEOUT,30);
22.           curl_setopt($curlHandle, CURLOPT_POST, 1);
23.          $string         = curl_exec($curlHandle);
24.           curl_close($curlHandle);
25.          
26.         return $string;
27. }

Usesage dari fungsi di atas sebagai berikut :

echo doLogin("http://localhost/sistem_A/api.php",$_POST[“email”], $_POST[“password”]);

skrip di atas akan menghasilkan output berupa jSON:

1.   {"user":[
2.           {
3.             "email":"[email protected]",
4.              "username":"faiz fadly",
5.             "password":"21232f297a57a5a743894a0e4a801fc3"
6.           }
7.          ]
8. }

Selanjut nya kita akan meng-convert String jSON di atas menjadi Array dengan fungsi json_decode()

1.   $string   = doLogin("http://localhost/sistem_A/api.php",$username,$password);
2.  $arr      = json_decode($string,true);
3.   $email    = $arr['user'][0]['email'];
4.    $password = $arr['user'][0]['password'];

Setelah itu kita akan melakukan pengecekan apakah user ada atau gak :

1.   if($email !=''){
2.           session_start();
3.         $_SESSION['email']   = $email;
4.         $_SESSION['password']  = $password;
5.            header("Location:targethalamansuksess.php");//arahkan ke target halaman suksess
6.     }else{
7.          echo "Authentication Failed!";        
8.    }



NOTE

Contoh di atas blom bisa di sebut API sesui dengan standar. terutama bagian login, pada umumnya login bisa menggunakan Basic Authentication atau OAuth(Oauth 1 dan 2). dan untuk koneksi API pun ada 2 legged dan 3 legged.

temen2 bisa mempelajari REST dll

Selesain. Semoga Bermanfaat :) , tetap sehat tetap semangat biar bisa nulis trus :).

klo tulisan di atas agak susah di baca teman-teman bisa membaca disini

About Author

Tentang PHP Indonesia

PHP Indonesia adalah sebuah komunitas untuk semua orang yang mencintai PHP. Fokus utama kami adalah pemrograman menggunakan bahasa PHP, namun tidak menutup kemungkinan pembahasan yang mencakup keseluruhan LAMP stack. Topik bisa dari pemrograman PHP, penanganan memcached, optimasi database, konfigurasi server, tuning server web, application deployment, framework PHP, hosting pilihan dan sebagainya.

Petunjuk Penulisan

Berikut ini adalah beberapa petunjuk penulisan artikel. Petunjuk dibuat bukan untuk membatasi tetapi demi menjaga kualitas artikel yang terpublikasi di situs ini. Selain itu, keseragaman gaya bahasa dapat menjaga readibilitas (tingkat keterbacaan) sehingga pembaca akan lebih nyaman dalam membaca artikel di situs ini.