Twitch Donate Bildirisi Gönderme,Streamlabs API ve PHP

Twitch Donate bildirisini,streamlabs API kullanarak kendi PHP sitemize nasıl entegre edeceğimizi bu yazıda öğreneceğiz.

Öncelikle https://streamlabs.com adresinden oturum açıyoruz.

api-settings adresinden Bir Uygulama Oluşturuyoruz.

Uygulama adı, uygulama açıklaması, beyaz liste kullanıcıları telefon eposta ve yönlendirme urlsini dolduruyoruz.

Beyaz liste kullanıcıları geliştirme ortamında uygulamayı kullanacak twitch kullanıcı isimlerini içerir, en fazla 10 kullanıcı ekleyebiliriz.

Streamlabs API Key Oluşturma

Uygulamada Müşteri Kimliği(client_id) ve Müşteri Sırrı(client_secret) ve callback_url alanlarını kullanacağız

PHP tarafında APimizi hazırlayalım

HTTP dönüşlerini HTTP classıyla yakalayacağız ( streamlabs.php içerisinde)

class HTTP{

    private $statusCode,$body;
    public function statusCode(){
        return $this->statusCode;
    }
    public function body(){
        return $this->body;
    }
    public function set_statusCode($statusCode){
        $this->statusCode = $statusCode;
    }
    public function set_body($body){
        $this->body = $body;
    }

}

İsteklerimizi Request Sınıfında yapacağız ( streamlabs.php içerisinde)

class Request{
    public function get($url){
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36 OPR/71.0.3770.456');
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
        curl_setopt($ch, CURLOPT_TIMEOUT, 5);
        curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,1);
  
        curl_setopt($ch,CURLOPT_AUTOREFERER,1);
 
        curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
        
        $data = curl_exec($ch);
        $httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);

        $http = new Http;
        $http->set_body($data);
        $http->set_statusCode($httpcode);
        curl_close($ch);
        return $http;
    }

    public function post($url,$data){
        $postData = '';
        foreach($data as $k => $v) { 
            $postData .= $k . '='.$v.'&'; 
        } 
        rtrim($postData, '&'); 
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL,$url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch,CURLOPT_POST,count($postData));
        curl_setopt($ch,CURLOPT_POSTFIELDS,$postData);
       
        curl_setopt($ch,CURLOPT_AUTOREFERER,1);
        $data = curl_exec($ch);
        $httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        curl_close($ch);
        $http = new Http;
        $http->set_body($data);
        $http->set_statusCode($httpcode);

        return $http;
    }

}
cURL kütüphanesinin kullanımı için bu yazıyı inceleyebilirsiniz.

Ve Streamlabs sınıfını Request’den türeteceğiz. ( streamlabs.php içerisinde)

class StreamLabs extends Request{

    private $api = "https://streamlabs.com/api/v1.0";

    private $client_id,$secret_id,$callback_url;

    public function __construct($data){
        $this->client_id = $data['client_id'];
        $this->secret_id = $data['secret_id'];
        $this->callback_url = $data['callback_url'];
    }

    public function authorize($scope){
        
        $url = $this->api . '/authorize?';
        $params = [
            "response_type" => "code",
            "client_id" => $this->client_id,
            "scope" => $scope,
            "redirect_uri" => $this->callback_url,
        ];
        return $url . str_replace('%2B','+',http_build_query($params, '', '&'));
    }
    public function user($access_token){
        $url = $this->api . '/user?access_token='.$access_token;
        
        $response = $this->get($url);
        
        return $this->response($response);
    }
    public function donations($access_token){
        $url = $this->api . '/donations?access_token='.$access_token;
        $response = $this->get($url);
       return $this->response($response);
    }
    public function donate($data){
        $url = $this->api . '/donations';
        $post = [
            "name" => $data['name'],
            "message" => $data['message'],
            "identifier" => $data['identifier'],
            "amount" => $data['amount'],
            "currency" => isset($data['currency']) ? $data['currency'] : 'TRY',
            "access_token" => $data['access_token']
        ];
        $response = $this->post($url,$post);

        return $this->response($response);
    }
    public function token($code = '', $grant_type = 'authorization_code'){
        $url = $this->api . '/token';
        $data = [
            'grant_type'    => $grant_type,
            'client_id'     => $this->client_id,
            'client_secret' => $this->secret_id,
            'redirect_uri'  => $this->callback_url,
            'code'          => $code
        ];
        

        $response = $this->post($url,$data);

        return $this->response($response);
        
    }
    private function response($response){
        if($response->statusCode() == 200):
            return json_decode($response->body());
        endif;
        return null;
    }


}

Servislerimiz hazır olduğuna göre “Streamlabs” sınıfını initialize edip, gerekli parametrelerle kullanmak kaldı.

Streamlabs aktivitelerini görüntüleyebileceğimiz index.php sayfasının görünümü:

“Streamlabs’ bağlan” bir hyperlinktir (html a:href) gideceği adresi Streamlabs sınıfını initialize edit authorize methodundan gelen adrese eşleyeceğiz.

Donateleri okuyabilmek ve yazabilmek için scope ‘u “donations.read+donations.create” olarak tanımladık.

client_id,client_secret ve callback url, streamlabs apisini oluşturduğumuz değerlerle aynı olmalıdır.

require "streamlabs.php";


$streamlabs = new StreamLabs(array(
        "client_id" => "CLIENT_ID_BURAYA_GELECEKTIR",
        "secret_id" => "CLIENT_SECRET_BURAYA_GELECEKTIR",
        "callback_url" => "https://education.masterdark.net/callback.php"
    ));

$link = $streamlabs->authorize("donations.read+donations.create");

?>

Aşağıdaki gibi çıktı oluşturacaktır

https://streamlabs.com/api/v1.0/authorize?response_type=code&client_id=SMqJaq38C2tCJZ8cnFRqwyJEPlpFo2PMbVqT7XCM&scope=donations.read+donations.create&redirect_uri=https%3A%2F%2Feducation.masterdark.net%2Fcallback.php

Bu adresin yönlendireceği kısımda onay verilmesi gerekir.

Approve ile uygulamaya yetki vermemiz gerekir.

Onay verildiğinde yönlendireceği sayfa bizim “callback.php” olacaktır.

<?php

// eğer code yoksa sayfayı durdur.
if(!isset($_GET['code']))
    die;
    

$code = $_GET['code'];

require "streamlabs.php";

$streamlabs = new StreamLabs(array(
        "client_id" => "CLIENT_ID_BURAYA_GELECEKTIR",
        "secret_id" => "CLIENT_SECRET_BURAYA_GELECEKTIR",
        "callback_url" => "https://education.masterdark.net/callback.php"
    ));

$data = $streamlabs->token($code);

if($data):

    
    // kullanici bilgilerini getir
    $user = $streamlabs->user($data->access_token);
    
    // kullanici bilgilerini kaydet
    session_start();
    
    $twitch_name = $user->twitch->display_name;
    
    $save = [
        "authorize" => $data,
        "user" => $user,
        "twich" => $twitch_name
    ];
    
    $_SESSION['streamlabs'][$twitch_name] = $save;


    print 'Bağlantı başarılı, yönlendiriliyor..';
    
    header("Refresh:3; url=donate_gonder.php");

else:
    
    print 'bağlantı işlemi tamamlanamadı.';

endif;

?>

Not: Bu örnek bir proje olduğundan bilgiler geçici olarak session’a tanımlanmış, product ortamında veritabanına yazılması gerekir.

Gelen get code parametresini streamlabs sınıfının token methoduna gönderiyoruz. Gelen değer içerisindeki access_token ‘ ı kullanıcının profil bilgilerine erişmek için user methoduna gönderiyoruz. Kullanıcı bilgilerini ve authorize işlemlerini daha sonra kullanmak için sessiona atıyoruz.

Donate Gönderme

Kullanının authorize işlemlerini tamamladığını ve session’a kaydettiğimiz verileri şimdi streamlabsın donate methodunda işleyelim.

Form POST ile gelen bilgileri streamlabs sınıfının donate methoduna göndereceğiz.

donate_gonder.php

session_start();

require "streamlabs.php";

$streamlabs = new StreamLabs(array(
        "client_id" => "CLIENT_ID_BURAYA_GELECEKTIR",
        "secret_id" => "CLIENT_SECRET_BURAYA_GELECEKTIR",
        "callback_url" => "https://education.masterdark.net/callback.php"
    ));



if($_SERVER["REQUEST_METHOD"] == "POST"):
    
    $donate_username = $_POST['donate_username'];
    $username = $_POST['username'];
    $amount = $_POST['amount'];
    $message = $_POST['message'];
    
    $donate = [
        'name' => $username,
        'identifier' => $username,
        'message' => $message,
        'amount' => $amount,
        'currency' =>'TRY' ,
        'access_token' => $_SESSION['streamlabs'][$donate_username]['authorize']->access_token
    ];
    
    $result = $streamlabs->donate($donate);
    
    
    if($result):
        $bagis_gonderildi = true;
    else:
        $bagis_gonderildi = false;
    endif;
        
endif;


Donate Listeleme

Select ile seçilen kullanıcın geçmiş donate bilgilerini sorgulayabiliriz.

donate_listele.php


session_start();

require "streamlabs.php";

$streamlabs = new StreamLabs(array(
        "client_id" => "CLIENT_ID_BURAYA_GELECEKTIR",
        "secret_id" => "CLIENT_SECRET_BURAYA_GELECEKTIR",
        "callback_url" => "https://education.masterdark.net/callback.php"
    ));


if($_SERVER["REQUEST_METHOD"] == "POST"):
    
    $username = $_POST['donate_username'];
    
    $list = $streamlabs->donations($_SESSION['streamlabs'][$username]['authorize']->access_token);
 
endif;

Bu yazımızda PHP ile streamlabs API kullanarak nasıl donate gönderebileceğimizi öğrendik, projenin detaylarına github adresinden ulaşabilirsiniz.

Daha fazla bilgiye https://dev.streamlabs.com/docs adresinden ulaşabilirsiniz. Bir sonraki yazımızda görüşmek üzere, yorum yapmayı unutmayın.

2 Comments

Add a Comment

E-posta hesabınız yayımlanmayacak.