PHP Dersleri

PHP İle Toplu SMS Gönderme

Bu dersimizde de Form üzerinden SMS gönderme işlemini gerçekleştireceğiz. HTML, CSS, jQuery ve PHP’yi birlikte kullanarak SMS gönderimini sağlamış olacağız. PHP ile SMS gönderme işlemi iletimerkezi.com sitesini kullanacağım. SMS sistemini denemek için sisteme kayıt olarak ücretsiz olarak 100 SMS bakiyesine sahip olabilirsiniz. Hala bir hesabınız yoksa BURAYI TIKLATARAK kayıt olabilirsiniz. Kayıt olduğunuzda hesabınıza ücretsiz kullanabileceğiniz 100 SMS tanımlanacaktır.

Form üzerinden SMS gönderimi için index.php, islem.php ve smsFunction.php dosyalarını oluşturuyoruz. Bu dosyaları oluşturup başlık başlık ilerleyelim.

İndex.php Dosyasının Oluşturulması

İndex.php dosyasında, HTML, CSS ve jQuery kodlarını barındıracağız. Oluşturduğumuz form üzerindeki verileri jQuery kullanarak AJAX metodu ile göndereceğiz. Dönen sonucu da JSON ile işleyeceğiz. Aşağıdaki kodları index.php dosyasına yazınız.

<style>
   :focus{outline:none}
   body, html, textarea, div, span, textarea,select,button{padding: 0px;margin: 0px;font: 14px Arial;resize:none}
   textarea{padding:10px;border:1px solid #ddd;width:100%}
   .ortala{width:600px;margin:20px auto}
   label{display:block;margin:10px 0px;font-weight:700}
   .bilgiler{padding:10px; background:#FFDFD3;border:1px solid #DFC3B9;margin-top:11px; text-align:center}
   .bilgiler span{margin-right:10px}
   .bilgiler span span{font-weight: 700;}
   select{padding:10px;border:1px solid #ddd;width:100%}
   button{padding:10px; border: 1px solid #6F5D81; width:100%;display:block;margin-top:10px;cursor:pointer;background-color:#957DAD;color:#fff}
   .solBolum{width:200px;float:left}
   .sagBolum{width:395px;float:right}
   label span{font-size:10px;display:block;color:#aaa}
   h1{background:#D291BC;padding:5px;color:#fff}
   .sonuc strong.hata{background:#FF3232;color:#fff;display:block; padding: 10px}
   .sonuc table{width:100%}
   .sonuc table tr.baslik{background:#5a5a5a;color:#fff}
   .sonuc table tr.hata{background:#FF3232;color:#fff}
   .sonuc table tr td{padding:5px;display: table-cell; border:1px solid #5a5a5a}
   </style>
   
   <meta charset="UTF-8">
   
   <div class="ortala">
      <h1>PHP ile <u>Toplu</u> SMS Gönderme</h1>
      <form action="javascript:void(0)" class="form">
         <div class="solBolum">
               <label>Numaralar <span>( Telefon numaralarını alt alta yazınız )</span></label>
               <textarea rows="10" name="numaralar" placeholder="Gönderilecek Numara(ları) yazınız"></textarea>
            </div>
            <div class="sagBolum">
               <label>Mesajınız <span>( SMS olarak gönderilecek mesajı yazınız )</span></label>
               <textarea onkeyup="yazilim(event)" class="icerik" rows="7" name="mesaj" placeholder="Gönderilecek SMS"></textarea>
               <div class="bilgiler">
                  <span class="karakter">Karakter : <span>0</span></span>
                  <span class="sms">SMS Sayısı : <span>0</span></span>
               </div>
            </div>
            <div style="clear:both"></div>
            <button onclick="gonder()">SMS GÖNDER</button>
      </form>
      <div class="sonuc"></div>
   </div>
   
   <script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>
   <script>
   function gonder(){
      var veriler    = $("form").serialize();
      var numaralar  = $("textarea[name=numaralar]").val();
      var mesaj      = $("textarea[name=mesaj]").val();
      // Kontroller ve gönderim
      if( $.trim(numaralar) == "" ){
         $(".sonuc").html("<strong class='hata'>Hata: Numaralar bölümü boş bırakılamaz!</strong>");
      }else if( $.trim(mesaj) == "" ){
         $(".sonuc").html("<strong class='hata'>Hata: Mesaj bölümü boş bırakılamaz!</strong>");
      }else{
         $(".sonuc").html("");
         // $("button").attr("disabled", true);
         $.ajax({ 
            type: "POST", url: "islem.php", data: veriler,
            success:function(cevap){
               var sonuc   = jQuery.parseJSON(cevap);
               if( sonuc.gonderim["0"] == 200 ){
                  // Başarılı gönderimleri listeliyoruz
                  $(".sonuc").append("<table>");
                  $(".sonuc table").append("<tr class='baslik'> <td>Telefon Numarası</td> <td>Mesaj</td> <td>Durum</td> </tr>");
                  // Başarılı Listesi
                  $.each(sonuc.onayli, function(index,value) {
                     $(".sonuc table").append("<tr> <td>"+value+"</td> <td>"+sonuc.mesaj+"</td> <td>Gönderildi</td> </tr>");
                  });
                  // Hatalı Listesi
                  $.each(sonuc.hatali, function(index,value) {
                     $(".sonuc table").append("<tr class='hata'> <td>"+value+"</td> <td>"+sonuc.mesaj+"</td> <td>Hatalı!</td> </tr>");
                  });
                  $(".sonuc").append("</table>");
               }else{
                  $(".sonuc").append("<table>");
                  $(".sonuc table").append("<tr class='baslik'> <td>Telefon Numarası</td> <td>Mesaj</td> <td>Durum</td> </tr>");
                  // Hatalı Listesi
                  $.each(sonuc.hatali, function(index,value) {
                     $(".sonuc table").append("<tr class='hata'> <td>"+value+"</td> <td>"+sonuc.mesaj+"</td> <td>Hatalı!</td> </tr>");
                  });
                  $(".sonuc").append("</table>");
               }
            } 
         });
      }
   }
   // Sms sayacı
   function yazilim(event){
      if(event){
         var Uzunluk   = $('.icerik').val().length;
         var smsSay   = 1;
         if(Uzunluk > 160 && Uzunluk <= 320){ smsSay=2; }
         if(Uzunluk > 320 && Uzunluk <= 480){ smsSay=3; }
         if(Uzunluk > 480 && Uzunluk <= 640){ smsSay=4; }
         if(Uzunluk > 640 && Uzunluk <= 800){ smsSay=5; }
         if(Uzunluk > 800 && Uzunluk <= 960){ smsSay=6; }
         if(Uzunluk > 960 && Uzunluk <= 1120){ smsSay=7; }
         if(Uzunluk > 1120 && Uzunluk <= 1280){ smsSay=8; }
         if(Uzunluk > 1280 && Uzunluk <= 1440){ smsSay=9; }
         if(Uzunluk > 1440 && Uzunluk <= 1600){ smsSay=10; }
         if(Uzunluk > 1600){ smsSay='Aynı sms içerisinde 1600 karakterden fazla kullanamazsınız . '; }
         $('span.karakter span').html(Uzunluk);
         $('span.sms span').html(smsSay);
      }
   }
   </script>

Yukarıdaki kodlarda form üzerindeki veriler islem.php’ye gönderilmektedir. Gönderilen numara ve mesaj belirli kotrollerden geçecektir. Kontol sonrasında sonuç JSON olarak geleceği için parseJSON ile verileri parçalayıp kullanacağız. Gönderilme durumuna göre tablo üzerinden listeleme yaparak gelen değeri sonuc class’ına sahip HTML etiketine yazdıracağız.

İslem.php Dosyasının Oluşturulması

Bu PHP dosyasında, POST ile gelen verileri belirli sorgulardan geçiriyoruz. Koşulları sağlayan numaralar için gönderim sağlıyoruz. Gönderim sağlanan yada sağlanamayan numaralar için de rapor sunmak için değişken de saklıyoruz. Aşağıda yer alan kodları islem.php dosyasının içerisine yazınız.

<?php
## SMS Fonksiyonları dahil ediyoruz.
include "smsFunction.php";
## Post olunca çalışacak.
if( $_POST ){
   ## Post değerlerini aldık
   $numaralar     = trim($_POST["numaralar"]);
   $mesaj         = trim($_POST["mesaj"]);
   ## Gelen numara değerlerini parçalıyoruz.
   $tekilNumaralar    = explode(PHP_EOL, $numaralar);
   ## Numaraları işliyoruz
   for( $a=0; $a < count($tekilNumaralar); $a++ ){
      ## Alt alta yazılan numaraları tek tek aldık
      $numara     = trim($tekilNumaralar[$a]);
      ## Gelen numara eğer boş değilse
      if( $numara != "" ){
         ## Numara sadece 0-9 karakterlerinden olabilir,
         ## sayısal değilse boşluk olarak düzenle dedik.
         $numara = preg_replace('/[^0-9]/', '', $numara);
         ## Türkiye gönderimli kodu temizliyoruz
         $numara   = ltrim($numara, "90");
         ## Numaraların formatını 555-555-55-55 olarak tanımlıyoruz
         if( strlen($numara) == "10" ){
            $sonuc["onayli"][]   = $numara;
         }else{
            $sonuc["hatali"][]   = $numara;
         }
      }
   }
   if( isset($sonuc["onayli"]) ){
      $sonuc["gonderim"]      = smsGonder($mesaj, $sonuc["onayli"]);
   }else{
      $sonuc["gonderim"]      = "";
   }
   $sonuc["mesaj"]         = $mesaj;
   ## sonucu index.php ye gönderiyoruz.
   echo json_encode($sonuc);
}

Yukarıdaki kodlarda ilk olarak smsFunction.php dosyası dahil edilmektedir. Bu dosyanın içerisinde gönderime ilişkin kodlar bulunmaktadır. Bu kodları diğer başlıkta inceleyeceğiz. Sonrasında POST gönderimini kontrol ediyoruz. Eğer POST gönderimi varsa if koşulu çalışacaktır.

Öncelikle gelen değerleri trim() fonksiyonu ile temizliyoruz. Textarea ile alt alta gönderilen numaraları explode() ile parçalıyoruz. Alt alta olan verilerin parçalanması için ilk parametrede PHP_EOL kullanıyoruz.

Parçalanan numaraları for döngüsü ile döndürüp, boşlukları siliyoruz. Parçalanan veriler sayısal değilse boşluk olarak düzenliyoruz. Eğer numarada 90 gibi bir başlangıç varsa de bunu ltrim() ile temizliyoruz. En son elde edilen numara 10 karakterse onayli dizinine atıyoruz. Eğer şartları sağlamamışsa hatali dizinine atıyoruz.

SMS gönderimi için onayli dizinindeki sonuçları smsGonder() fonksiyonu ile gönderiyoruz. Son olarak hazırlanan değerleri json_encode() ile index.php dosyasına gönderiyoruz.

smsFunction.php Dosyasının Oluşturulması

Bu dosyanın içerisinde ise SMS gönderimi için gerekli olan fonksiyonları hazırlıyoruz. İlk fonksiyon standart gönderim için gerekli olan fonksiyondur. Burada asıl önemli olan smsGonder() fonskiyonudur. Bu fonksiyonda gelen dizi(array) numaları foreach ile XML’e uyarlıyoruz. Sonrasında gönderimi sağlıyoruz.

<?php
function sendRequest($site_name,$send_xml) {
   $ch = curl_init();
   curl_setopt($ch, CURLOPT_URL,$site_name);
   curl_setopt($ch, CURLOPT_POST, 1);
   curl_setopt($ch, CURLOPT_POSTFIELDS,$send_xml);
   curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,1);
   curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
   curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
   curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: text/xml'));
   curl_setopt($ch, CURLOPT_HEADER, 0);
   curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
   curl_setopt($ch, CURLOPT_TIMEOUT, 120);
   $result = curl_exec($ch);
   return $result;
}
function smsGonder($mesaj,$numaralar){
## Kullanıcı bilgileri
$username   = 'TELEFON NUMARANIZ'; // 0 ve boşluk olmayacak
$password   = 'ŞİFRENİZ';
$orgin_name = 'APITEST'; // Böyle kalacak
$noTasiyici = '';
## Telefon Numaralarını XML çeviriyoruz
foreach($numaralar as $numara){
   $noTasiyici .= "<number>{$numara}</number>";
}
## XML gönderim değeri
$xml = <<<EOS
<request>
   <authentication>
      <username>{$username}</username>
      <password>{$password}</password>
   </authentication>
   <order>
      <sender>{$orgin_name}</sender>
      <sendDateTime></sendDateTime>
      <message>
         <text>{$mesaj}</text>
         <receipents>
            {$noTasiyici}
         </receipents>
      </message>
   </order>
</request>
EOS;
$sonuc   = sendRequest('http://api.iletimerkezi.com/v1/send-sms',$xml);
$xmlOku  = simplexml_load_string($sonuc);
return $xmlOku->status->code["0"];
}

Daha önceki bölümlerde detaylı olarak anlattığım için fonksiyonlar için detaya girmeyeceğim. Arama bölümüne SMS yazarak tüm makalelere ulaşabilirsiniz.

ÇALIŞMA DOSYALARINI İNDİR

İlgili Makaleler

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir