Merhaba,
Bu konumuzda sizlere kendi özel sistemlerine API entegre etmek isteyen kişiler için SMM Panel API yazmanın temel kodlarını paylaşacağız.
PHP ile bir örnek kod yapısı hazırladık, isteğe bağlı olarak (Sipariş sorgulama kısmı için veritabanı oluşturmanız zorunludur) veritabanına bağlayabilirsiniz.
Hazırladığımız kodlar bizim global doküman olarak kabul ettiğimiz ve sektörün %90'ı tarafından kullanılan perfectpanel apilerine göredir.
Örnek kodlarda direkt echo ile yazdırdığımız kısıları array() içerisine alarak en alt kısımda json_encode yaparak ekrana yazdırmanız daha kullanışlı olacaktır.
1- API Key ve method detaylarını belirteceğimiz başlangıç kısmı.
<?php
## API keyimizi bu kısma yazıyoruz, isterseniz rastgele bir şifre de yazabilirsiniz ##
$api_key = "c41db44ed743673d3a839c8bbcc0d400";
## Bu kısım isteğe bağlıdır fakat her gönderim türüne uyumlu olması için biz POST ve GET aynı anda çalışabilecek şekilde yapıyoruz ##
## isset() yerine !empty() kullanmamızın nedeni bazı sunucularda POST olmamasına rağmen isset fonksiyonunun POST varmış gibi algılaması. ##
if( !empty($_POST) ):
$data = $_POST;
else:
$data = $_GET;
endif;2- Gelmesi zorunlu olan verileri belirtelim ve if ile kontrol edelim.
<?php
$key = $data["key"];
$action = $data["action"];
$service = $data["service"];
$link = $data["link"];
$quantity = $data["quantity"];
$order = $data["order"];
## API Keyimiz doğru gönderildi mi kontrol ediyoruz ##
if( $key != $api_key ):
echo 'API key hatalı';
## Yapılacak işlem belirtildi mi kontrol ediyoruz ##
elseif( !$action ):
echo 'İşlem belirtilmedi';
## Sipariş oluşturulacak ise bağlantı, servis id ve miktar gönderildi mi kontrol ediyoruz ##
elseif( $action == "add" && ( !$link || !$service || !$quantity ) ):
echo 'Lütfen boş alan bırakmayınız';
## Sipariş sorgulanacak ise sipariş numarası gönderildi mi kontrol ediyoruz ##
elseif( $action == "status" && !$order ):
echo 'Lütfen sipariş numarası belirtiniz';
endif;3- Action'dan gelen verilerin işlenmesi ve çıktı verilmesi
<?php
## Servisleri ve kategorileri listeliyoruz ##
if( $action == "services" ):
## Bu kısmı ister veritabanınıza bağlarsınız isterseniz de kodlardan manuel yazarsınız, eğer özel sisteminiz ve sadece 1 servis için kullanacaksanız veritabanı kullanmanıza gerek bulunmamakta ##
echo ' [
{
"service": 1,
"name": "Followers",
"type": "Default",
"category": "First Category",
"rate": "0.90",
"min": "50",
"max": "10000"
},
{
"service": 2,
"name": "Likes",
"type": "Default",
"category": "Second Category",
"rate": "8",
"min": "10",
"max": "1500"
}
]';
## Bakiye sorgulama ##
elseif( $action == "balance" ):
## Users tablomuzdan gelen API KEY ile SELECT yapıyor ve bakiyeyi aşağıdaki formatta ekrana yazdırıyoruz ##
echo '{
"balance": "100.84292",
"currency": "TRY"
}';
## Sipariş sorgulama ##
elseif( $action == "status" ):
## Siparişin sorgulanacağı bir veritabanına ihtiyacınız var o nedenle bu kısımda $data["order"]'dan gelen ID ile orders tablonuzdan SELECT yapınız ##
## Vereceğiniz örnek çıktı aşağıdadır ##
echo '{
"charge": "0.27819",
"start_count": "3572",
"status": "Partial",
"remains": "157",
"currency": "TRY"
} ';
## Yeni sipariş oluşturma ##
elseif( $action == "add" ):
## Bu kısımda siparişi veritabanına kayıt ettikten sonra sipariş numarasını aşağıdaki şekilde çıktı olarak vermeniz gerekmektedir ##
echo '{ "order": 23501 }';
## Sipariş Miktarı ##
$data["quantity"];
## Servis ID ##
$data["service"];
# Sipariş verilen bağlantı ##
$data["link"];
else:
## Mevcut Aciton'ların dışında gelen isteklerin düşeceği kısım ##
echo 'Geçersiz istek';
endif;Sipariş durumu çıktısında status olarak çıktı vereceğiniz durum kodları ve Türkçeleri;
- Sipariş Alındı -> pending
- Yükleniyor -> inprogress
- Tamamlandı -> completed
- Kısmi Tamamlandı -> partial
- Gönderim Sırasında -> processing
- İptal Edildi -> canceled
Yukarıdaki kodlar ile uyumlu bir şekilde veri gönderme için ise aşağıdaki
hazır olarak paylaşılan PHP kodlarını kullanabilirsiniz;
<?php
class Api
{
public $api_url = 'https://smm.com/api/v2'; // API URL
public $api_key = ''; // Your API key
public function order($data) { // add order
$post = array_merge(array('key' => $this->api_key, 'action' => 'add'), $data);
return json_decode($this->connect($post));
}
public function status($order_id) { // get order status
return json_decode($this->connect(array(
'key' => $this->api_key,
'action' => 'status',
'order' => $order_id
)));
}
public function services() { // get services
return json_decode($this->connect(array(
'key' => $this->api_key,
'action' => 'services',
)));
}
public function balance() { // get balance
return json_decode($this->connect(array(
'key' => $this->api_key,
'action' => 'balance',
)));
}
private function connect($post) {
$_post = Array();
if (is_array($post)) {
foreach ($post as $name => $value) {
$_post[] = $name.'='.urlencode($value);
}
}
$ch = curl_init($this->api_url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
if (is_array($post)) {
curl_setopt($ch, CURLOPT_POSTFIELDS, join('&', $_post));
}
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)');
$result = curl_exec($ch);
if (curl_errno($ch) != 0 && empty($result)) {
$result = false;
}
curl_close($ch);
return $result;
}
}
// Examples
$api = new Api();
$services = $api->services(); # return all services
$balance = $api->balance(); # return user balance
// add order
$order = $api->order(array('service' => 1, 'link' => 'http://example.com/test', 'quantity' => 100)); # Default
$status = $api->status($order->order); # return status, charge, remains, start count, currency