Cara Membuat Koneksi Ke Twitter Menggunakan OAuth dan PHP

callback.php

<?php
/* Start session and load lib */
session_start();
require_once('twitteroauth/twitteroauth.php');
require_once('config.php');

/* If the oauth_token is old redirect to the connect page. */
if (isset($_REQUEST['oauth_token']) && $_SESSION['oauth_token'] !== $_REQUEST['oauth_token']) {
  $_SESSION['oauth_status'] = 'oldtoken';
  session_destroy();
  header('Location: ./index.php');
}

/* Create TwitteroAuth object with app key/secret and token key/secret from default phase */
$connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, $_SESSION['oauth_token'], $_SESSION['oauth_token_secret']);

/* Request access tokens from twitter */
$access_token = $connection->getAccessToken($_REQUEST['oauth_verifier']);

/* Save the access tokens. Normally these would be saved in a database for future use. */
$_SESSION['access_token'] = $access_token;

/* Remove no longer needed request tokens */
unset($_SESSION['oauth_token']);
unset($_SESSION['oauth_token_secret']);

/* If HTTP response is 200 continue otherwise send to connect page to retry */
if (200 == $connection->http_code) {
  /* The user has been verified and the access tokens can be saved for future use */
  $_SESSION['status'] = 'verified';
  header('Location: ./index.php');
} else {
  /* Save HTTP status for error dialog on connnect page.*/
  session_destroy();
  header('Location: ./index.php');
}

Sama juga seperti diatas tadi, inisiasi session dan load script yang dibutuhkan.
Tapi, kali ini ketambahan dengan pengecekan, apakah oauth_token saat ini, sama dengan oauth_token yang ada di sesi. Hal ini untuk mencegah user melakukan refresh. Karena, bila ini dilakukan, oauth_token yang ada akan rusak dan tidak bisa dipakai lagi. Jadi, user perlu melakukan otentikasi lagi.

/* Create TwitteroAuth object with app key/secret and token key/secret from default phase */
$connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, $_SESSION['oauth_token'], $_SESSION['oauth_token_secret']);

Selanjutnya kita perlu membuat koneksi ke twitter dengan menggunakan informasi consumer key dan consumer secret dari aplikasi kita ditambah dengan oauth token dan oauth token secret yang sudah dibuat di halaman redirect.

/* Request access tokens from twitter */
$access_token = $connection->getAccessToken($_REQUEST['oauth_verifier']);

Lalu, kita buat access token berdasarkan oauth verifier yang dikirimkan twitter ke halaman callback.

/* Save the access tokens. Normally these would be saved in a database for future use. */
$_SESSION['access_token'] = $access_token;

/* Remove no longer needed request tokens */
unset($_SESSION['oauth_token']);
unset($_SESSION['oauth_token_secret']);

Informasi access_token inilah sebenarnya yang kita butuhkan agar kita bisa menggunakan API twitter dengan hak akses dari user. Sehingga, informasi ini perlu di simpan ke database. Untuk kasus kali ini, cukup disimpan di session saja.

/* If HTTP response is 200 continue otherwise send to connect page to retry */
if (200 == $connection->http_code) {
  /* The user has been verified and the access tokens can be saved for future use */
  $_SESSION['status'] = 'verified';
  header('Location: ./index.php');
} else {
  /* Save HTTP status for error dialog on connnect page.*/
  session_destroy();
  header('Location: ./index.php');
}

Sisanya, sama saja dengan proses di redirect.php, bika return status dari $connection gagal, berarti ada kesalahan, perlu menghapus sesi agar proses otentikasi bisa diulang. Bila statusnya sukses, tinggal redirect kembali ke index.php lalu lakukan yang ingin dilakukan dengan twitter.

Nah, karena prosesnya sudah selesai, sekarang kita kembali lagi ke index.php untuk menjelaskan apa yang sebenarnya dilakukan script itu saat selesai otentikasi dengan OAuth.

	//wah, sudah berhasil tersambung nih. Lakukan proses disini
	$access_token = $_SESSION['access_token'];
	$connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, $access_token['oauth_token'], $access_token['oauth_token_secret']);
	$content = $connection->get('account/verify_credentials');
	var_dump($content);

Disini, kita perlu mengambil terlebih dahulu access_token dari user, yang sudah kita buat saat di callback.php. Kemudian, kita membuat koneksi ke twitter dengan informasi access_token dan oauth token & oauth token secret. Setelah koneksi selebihnya tinggal melakukan API request yang diinginkan. Contohnya, kita melakukan verifikasi credentials, dengan perintah:

$content = $connection->get('account/verify_credentials');

Penutup

Membuat koneksi OAuth ke twitter dengan menggunakan PHP memang gampang-gampang susah. Kalau ternyata dengan tutorial ini masih juga bingung, silahkan ditanyakan saja di kolom komentar. Siapa tahu, dari pertanyaan itu bisa jadi tutorial baru lagi. Lumayan kan, pertanyaan anda terjawab, blog saja juga update:D. Lalu, kalau butuh daftar API yang bisa dilakukan, silahkan konsultasikan ke halaman dev twitter.

Author: Arief Bayu Purwanto

Hello, my name is Arief Bayu Purwanto, a 24 years old father of a beautiful daughter. Interested in online programming, linux, games, and reading. Currently working on kapanlagi.com as junior developer. I live in a relatively quite and cool place called Malang. I'm available for some freelance stuff as well as some consulting job. You can see my portofolio for some previous task I've finished and some other information related to my capability. Btw, I'm plurking here.

  • maaf nih bos mau tanya.. klo buat itu kan di host yach ?? nah kan di root directory udah ada tuh config.php index.php ddl
    apakah kita buatnya di subdomain gitu ??
    terimakasih sebelumnya

    • Iya, ini mesti di host. Bisa sih, di komputer lokal, dengan catatan, punya IP publik.

      Untuk penempatan scriptnya sendiri, terserah ente aja sih sebenarnya, bisa mengubah index.php yang ada atau membuat subdirektori maupun subdomain baru.

      Kode2 diatas ini kan tujuannya untuk mendapatkan informasi oauth dari pengguna. Sedangkan pemakaian oauth itu sendiri tidak harus di index.php.

      Untuk config.php sendiri, itu kan hanya informasi dari aplikasi twitter anda yang bisa digabung ke config.php yang sudah dimiliki saat ini.

      • Safarsul

        ┬áMAS mau nanya saya sudah bisa koneksinya tapi saya belum bisa memasukkan databasenya…

  • Darmawan Reza

    kalo seandainya aplikasi kita local gimana ya??apa bisa gan??

    • Seharusnya bisa, dengan catatan, komputer lokal kamu ada IP publik-nya.

  • Yoga_man01

    eh numpang nanya dong, klo maksd yg di bawah ini apa ya maksdnya??

    Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in /home/statanet/domains/statusvia.net/public_html/twitter/apps/index.php on line 18

    Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in /home/statanet/domains/statusvia.net/public_html/twitter/apps/common/theme.php on line 144

    saya ga ngerti nih, mksih,

    • Kalau dari error itu sih, kemungkinan ada masalah di query, atau di variable yang digunakan di input mysql_fetch_assoc().

  • goblok

    mastah, mau tanya donk, saya pake ubuntu 10.10, apache+php+mysql+phpmyadmin sudah jalan. Tapi kenapa setiap saya bikin code untuk dikoneksikan kedatabase selalu error, forbidden, atau bahkan tidak muncul, apa2 sama sekali. Apakah kita harus setting php.ini untuk mysql dan mysqli, bagaimana settingan php.ini yg sangat valid untuk web developer di linux
    Terima Kasih

    • Passwordnya sudah bener belum?
      Kalau phpmyadmin bisa konek, berarti masalahnya ada di kode phpmu, bukan setting php.ini

  • Dhyaudha

    “Harus sesuai dengan dimana aplikasi anda diinstall.”
    saya bingung justru bagaimana menginstall alamat website-nya.

  • Zaki Penulis

    mas, saya sudah sukses implement. hasil ada bentuk array saja.
    Contoh pengolahan array ada tidak?

  • Abdur rahimi

    gan kenapa ya saya selalu gagal dalam mengedit twitter oauth?? yg mana saja yg harus kita edit?? jika saya menggunkannnya selalu saja keluar tulisan refresh page or try again latter?? apa itu yg salah ya??

  • Nunu G’Bolee CiWekz

    udah ngikutin step2 di atas sampe selesai tp kok mlh cuma tampil kyk gini ? untuk codingnya ada yg ditambah lg ga? aku udah ngikutin dan yg diganti paling hanya config nya saja

  • botskip

    sam saya mencoba tpi mengalami eror di index.php errorx seperti berikut
    Warning: require_once(twitteroauth/twitteroauth.php) [function.require-once]: failed to open stream: No such file or directory in C:xampphtdocstwitter_oauthindex.php on line 4

    Fatal error: require_once() [function.require]: Failed opening required ‘twitteroauth/twitteroauth.php’ (include_path=’.;C:xamppphpPEAR’) in C:xampphtdocstwitter_oauthindex.php on line