Giriş Yap

Kayıt Ol

SMS API Entegrasyonu: PHP İle SMS Gönderme (Kopyala-Çalıştır Kod)

Buradasınız: Anasayfa / BLOG
29 Ekim 2026, Perşembe
SMS API Entegrasyonu: PHP ile SMS Gönderme (Kopyala-Çalıştır Kod)
Yazılımınıza SMS gönderimi eklemek için hazır PHP örnekleri, dönüş kodları ve entegrasyon ipuçları.
SMS API Entegrasyonu: PHP ile SMS Gönderme (Kopyala-Çalıştır Kod)

Sipariş onayı, şifre sıfırlama kodu, randevu hatırlatması… Bunları panelden tek tek göndermek yerine kendi yazılımınızın otomatik göndermesini istiyorsanız ihtiyacınız olan şey bir SMS API. Bu yazıda Bizim SMS HTTP/XML API'si ile PHP üzerinden SMS gönderme, bakiye sorgulama ve iletim raporu almayı kopyalayıp çalıştırabileceğiniz örneklerle anlatıyoruz.

SMS API nasıl çalışır?

Yazılımınız, SMS sunucusuna bir HTTP isteği gönderir. İstek içinde kullanıcı adınız, API anahtarınız, başlığınız, numara(lar) ve mesaj metni bulunur. Sunucu isteği kontrol eder, mesajı operatörlere iletir ve size bir dönüş kodu ile gönderim kimliği (dlrId) döner. Bu kimlikle daha sonra mesajın iletilip iletilmediğini sorgularsınız.

SMS API çalışma şeması: yazılım, API, operatör, telefon
İstek, iletim ve dlrId ile rapor sorgulama akışı

Başlamadan önce

  • Kullanıcı adı: Panele giriş yaptığınız kullanıcı adı.
  • Şifre alanı: Web şifreniz değil, panelde API Hesabı bölümündeki 32 karakterlik API SECRET değeri.
  • Onaylı başlık ve yeterli kredi olmalı.
  • Geliştirme sırasında kullanıcı adı ve şifresi test olan sanal hesabı kullanabilirsiniz; bu hesapla gerçek gönderim yapılmaz.

API uç noktaları (endpoint)

Tüm istekler http://sms.bizimsms.mobi:8080 adresine yapılır.

İşlemMetotAdres
SMS gönder (XML, toplu)POST/api/smspost/v1
SMS gönder (tek numara)GET/api/smsget/v1
Kredi sorgulaGET/api/credit/v1
Başlıkları listeleGET/api/originator/v1
İletim raporuGET/api/dlr/v1
Kara listeye ekleGET/api/blacklistadd/V1

1. Tek numaraya hızlı gönderim (GET)

En basit yöntem. Tek numaraya tek mesaj gönderir; mesaj metni URL kodlanmalıdır.

<?php
$params = [
    'username' => 'KULLANICI_ADINIZ',
    'password' => 'API_SECRET_32_KARAKTER',
    'header'   => 'BASLIGINIZ',
    'gsm'      => '905321234567',
    'message'  => 'Siparişiniz onaylandı. Teşekkür ederiz.',
];

$url = 'http://sms.bizimsms.mobi:8080/api/smsget/v1?' . http_build_query($params);
$yanit = trim(file_get_contents($url));

echo $yanit; // Başarılıysa "00" ve ardından dlrId döner

2. Birden fazla numaraya XML ile gönderim (POST)

Aynı mesajı çok sayıda numaraya göndermek, ileri tarihe zamanlamak veya geçerlilik süresi belirlemek için XML POST kullanın. Aşağıdaki fonksiyon doğrudan projenize eklenebilir:

<?php
function bizimSmsGonder(array $numaralar, string $mesaj, ?string $tarih = null): array
{
    $kullanici = 'KULLANICI_ADINIZ';
    $secret    = 'API_SECRET_32_KARAKTER';
    $baslik    = 'BASLIGINIZ';

    $noXml = '';
    foreach ($numaralar as $no) {
        $no = preg_replace('/\D/', '', $no);          // sadece rakam
        $noXml .= '<no>' . $no . '</no>';
    }

    $xml  = '<?xml version="1.0" encoding="UTF-8"?>';
    $xml .= '<sms>';
    $xml .= '<username>' . htmlspecialchars($kullanici) . '</username>';
    $xml .= '<password>' . htmlspecialchars($secret) . '</password>';
    $xml .= '<header>' . htmlspecialchars($baslik) . '</header>';
    $xml .= '<validity>2880</validity>';                       // dakika (1-2880)
    if ($tarih) {
        $xml .= '<sendDateTime>' . $tarih . '</sendDateTime>';  // ör. 2026.11.15.10.30.0
    }
    $xml .= '<message><gsm>' . $noXml . '</gsm>';
    $xml .= '<msg><![CDATA[' . $mesaj . ']]></msg></message>';
    $xml .= '</sms>';

    $ch = curl_init('http://sms.bizimsms.mobi:8080/api/smspost/v1');
    curl_setopt_array($ch, [
        CURLOPT_POST           => true,
        CURLOPT_POSTFIELDS     => $xml,
        CURLOPT_HTTPHEADER     => ['Content-Type: text/xml; charset=UTF-8'],
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_TIMEOUT        => 30,
    ]);
    $yanit = trim((string) curl_exec($ch));
    curl_close($ch);

    // Yanıt: "00 <dlrId>" (başarılı) veya hata kodu
    $parca = preg_split('/\s+/', $yanit, 2);
    return [
        'kod'   => $parca[0] ?? '',
        'dlrId' => ($parca[0] ?? '') === '00' ? ($parca[1] ?? '') : null,
        'ham'   => $yanit,
    ];
}

// Kullanım
$sonuc = bizimSmsGonder(['905321234567', '05441234567'], 'Randevunuz yarın 14:00. Değişiklik için 0212 000 00 00');
print_r($sonuc);

Not: Numaralar 10, 11 veya 12 hane olarak gönderilebilir; sistem 12 haneye (90 ile başlayan) tamamlar. Kullanmadığınız opsiyonel etiketleri (ör. sendDateTime) XML'e hiç eklemeyin; boş etiket 89 hatasına yol açar.

Her numaraya farklı mesaj (N-N gönderim)

Kişiye özel mesajlarda (ör. "Sayın Ahmet Bey, borcunuz 450 TL") message yerine messages bloğu kullanılır; her alıcı için bir mb etiketi içinde no ve msg yer alır.

3. Kredi (bakiye) sorgulama

<?php
$q = http_build_query(['username' => 'KULLANICI_ADINIZ', 'password' => 'API_SECRET_32_KARAKTER']);
echo file_get_contents('http://sms.bizimsms.mobi:8080/api/credit/v1?' . $q);
// "00 12500" => 12.500 kredi

4. İletim raporu (DLR) sorgulama

Gönderimden dönen dlrId ile raporu sorgulayın. İlk sorguyu gönderimden 90–180 saniye sonra yapmanız önerilir; kesin sonuçlar genellikle 48 saat içinde tamamlanır.

<?php
$q = http_build_query([
    'username' => 'KULLANICI_ADINIZ',
    'password' => 'API_SECRET_32_KARAKTER',
    'id'       => 'DLR_ID',
]);
echo file_get_contents('http://sms.bizimsms.mobi:8080/api/dlr/v1?' . $q);
// Numara bazlı durum: 0 bekliyor, 5 gönderildi, 6 ulaşmadı, 9 iletildi

Dönüş kodları

Bizim SMS API dönüş kodları
En sık karşılaşılan dönüş kodları
KodAnlamıNe yapmalı?
00BaşarılıdlrId'yi kaydedin
87Kullanıcı adı / şifre hatalıAPI SECRET kullandığınızdan emin olun
85Başlık bulunamadı / onaysızBaşlığı birebir (büyük-küçük harf) yazın
81Yetersiz krediBakiye yükleyin
83Geçerli numara veya metin yokNumara formatını kontrol edin
84Gönderim tarihi hatalıyyyy.m.d.H.m.s formatı, en fazla 1 yıl ileri
89XML okunamadıBoş etiket ve özel karakterleri kontrol edin
77Aynı SMS son 2 dakikada gönderildiMükerrer istek kontrolü ekleyin
93 / 97Eksik parametre / yanlış metotGET–POST seçimini kontrol edin

Üretim ortamı için 5 ipucu

  1. API SECRET'i kodun içine gömmeyin; .env veya sunucu ortam değişkeninde tutun. Bu bilgi asla tarayıcıya (JavaScript) gönderilmemeli, istekler her zaman sunucu tarafından yapılmalı.
  2. Kuyruk kullanın: Binlerce mesajı tek tek döngüyle göndermek yerine tek XML isteğinde toplayın.
  3. 77 hatasına karşı aynı kullanıcıya kısa sürede aynı metni göndermeyi engelleyin (özellikle OTP'de).
  4. Loglayın: Her isteğin kodunu ve dlrId'sini veritabanına yazın; destek gerektiğinde hızla sorun bulunur.
  5. Karakter sayısına dikkat: Mesaj en fazla 6 boy olabilir, fazlası kesilir. Türkçe metinde 1 boy 155 karakterdir.

Sık sorulan sorular

API'yi sadece PHP ile mi kullanabilirim?

Hayır. HTTP isteği gönderebilen her dil (C#, Python, Node.js, Java) ile kullanılabilir. Mantık aynıdır: aynı adrese aynı parametreleri gönderirsiniz.

WordPress / WooCommerce ile kullanabilir miyim?

Evet. Yukarıdaki fonksiyonu tema veya eklentinizde sipariş durum değişikliği kancasına (woocommerce_order_status_changed) bağlayarak otomatik sipariş SMS'i gönderebilirsiniz.

İstek sınırı var mı?

Dokümanda istek sayısı için bir sınır yoktur; yine de toplu gönderimleri tek XML'de birleştirmek en verimli yöntemdir.

Tam teknik doküman için API sayfamızı ziyaret edin. Entegrasyonda takıldığınız yerde teknik ekibimiz yardımcı olur; ücretsiz üyelik ile API anahtarınızı hemen alın.

Detaylı Bilgi İçin Bizi Arayın