Php
PHP İle SMS Gönderimi
PHP ile oluşturduğunuz projelerinizde bir SMS servisi üzerinden SMS göndermek isterseniz aşağıdaki örnek kodlar işinize yarayabilir.
Kodlar Türkiye’de hizmet veren SMS servislerinden biri olan https://balaban.ist/ üzerinden çalışmaktadır. Öncelikle bu servisten üyelik ve kredi almanız gereklidir.
Not: Aşağıdaki kodlar bir kaç sene öncesinin API lerine uygun yazılmıştır. API v1.1 kullanılmıştır. Bazı değişiklikler söz konusu olabilir (XML dizimi vs). Değişiklik varsa kolayca adapte edilebilir.
Öncelikle aşağıdaki kodu smsexplorer_class.php olarak kaydedin.
<?php // Coded by cazda.com // used smsexplorer.net XML API v1.1 class SMS { var $username, $password, $companycode; var $originator; var $smsType = 1; var $min_num_length = 10; var $msg_length_control = false; // alttaki 2 değerin kontrolünü yapalımmı var $msg_min_length = 2; var $msg_max_length = 160; var $msg_length; public function __construct($uname,$pword,$ccode = 100) { $this->username = $uname; // test için: devtest; $this->password = $pword; // test için: devtest; $this->companycode = $ccode; // 100 sabit } protected function removeTRChar( $input ){ //Türkçe karakterlerin çevrimi yapıp, büyük harfe çevrim işlemi return strtoupper(strtr($input,'ğüşıöçĞÜŞİÖÇ','GUSIOCGUSIOC')); } public function getCredit(){ $creditXML = "<MainReportRoot><Command>6</Command><PlatformID>1</PlatformID><UserName>$this->username</UserName><ChannelCode>$this->companycode</ChannelCode><PassWord>$this->password</PassWord></MainReportRoot>"; $credit = $this->sendXML( $creditXML ); return number_format(substr($credit, 0, strpos($credit, "\n")),0,"",""); } public function getReportbyID( $msgID ){ $reportXML = "<MainReportRoot><Command>3</Command><PlatformID>1</PlatformID><UserName>$this->username</UserName><ChannelCode>$this->companycode</ChannelCode><PassWord>$this->password</PassWord><MsgID>$msgID</MsgID></MainReportRoot>"; return $this->sendXML( $reportXML ); } public function getReportbyDate( $sDate, $eDate ){ // sDate, eDate = ddmmyyyy formatında olacak $reportXML = "<MainReportRoot><Command>43</Command><PlatformID>1</PlatformID><UserName>$this->username</UserName><ChannelCode>$this->companycode</ChannelCode><PassWord>$this->password</PassWord><Sdate>$sDate</Sdate><Edate>$eDate</Edate></MainReportRoot>"; return $this->sendXML( $reportXML ); /* SMS Durumu Açıklama 1 Operatöre teslim edildi 3 Başarılı olarak iletildi 5 İptal olan ya da GSM NO formatına uymayan numaralar 6 İşlemde olan ve gönderimi süren numaralar 9 Geçerlilik süresi boyunca iletilememiş ve zaman aşımına uğramış RAPORLAMA ESANSINDA DÖNEN HATA DEĞERLERİ Hata Kodları Açıklama 01 UserName/PassWord (Kullanıcı Adı/Parola) yanlış girilmiş 02 İstekte bulunan kullanıcıya(UserName) ait raporlanmak istenen ID bulunamadı 03 ID girilmemiş ya da genel bir hata oluştu 04 İşlem başarısız olmuş 05 Talep edilen ID şuanda işleniyor(Yazılıyor,Gönderiliyor ya da Filtreleniyor). 07 Telep edilen ID ye ait işlem (SMS gönderimi ) bulunamadı 08 İşlem (SMS gönderimi )kullanıcı tarafından iptal edilmiş */ } public function sendSMS( $number, $msg, $sDate='', $eDate='' ){ // Type = 1 normal, Type=4 flash SMS // SDate, EDate: ddmmyyyyhhmm formatı $number = preg_replace('/\D/', null, $number); // boşlukları kaldıralım if (strlen($number) < $this->min_num_length) return 997; // Mesajı Türkçe karakterden arındırıp, tek satır hale getirelim $msg = $this->removeTRChar( $msg ); $msg = preg_replace('/[\r\n\t]+/', ' ', trim(strval( $msg ))); $msg = preg_replace('/\s{2,}/', ' ', $msg); $this->msg_length = strlen($msg); if ($this->msg_length < $this->msg_min_length and $this->msg_length_control == true) return 998; if ($this->msg_length > $this->msg_max_length and $this->msg_length_control == true) return 999; $msgXML= "<MainmsgBody> <Command>0</Command> <PlatformID>1</PlatformID> <UserName>$this->username</UserName> <PassWord>$this->password</PassWord> <ChannelCode>$this->companycode</ChannelCode> <Mesgbody>$msg</Mesgbody> <Numbers>$number</Numbers> <Type>$this->smsType</Type> <Originator>$this->originator</Originator> <SDate></SDate> <EDate></EDate> </MainmsgBody>"; } private function sendXML( $xml ){ if (function_exists('curl_init') and $ch = @curl_init('http://gw.maradit.net')) { curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type: text/xml')); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_TIMEOUT, 30); curl_setopt($ch, CURLOPT_POSTFIELDS, $xml); $result = curl_exec($ch); curl_close($ch); } else if (ini_get('allow_url_fopen')) { // eğer curl çalışmıyorsa bunu deneyelim if (!$fp = @fsockopen('gw.maradit.net', 80, $errno, $errstr)) { trigger_error('SMS gateway bağlantı hatası. Daha sonra tekrar deneyin', E_USER_ERROR); return 20; } $header = "POST / HTTP/1.1\r\n"; $header .= "Host: gw.maradit.net\r\n"; $header .= "User-Agent: HTTP/1.1\r\n"; $header .= "Content-Type: application/x-www-form-urlencoded\r\n"; $header .= "Content-Length: " . strlen( $xml ) . "\r\n"; $header .= "Connection: close\r\n\r\n"; $header .= "{$xml}\r\n"; fputs($fp, $header); $result_ = array(); while(!feof($fp)) { $result_[] = fgets($fp); } fclose($fp); $result = $result_[8]; } else { trigger_error('Server does not support HTTP(S) requests.', E_USER_ERROR); return 20; } return ($result); /* GÖNDERİM ESANSINDA DÖNEN DEĞERLER Hata Kodları Açıklama 01 UserName/PassWord (Kullanıcı Adı/Parola) yanlış girilmiş 02 Kredi yeterli değil 04 Bilinmeyen SMS tipi 05 Hatalı Gönderen ID (Originator) seçimi yapılmış 06 Mesaj metni ya da numaralar girilmemiş. 09 Hatalı tarih formatı , tarih ddmmyyyyhhmm (gün-ay-yıl-saat-dakika) formatında olmalıdır Mesaj başarılı ise “ID: 3152005” gibi bir dönüş Hata Kodlari Açıklama 20 Bilinmeyen Hata. 21 XML ifadesi ya da formatı hatalı. 22 Kullanıcı aktif değil. 71 GSM prefixi sistemimizde tanımlı değil. (Ülke kodları 90 , 46, 41 gibi) 72 Gönderen Id tanımlı değil. (11 karakterlik gönderen başlığı) 74 Kullanıcı ya da kullanılan ip engellenmiş 997 Gönderilen SMS numarası yanlış veya eksik. En az $sms->min_num_length rakam olmalı 998 Gönderilen SMS mesajı çok kısa. En az $sms->msg_min_length karakter olmalı 999 Gönderilen SMS mesajı çok uzun. İzin verilen maks $sms->msg_max_length karakter */ } } //end class sms ?> <?php /* http://www.smsexplorer.com/Shared/Dev/XMLAPI/MARADIT_XML_API.pdf --------------------------------------------------------------------------------- <Command> Açıklama 0 SMStomany ( Aynı mesajın birçok farlı numaraya gönderilmesi) 1 SMSmultisenders (Farklı mesajların farklı numaralara gönderilmesi) 43 Reportbydate (Tarihi değerlendirerek raporlama) 3 ReportbyID ( SMS Id değerlendirilerek raporlama) 4 Canceljop (İleri bir tarihe gönderilmiş SMS paketin iptali 5 Checkdate (Sunucu tarihinin kontrol edilmesi) 6 Getcredit (Gönderen ID ve kredinin kontrol edilmesi) --------------------------------------------------------------------------------- */ ?>
Yukarıdaki class dosyamızı oluşturduktan sonra şimdi örnek bir php kod yazalım.
<?php require_once('smsexplorer_class.php'); // Yukarıda oluşturduğumuz class dahil ediyoruz. $sms = new SMS("kullaniciadi","sifre"); //smsexplorer kullanıcı adı ve şifre $sms->smsType = 1; // 1= Normal sms, 4= Flash sms $sms->originator = "SIRKETINIZ"; //smsexplorerdan alınan originator bilgisi $sms->min_num_length = 10; // Min GSM no karakter sayısı - varsayılan: 10 $sms->msg_length_control = false; // alttaki 2 değerin sıkı sıkıya kontrol edilmesi için ture yapınız $sms->msg_min_length = 2; // Girilmesi geren min karakter sayısı - varsayılan: 2 $sms->msg_max_length = 160; // Girilmesi geren max karakter sayısı - varsayılan: 160 $mesaj = sprintf(TEXT_SMS_HEADER, $oID).$orders_status_array[$status]; $gsm = "05323556677"; // Gönderilecek numara $smssonuc = $sms->sendSMS($gsm, $mesaj); switch ($smssonuc) { case "01": $sms_sonucu = "Kullanıcı hesap bilgileri yanlış ($sonuc)"; $success = false; break; case "02": $sms_sonucu = "Kredi yeterli değil ($sonuc)"; $success = false; break; case "04": $sms_sonucu = "Bilinmeyen SMS tipi ($sonuc)"; $success = false; break; case "05": $sms_sonucu = "Hatalı Gönderen ID (Originator) seçimi yapılmış ($sonuc)"; $success = false; break; case "06": $sms_sonucu = "Mesaj metni yada numara girilmemiş/hatalı ($sonuc)"; $success = false; break; case "20": $sms_sonucu = "Bilinmeyen hata ($sonuc)"; $success = false; break; case "22": $sms_sonucu = "Kullanıcı aktif değil ($sonuc)"; $success = false; break; case "71": $sms_sonucu = "GSM prefixi sistemimizde tanımlı değil. (Ülke kodları 90 , 46, 41 gibi) ($sonuc)"; $success = false; break; case "72": $sms_sonucu = "Gönderen Id tanımlı değil ($sonuc)"; $success = false; break; case "74": $sms_sonucu = "Kullanıcı ya da kullanılan ip engellenmiş ($sonuc)"; $success = false; break; case "997": $sms_sonucu = "Gönderilen SMS numarası yanlış veya eksik. En az $sms->min_num_length rakam olmalı "; $success = false; break; case "998": $sms_sonucu = "Gönderilen SMS mesajı çok kısa. En az $sms->msg_min_length karakter olmalı"; $success = false; break; case "999": $sms_sonucu = "Gönderilen SMS mesajı çok uzun ($sms->msg_length). İzin verilen maks $sms->msg_max_length karakter"; $success = false; break; case "333": $sms_sonucu = "SMS modülü lisansı bu domaine ait değildir."; $success = false; break; default: $sms_sonucu = "Sipariş güncelleme SMS gönderimi başarılı ($sonuc)"; $success = true; } if($success == true) { echo "Sms gönderildi..."; } else { echo "Sms gönderilemedi..."; } ?>