menu

Showing posts with label Engine2. Show all posts
Showing posts with label Engine2. Show all posts

Engine - Notifikasi/chat laravel websocket using Ratchet part-1


Tidak terasa sudah lebih dari 2 bulan tidak menulis akhirnya diberi kesempatan lagi untuk berkarya. Pada artikel kali ini codedoct akan membagikan cara membuat sebuah chat engine menggunakan websocket dengan teknologi ratchet yang akan dikombinasikan dengan laravel.

Sebelum memulai codedoct akan memberitahu teknologi apa saja yang akan digunakan secara detail,
  1. Laravel versi 5.4
  2. PHP versi 5.6
  3. Ratchet cboden versi 0.4
Oke sekarang saatnya kita mulai, Pertama install terlebih dahulu ratchetnya pada laravel dengan cara,
$ composer require cboden/ratchet

Selanjutnya, buat file command laravel untuk dijalankan di server dengan cara,
$ php artisan make:command WebSocketServer --command=websocket:init

Syntax di atas akan secara otomatis membuat file baru dengan nama WebSocketServer.php pada path app/Console/Commands/ edit file tersebut sehingga akan tampak seperti ini,
<?php

namespace App\Console\Commands;

use Illuminate\Console\Command;
use Ratchet\Server\IoServer;
use Ratchet\Http\HttpServer;
use Ratchet\WebSocket\WsServer;
use React\EventLoop\Factory;
use App\Http\Controllers\WebSocketController;

class WebSocketServer extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'websocket:init';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Command description';

    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct()
    {
        parent::__construct();
    }

    /**
     * Execute the console command.
     *
     * @return mixed
     */
    public function handle()
    {
        $this->info("start server");
        $server = IoServer::factory(
             new HttpServer(
                 new WsServer(
                     new WebSocketController()
                 )
             ),
             8080
        );
        $server->run();
    }
}

Terlihat pada code diatas kita menambahkan file WebSocketController.php terserah kalian meletakkannya dipath mana saja, dalam hal ini codedoct meletakkan pada path app\Http\Controllers\, silahkan edit file terbut sehingga akan tampak seperti ini,
<?php

namespace App\Http\Controllers\Thirdparty;

use Ratchet\MessageComponentInterface;
use Ratchet\ConnectionInterface;
/**
 * @author Mihawk | codedoct.com
 */
class WebSocketController implements MessageComponentInterface
{
    protected $clients;
    private $users;
    private $userresources;
    public function __construct()
    {
        $this->clients = new \SplObjectStorage;
        $this->users = [];
        $this->userresources = [];
    }
    /**
     * [onOpen description]
     * @method onOpen
     * @param  ConnectionInterface $conn [description]
     * @return [JSON]                    [description]
     * @example connection               var conn = new WebSocket('ws://localhost:8090');
     */
    public function onOpen(ConnectionInterface $conn)
    {
        $this->clients->attach($conn);
        $this->users[$conn->resourceId] = $conn;
    }
    /**
     * [onMessage description]
     * @method onMessage
     * @param  ConnectionInterface $conn [description]
     * @param  [JSON.stringify]          $msg  [description]
     * @return [JSON]                    [description]
     * @example sendAll                  conn.send(JSON.stringify({command: "sendAll", data: {message:"halo global"}, from: "3"}));
     * @example sendConnection           conn.send(JSON.stringify({command: "sendConnection", data: "halo kampret - kampret", to: [1,2]}));
     * @example message                  conn.send(JSON.stringify({command: "message", to: "1", from: "9", message: "it needs xss protection"}));
     * @example register                 conn.send(JSON.stringify({command: "register", userId: 9}));
     */
    public function onMessage(ConnectionInterface $conn, $msg)
    {
        $data = json_decode($msg);
        if (isset($data->command)) {
            switch ($data->command) {
                case "sendAll":
                    if ($data->from) {
                        foreach ($this->userresources as $key => $resources) {
                            if ($key != $data->from) {
                                foreach ($resources as $resourceId) { //setiap user ID bisa buka di banyak browser
                                    if (isset($this->users[$resourceId])) {
                                        $this->users[$resourceId]->send(json_encode($data->data));
                                    }
                                }
                            }
                        }
                    }
                break;
                case "sendConnection":
                    if (count($data->to)>0) {
                        foreach ($this->userresources as $key => $resources) {
                            if (in_array($key, $data->to)) {
                                foreach ($resources as $resourceId) { //setiap user ID bisa buka di banyak browser
                                    if (isset($this->users[$resourceId])) {
                                        $this->users[$resourceId]->send(json_encode($data->data));
                                    }
                                }
                            }
                        }
                    }
                break;
                case "message":
                    if ($data->from && $data->to) {
                        if ( isset($this->userresources[$data->to]) ) {
                            foreach ($this->userresources[$data->to] as $key => $resourceId) {
                                if ( isset($this->users[$resourceId]) ) {
                                    $this->users[$resourceId]->send(json_encode($data->data));
                                }
                            }
                        }
                        if (isset($this->userresources[$data->from])) {
                            foreach ($this->userresources[$data->from] as $key => $resourceId) {
                                if ( isset($this->users[$resourceId])  && $conn->resourceId != $resourceId ) { //jika buka di browser yg berbeda
                                    $this->users[$resourceId]->send(json_encode($data->data));
                                }
                            }
                        }
                    }
                break;
                case "register":
                    if (isset($data->userId)) {
                        if (isset($this->userresources[$data->userId])) {
                            if (!in_array($conn->resourceId, $this->userresources[$data->userId]))
                            {
                                $this->userresources[$data->userId][] = $conn->resourceId;
                            }
                        }else{
                            $this->userresources[$data->userId] = [];
                            $this->userresources[$data->userId][] = $conn->resourceId;
                        }
                    }
                    // $conn->send(json_encode($this->users));
                    $conn->send(json_encode($this->userresources));
                break;
                default:
                    $example = array(
                        'methods' => [
                                    "send to all" => '{command: "sendAll", data: {message:"halo global"}, from: "3"}',
                                    "send to group" => '{command: "sendConnection", data: "halo kampret - kampret", to: [1,2]}',
                                    "message" => '{command: "message", to: "1", from: "2", data: {message:"halo gan"}',
                                    "register" => '{command: "register", userId: 9}',
                                ],
                    );
                    $conn->send(json_encode($example));
                break;
            }
        }
    }
    public function onClose(ConnectionInterface $conn)
    {
        $this->clients->detach($conn);
        echo "Connection {$conn->resourceId} has disconnected\n";
        unset($this->users[$conn->resourceId]);
        foreach ($this->userresources as &$userId) {
            foreach ($userId as $key => $resourceId) {
                if ($resourceId==$conn->resourceId) {
                    unset( $userId[ $key ] );
                }
            }
        }
    }
    public function onError(ConnectionInterface $conn, \Exception $e)
    {
        echo "An error has occurred: {$e->getMessage()}\n";
        $conn->close();
    }
}

Code websocket server diatas akan kita panggil melalui command php artisan untuk itu kita harus menambahkannya pada kernel laravel, yang terletak pada path app/Console/ dengan nama file Kernel.php edit bagian command menjadi seperti ini,
/**
     * The Artisan commands provided by your application.
     *
     * @var array
     */
    protected $commands = [
        Commands\WebSocketServer::class,
    ];

Oke jika semua sudah selesai saatnya kita coba run WebSocketServer nya dengan cara,
$ php artisan websocket:init

Sehingga akan tampak seperti ini tampilannya,


===DONE!===

Engine - Chat with firebase


Pada tutorial kali ini, codedoct akan sharing membuat engine chat sederhana dengan firebase, apa itu firebase bisa baca disini,

Oke langsung saja kita mulai experimentnya, hal pertama yang harus dilakukan adalah sign-in terlebih dahulu ke firebase-console dengan menggunakan akun gmail anda, jika belum punya akun gmail? silahkan buat terlebih dahulu.

Jika anda sudah login maka akan tampak seperti pada gambar dibawah ini,


Klik tambahkan proyek untuk membuat proyek baru, akan tampak seperti gambar dibawah,


Jika sudah dibuat maka anda akan masuk ke halaman ini,


Masuk ke menu database dengan meng-click submenu "Database" disebelah kiri halaman, dan akan tampil seperti gambar dibawah,


Selanjutnya kita akan mengimpor database yang sudah saya buat terlebih dahulu sebagai template database. Caranya bisa lihat pada gambar diatas, sehingga akan tampak gambar dibawah,


Silahkan dowload database ini, kemudian pada gambar diatas klik jelajahi dan silahkan pilih database yang sudah di download tadi. Sehingga akan tampah database seperti pada gambar dibawah,


Selanjutnya kita akan membuat auth pada engine firebase kita, masuk ke menu "Authentification" dan klik "Metode Masuk" seperti pada gambar dibawah,


Klik Google dan aktifkan seperti pada gambar dibawah,


Jika semua sudah dilakukan, sekarang kita akan setup engine sederhana yang sudah saya buat, buat folder pada htdocs (bagi pengguna windows, yang lain menyesuaikan hehe..), saya akan buat folder bernama "firebase" dan buat file format php dengan nama index.php pada folder "firebase" tersebut kemudian isikan code berikut,
<!DOCTYPE html>
<html>
<head>
 <!-- Letakan code firebase disini -->

 <!-- ============================ -->

 <title>Experiment Firebase</title>
 <script type="text/javascript">
  window.onload = function () { 
   var user = userShow();
   if (user) {
    loadMessage();
    alert('Welcome '+user.displayName+'!');
   }
  }

  function login() {
   var provider = new firebase.auth.GoogleAuthProvider();
   firebase.auth().signInWithPopup(provider).then(function(result) {
     console.log("login");
   }).catch(function(error) {
     // Handle Errors here.
     var errorCode = error.code;
     var errorMessage = error.message;
     // The email of the user's account used.
     var email = error.email;
     // The firebase.auth.AuthCredential type that was used.
     var credential = error.credential;
     // ...
   });
  }

  function userShow() {
   var auth = localStorage['firebase:authUser:'+config.apiKey+':[DEFAULT]'] ? localStorage['firebase:authUser:'+config.apiKey+':[DEFAULT]'] : null;
   if (auth) {
    var result = JSON.parse(auth);
    console.log(result.displayName);
    return result;
   } else {
    alert('Please login first.');
   }
  }

  function logout() {
   firebase.auth().signOut().then(function() {
     // Sign-out successful.
     console.log("logout");
   }).catch(function(error) {
     // An error happened.
   });
  }

  function sendMessage() {
   var messageContent = document.getElementById('message').value;
   var user = userShow();

   if (user) {
    var data = {
     name:user.displayName,
     message:messageContent
    };
    // console.log(message);
    var firebaseRef = firebase.database().ref('messages');
    firebaseRef.push(data);
    document.getElementById('message').value = '';
   }
  }

  function loadMessage() {
   var dataMessages = firebase.database().ref('messages').limitToLast(5);
   dataMessages.on('value', function(messages) {
      var messagesList = document.getElementById('messages-list');
      var boxChat = document.getElementById('box-chat');

       if (messages.val()) {
     messagesList.parentNode.removeChild(messagesList);
     boxChat.innerHTML = boxChat.innerHTML + '<div id="messages-list"></div>';
     var messagesList = document.getElementById('messages-list');
       for (var message in messages.val()) {
      messagesList.innerHTML = messagesList.innerHTML + "<p>" + messages.val()[message].name + " || " + messages.val()[message].message + "</p>"; 
     }
       } else {
        console.log('data not found');
       }
   });
  }
 </script>
</head>
<body>
 <button type="button" onclick="login()">Login</button> || <button type="button" onclick="userShow()">User</button> || <button type="button" onclick="logout()">Logout</button>
 <br><br>
 <div id="box-chat">
  <div id="messages-list"></div>
 </div>
 <textarea placeholder="Write the message" id="message"></textarea>
 <button type="submit" onclick="sendMessage()">Send</button>
</body>
</html>

Jika sudah, masuk ke path folder firebase tadi dengan menggunakan PowerShell kemudian install firebase-tools ketikan code berikut,


Setelah itu login,


Initiate firebase dan user --add


Oke semua sudah di set sekarang tinggal menghubungkan engine dengan firebasenya saja, buka kembali firebase-console tadi,


Dan klik "Tambahkan Firebase ke apliksi web anda" salin codenya dan letakkan code firebase ke engine firebase yang sudah saya siapkan tempatnya sehingga akan terlihat seperti gambar dibawah,


Buka halaman engine firebase pada browser sehingga akan tampak seperti pada gambar dibawah ini,


Klik "Login", menggunakan user gmail, karna sudah kita aktifkan authentification untuk gmail, jika berhasil login, coba refresh halaman sehingga akan tampak seperti pada gambar dibawah,


Jika kita inspect halaman saat kita klik "User" maka akan tampak username gmail yang kita gunakan untuk login seperti gambar dibawah,


===DONE!===

Engine Ubuntu - Clone and pull github repository




Hello codedocters,pada tutorial kali ini codedoct akan membagikan sebuah engine bagi programmer sekalian yang sangat suka dengan automatitaion.

Tutorial kali ini codedoct akan membuat dua buah engine untuk mempermudah bagi codedocters sekalian dalam maintenance github repository,

Oke langsung saja kita mulai experimentnya,
Pada engine yang pertama kita akan membuat sebuah sistem yang akan mengclone github repo kita secara otomatis, berikut code enginenya,

#!/bin/bash

GREEN='\033[0;32m'
BLUE='\033[0;34m'
NC='\033[0m'
SCRIPTPATH=$(pwd -P)
REPOS=blog-ruby
GITHUB=https://github.com/codedoct

printf "${BLUE}"
echo "------------------------------"
echo "----begin clone repository----"
echo "------------------------------"
printf "${NC}\n"

for i in "${REPOS}"
do
   :
    printf "${GREEN}[Application]${NC} Get $i code\n"

    create_dir "${SCRIPTPATH}/$i"

    git clone ${GITHUB}/$i.git ${SCRIPTPATH}/$i 1>&2
    echo ""   
done

Engine yang kedua ini dugunakan untuk melakukan update atau git pull origin master repository github secara otomatis,

for i in $( ls -d /path/to/folder/contain/all-repo/* ); do
  echo $i $(basename $i)
  cd $i && git pull origin master --tags
done

sehingga hasilnya akan tampak seperti ini,
- clone

- pull github repository


===DONE!===

Engine PHP - Upload and download file


Hello codedoctors,

Kali ini codedoct akan sharing ilmu untuk membuat sebuah engine yang dapat meng-upload dan men-download suatu file. engine ini akan kita buat menggunakan bahasa PHP native.

Oke langsung saja kita mulai tutorialnya,

Pertama, buat folder projectnya terlebih dahulu dalam hal ini codedoct akan memberi nama file test-upload-download-file dan buat folder baru juga didalammnya dengan nama file sehingga struktur foldernya akan tampak seperti ini,


Kemudian, buat tabel pada database dengan struktur seperti ini,


Setelah itu, buat file baru dengan nama index.php seperti struktur diatas, dan isikan code berikut,
<?php
 include_once('uploadController.php');
?>
<head>
 <title>Hello | Budy</title>
</head>
<body>
 <div class="show-file">
  <ul>
   <?php
     $sql="SELECT * FROM upload_and_download_file";
     $hsl=mysql_query($sql,$db);
     $no=0;
     while(list($id,$name,$created_at)=mysql_fetch_array($hsl)){
       $no++;?>
      <li><?=$no?></li>
        <ul>
       <li><?=$name?></li>
       <li><?=$created_at?></li>
       <li><a href="downloadController.php?file_name=<?=$name?>">Download</a></li>
      </ul>
    <?php }
   ?>
  </ul>
 </div>
 <div class="upload-file">
  <form action="uploadController.php" method="post" enctype="multipart/form-data">
   <input type="file" name="uploadFile">
   <input type="submit" value="Upload" name="upload">
  </form>
 </div>
</body>

Selanjutnya, buat file baru dengan nama connection.php dan isikan code berikut,
<?php
 $servername = "localhost";
 $username = "root";
 $password = "root";
 $dbname = "test";

 $db=mysql_connect($servername,$username,$password);
 mysql_select_db($dbname,$db);
?>

Kemudian, buat file baru dengan nama model.php dan isikan code berikut,
<?php
 class FileController 
 {
  public function saveFile($name)
  {
   include 'connection.php';
   $sql="INSERT INTO upload_and_download_file (name,created_at) VALUES ";
      $sql.="('$name',NOW())";
    $save = mysql_query($sql,$db);

   if ($save) {
       return true;
   } else {
       echo "Error";
   } 
  }
 }
?>

Terakhir buat file baru dengan nama uploadController.php dan downloadController.php dan isikan code berikut,
uploadController.php
<?php
 include_once('connection.php');
 include_once('model.php');

 if (isset($_POST['upload'])) {
  $errors  = array();
  $file_name  = $_FILES['uploadFile']['name'];
  $file_size  = $_FILES['uploadFile']['size'];
  $file_tmp  = $_FILES['uploadFile']['tmp_name'];
  $file_ext = strtolower(end(explode('.',$_FILES['uploadFile']['name'])));

  $extensions = array("txt");

  if(in_array($file_ext,$extensions)===false){
   $errors[]="extension not allowed, please choose a TXT file.";
  }

  if($file_size > 1024000){
   $errors[]='File size must be excately 1 MB';
  }

  if(empty($errors)==true){
   //save file to folder file
   $filename = strtotime('now').'_'.$file_name;
   move_uploaded_file($file_tmp,"file/".$filename);

   //save file to database
   $model = new FileController;
   $save_file = $model->saveFile($filename);
   if ($save_file) {
    //back to project
    $path_project = "http://localhost/test/test-upload-download-file/";
    header("Location: $path_project");
   }
  }else{
   print_r($errors);
   ?><br><a href="/test/test-upload-download-file">Back</a><?php
  }
 }
?>

downloadController.php
<?php
    $file_name = $_GET['file_name'];
    $file = "file/".$file_name;

    if(!file_exists($file)) die("I'm sorry, the file doesn't seem to exist.");

    header("Pragma: public", true);
    header("Expires: 0"); // set expiration time
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
    header("Content-Type: application/force-download");
    header("Content-Type: application/octet-stream");
    header("Content-Type: application/download");
    header("Content-Disposition: attachment; filename=".basename($file));
    header("Content-Transfer-Encoding: binary");
    header("Content-Length: ".filesize($file));
    die(file_get_contents($file));
?>

Sehingga hasilnya akan tampak seperti gambar dibawah ini


Untuk enginenya bisa didownload disini,

===DONE!===

Engine PHP - Upload image beauty code


Pada tutorial sebalumnya kita sudah membuat sebuah engine upload image dengan menggunakan bahasa native PHP tanpa menggunakan class dan function method. Tutorial kali ini kita akan membuat engine yang sama tapi dengan code yang lebih rapi dan terstruktur.

Oke kita mulai saja tutorialnya,
Pertama, buat folder projectnya terlebih dahulu beri nama misal class_method, kemudian buat file index.php pada folder project tersebut dan isikan code berikut,
<form action="save.php" method="post" enctype="multipart/form-data">
    <table width="100%">
        <tr>
            <td><input type="file" name="image"/></td>
        </tr>
        <tr>
            <td>Note: Supported image format: .jpeg, .jpg, .png</td>
        </tr>
    </table>
    <br>
    <input type="submit" value="Save"/>
</form>

Selanjutnya buat file baru dengan nama save.php dan isikan code berikut,
<?php
 Class SaveImage
 {
  public function extensions()
  {
   $extensions = array("jpeg","jpg","png");
   return $extensions;
  }

  public function save()
  {
   $file_name  = $_FILES['image']['name'];
   $file_size  = $_FILES['image']['size'];
   $file_tmp  = $_FILES['image']['tmp_name'];
   $file_ext = strtolower(end(explode('.',$_FILES['image']['name'])));
   $filename  = strtotime('now').'_'.$file_name;
   $error   = '';
   
   if(in_array($file_ext, $this->extensions())=== false){
    $error="extension not allowed, please choose a JPEG or PNG file.";
   }

   if($file_size > 1024000){
    if ($error) {
     $error=$error.' and File size must be excately 1 MB';
    } else {
     $error='File size must be excately 1 MB';
    }
   }

   if(empty($error)==true){
    move_uploaded_file($file_tmp,"images/".$filename);
    $response['status']  = 'Success';
    $response['results'] = $filename;
    return $response;
   }else{
    $response['status']  = 'Error';
    $response['results'] = $error;
    return $response;
   }
  }
 }

 if(isset($_FILES['image'])){
  $save_image = new SaveImage;
  $save = $save_image->save();
  foreach ($save as $key => $value) {
   echo $key.': '.$value.'<br>';
  }
  ?><br><a href="/test/test-upload_image">Back</a><?php
    }
?>

Terakhir buat folder tempat menyimpan image, beri nama folder dengan nama images, sehingga struktur file dan folder akan tampak seperti ini,


Dan tampilan urlnya saat kita akses akan tampak seperti ini,


Terlihat lebih rapi kan dibanding yang native? inilah seni dalam coding..

===DONE!===

Engine PHP - Upload image native code


Kembali lagi membuat engine PHP,

Pada tutorial kali ini kita akan membuat sebuah engine yang digunakan untuk upload image ke sebuah folder menggunakan native codenya php yang bisa dibilang code dasar.

Oke, langsung saja kita mulai tutorialnya,
Pertama, buat folder projectnya pada folder yang bisa diakses url localhost, dalam hal ini codedoct menggunakan OS windows dan server localhost XAMPP, misal kita beri nama project tersebut dengan nama test-upload_image.

Pada folder project tersebut kita buat file baru bernama index.php dan isikan code berikut,
<form action="save.php" method="post" enctype="multipart/form-data">
    <table width="100%">
        <tr>
            <td><input type="file" name="image"/></td>
        </tr>
        <tr>
            <td>Note: Supported image format: .jpeg, .jpg, .png</td>
        </tr>
    </table>
    <br>
    <input type="submit" value="Save"/>
</form>

Selanjutnya pada folder project tersebut kita buat juga file baru bernama save.php dan isikan code berikut,
<?php
 if(isset($_FILES['image'])){
  $errors  = array();
  $file_name  = $_FILES['image']['name'];
  $file_size  = $_FILES['image']['size'];
  $file_tmp  = $_FILES['image']['tmp_name'];
  $file_ext = strtolower(end(explode('.',$_FILES['image']['name'])));

  $extensions = array("jpeg","jpg","png");

  if(in_array($file_ext,$extensions)=== false){
   $errors[]="extension not allowed, please choose a JPEG or PNG file.";
  }

  if($file_size > 1024000){
   $errors[]='File size must be excately 1 MB';
  }

  if(empty($errors)==true){
   $filename = strtotime('now').'_'.$file_name;
   move_uploaded_file($file_tmp,"images/".$filename);
   echo "Success";
   ?><br><a href="/test/test-upload_image">Back</a><?php
  }else{
   print_r($errors);
   ?><br><a href="/test/test-upload_image">Back</a><?php
  }
    }
?>

Terakhir buat folder baru tempat meletakkan image yang diupload beri nama folder dengan nama images, sehingga struktur filenya akan tampak seperti ini,


Dan tampilan urlnya saat kita akses akan tampak seperti ini,


Untuk code yang versi rapinya menggunakan class dan function method lihat disini.

===DONE!===

Engine PHP - Login instagram api


Hallo semuanya,

Tutorial kali ini kita akan mempraktekan bagaimana cara membuat login menggunakan api instagram. Engine yang akan kita buat ini akan menggunakan bahasa PHP, os windows dengan menggunakan library guzzlehttp.

Oke langsung saja kita mulai prakteknya,

Pertama, buat login instagram menggunakan akun anda terlebih dahulu, kemudian buka url https://www.instagram.com/developer/ sehingga akan muncul tampilan seperti ini,


Silahkan isi sesuai dengan keinginan anda,

Setelah sign up maka instagram pun sudah langsung memberikan hak akses kepada kita untuk menggunakan api-nya tapi hanya sebatas sandbox. Tampilannya akan tampak seperti ini,


Pada gambar diatas klik button manage dan anda akan melihat kode client id dan client secret yang akan kita gunakan untuk membuat function yang dapat membaca data-data api instagram.


Pada gambar diatas klik tab security untuk menambahkan url file tempat meletakkan function yang dapat membaca data-data api instagram tadi.

Sedangkan tab sandbox berisi user instagram mana saja yang dapat digunakan untuk percobaan login api instagram tersebut,


Tab permission digunakan untuk mengirimkan submission kepada pihak instagram agar kita sebagai developer dapat menggunakan api tersebut secara global, bukan secara sanbox yang sangat terbatas penggunaannya.


Oke sekarang buat folder project apinya, dalam hal ini url project saya akan saya tempatkan pada "http://localhost/test/test-instagram" kemudian masuk pada folder test-instagram dan buat file bernama index.php, kemudian isikan code berikut,
<?php
require 'vendor/autoload.php';
$code  = $_GET["code"] ? $_GET["code"] : null;
$client = new \GuzzleHttp\Client(['verify' => false]);

try {
    $res = $client->request("POST", "https://api.instagram.com/oauth/access_token", [
        'form_params' => [
            'client_id' => '<isi dengan kode client id anda>',
            'client_secret' => '<isi dengan kode client secret anda>',
            'grant_type' => 'authorization_code',
            'redirect_uri' => 'http://localhost/test/test-instagram', //isi dengan url project anda
            'code' => $code
        ]
    ]);
} catch (ClientException $e) {
    customException([
        "status" => $this::ERROR_LOGIN_INSTAGRAM,
        "messages" => $e->getMessage(),
    ]);
}

/** @var ResponseInterface $res */
$resultArray = json_decode($res->getBody()->getContents());

$userInstagram = $resultArray;
var_dump($userInstagram);

Jangan lupa kita menggunakan library guzzlehttp sehingga kita harus menginstallnya terlebih dahulu,
caranya?

Pertama install dulu composer pada komputer, download saja disini,

Kemudian download file composer.phar dan masukkan ke dalam folder test-instagram tadi, filenya download saja disini,

Selanjutnya, install guzzlehttp menggunakan composer dengan cara buka command prompt dan ketikkan syntax berikut, "php composer.phar require guzzlehttp/guzzle:~6.0". Tampilannya akan tampak seperti ini,


Sehingga struktur folder project engine yang kita buat akan berubah menjadi seperti ini,


Terakhir test engine dengan cara browse url ini pada browser "https://www.instagram.com/oauth/authorize/?client_id=<isi dengan kode client id anda>&redirect_uri=http://localhost/test/test-instagram&response_type=code"

Dan taraaaa, codedoctpun berhasil mendapatkan access token-nya! hasilnya akan tampak seperti ini,


===DONE!===

WHY?

1. Could not open input file: composer.phar?


itu berarti file composer.phar tidak ada pada folder project anda, silahkan download dulu seperti instruksi diatas.

2. Jika ada masalah lain silahkan contact us atau comment saja.