PHP Dersleri

PHP ile Excel’den Toplu SMS Gönderme

PHP ile SMS gönderme yazı dizisine devam ediyoruz. Bu dersimizde Excel dosyasından okutulan bilgilerle nasıl toplu sms gönderileceğinden bahsedeğim. 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.

Excel dosyasındaki verileri, PHP Programlama dili ile okuyabilmek için aracı bir kütüphaneye ihtiyacımız var. Veri okutma işlemleri için  SimpleXLSX kütüphanesini kullanacağız. Bu kütüphaneye ulaşmak için BU LİNKİ kullanabilirsiniz. Kütüphane dosyasını indirdiğinizde src dosyasının içerisindeki SimpleXLSX.php dosyasını projenize dahil etmeniz gerekmektedir. Bu dosyayı çalışma alanınıza kopyalayınız.

PHP ile çalışmalarımızı gerçekleştirmek için ilk olarak bir excel dosyası oluşturalım. SMS gönderimi için ilk olarak excel dosyası ayarlanmalı ki, excel dosyasında yer alan verileri php’ye uyarlayalım. Aşağıda yer alan Excel dosyasını mesajlar.xlsx olarak kayıt edelim.

PHP ile Excel'den Toplu SMS Gönderme

Yukarıda yer alan görseldeki gibi bir excel dosyası hazırlayalım. A sütünuna telefon numaralarını B sütununa da mesajları yazalım. İlla bu şekilde yapmak zorunda da değilsiniz. Sadece telefon numarasının olduğu mesajın bir fom üzerinden geldiği uygulamada yapabilirsiniz. Ayrca toplu SMS gönderirken bir numaradan ikinci ve üstü yazımında sadece bir sms gideceğini de unutmayın. Aynı formattaki mesajlarda sadece bir gönderim yapılmaktadır.

<?php
## Kütüphaneyi dahil ettik
include "SimpleXLSX.php";
## excel dosyasına ulaşıp verileri böldük
$excel      = SimpleXLSX::parse('mesajlar.xlsx');
## kontrol ediyoruz
if( $excel ){
   ## Excel verilerini listeliyoruz.
   echo '<pre>';
      print_r( $xlsx->rows() );
   echo '</pre>';
}else{
   ## Hata varsa ekrana yazdırıyoruz.
   echo SimpleXLSX::parseError();
}
?>

Excel dosyasında yer alan verileri alıp listelemek için yukarıdaki php kodlarını kullanabilirsiniz. Bu örnekle verilerin nasıl listelendiğine bakabilir, yapacağınız uygulamalarda verilere nasıl ulaşacağınızı görebilirsiniz.

Array
(
    [0] => Array
        (
            [0] => Telefon Numarası
            [1] => Mesaj
        )

    [1] => Array
        (
            [0] => 5076644810
            [1] => Merhaba, bu mesaj PHP ile Toplu bir şekilde atılmıştır. İyi günler.
        )

    [2] => Array
        (
            [0] => 5076644810
            [1] => Merhaba, bu mesaj PHP ile Toplu bir şekilde atılmıştır. İyi günler.
        )

Excel dosyasının okunup ekrana yazdırılmasıyla yukarıdaki gibi bir dizi listesi elde edilecektir. Array anahtar değeri 0 (sıfır) olan değer, Excel dosyasındaki isimlendirme alanı olduğu için bu anahtarı atlayacağız. Telefon numaralarına ulaşmak için 0 mesaja ulaşmak için 1 anahtarını kullanacağız.

function sendRequest($site_name,$send_xml,$header_type) {
  $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,$header_type);
  curl_setopt($ch, CURLOPT_HEADER, 0);
  curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
  curl_setopt($ch, CURLOPT_TIMEOUT, 120);
  $result = curl_exec($ch);
  return $result;

SMS gönderimleri için yukarıda yer alan cURL fonksiyonu ile bağlantı işlemini gerçekleştireceğiz. Daha önceki dersimizde sms gönderimi için gerekli olan XML yapısından bahsemiştim. Bu sefer toplu sms göndereceğimiz için XML yapısını da şu şekilde düzenlemek gerekiyor.

<receipents>
  <number>5076644810</number>
  <number>5076644810</number>
</receipents>

Toplu sms göndermek için XML yapısındaki number bölümünü arttırarak birden fazla numaraya aynı mesajın gönderilmesini sağlayabilirsiniz. Eğer excel dosyasınzdaki mesajlar birinden farklı ise bu bölümü tek tutup xml yapısını döngü ile tekrar tekrar göndermeniz gerekmektedir.

Aynı Mesajı Toplu Olarak SMS Gönderme

Toplu olarak SMS göndermek ve aynı mesajı göndermek istiyorsak XML bölümündeki number etiketini farklı numaralarla yazmak yerli olacaktır.

function smsGonder($numara,$mesaj,$tip="tek"){
## Kullanıcı bilgileri
$username   = '5076644810'; // 0 ve boşluk olmayacak
$password   = 'ŞİFRENİZ';
$orgin_name = 'APITEST'; // Böyle kalacak
## Tek mi Toplu mu?
if( $tip == "tek" ){
   $ekle = "<message><text>{$mesaj}</text><receipents><number>{$numara}</number></receipents></message>";
}else if($tip == "toplu"){
   $ekle = "<message><text>{$mesaj}</text><receipents>";
   foreach($numara as $no){
      $ekle .= "<number>{$no}</number>";
   }
   $ekle .= "</receipents></message>";
}
## XML gönderim değeri
$xml = <<<EOS
<request>
   <authentication>
      <username>{$username}</username>
      <password>{$password}</password>
   </authentication>
   <order>
      <sender>{$orgin_name}</sender>
      <sendDateTime></sendDateTime>
   {$ekle}
   </order>
</request>
EOS;
## XML yapısını gönderiyoruz.
$sonuc = sendRequest('http://api.iletimerkezi.com/v1/send-sms',$xml,array('Content-Type: text/xml'));
$xmlOku  = simplexml_load_string($sonuc);
return $xmlOku->status->message;
}

Yukarıda smsGonder() isimli bir fonksiyon yer almaktadır. Bu fonksiyonda tek mesaj gönderme ve toplu sms gönderme bölümleri yer almaktadır. Toplu sms gönderim için üçüncü parametre de toplu olarak belirtmeli ve $numara bölümüne numaraları dizi olarak göndermek gerekiyor.

## Kütüphaneyi dahil ettik
include "SimpleXLSX.php";
## excel dosyasına ulaşıp verileri böldük
$excel      = SimpleXLSX::parse('mesajlar.xlsx');
## kontrol ediyoruz
if( $excel ){
   ## Excel verilerini listeliyoruz.
   $numaralar  = array();
   ## Diziye numaraları aktarıyoruz.
   $veriler    = $excel->rows();
   for($a=1; $a <count($veriler); $a++){
      $numaralar[]  = $veriler[$a]["0"];
   }
   ## mesajı da aldık.
   $mesaj      = $veriler[1][1];
}else{
   ## Hata varsa ekrana yazdırıyoruz.
   echo SimpleXLSX::parseError();
}
## Tüm işlemleri hallettik. Şimdi SMS Gönderelim
echo smsGonder( $numaralar, $mesaj, "toplu" );

Yukarıda yer alan kodlarla da ilk olarak excel dosyasından verileri okutup dizi olarak değişkene depoluyoruz. Sonrasında elde edilen verileri smsGonder() fonksiyonuna iletiyoruz. Bu fonksiyonla birlikte toplu bir şekilde aynı sms iletilecektir.

Farklı Mesajı Toplu Olarak SMS Gönderme

Aynı mesaj yerine, excel dosyasında yer alan numaralar ve karşılığında yer alan farklı mesajları göndermek için de birkaç düzenleme yapmak gerekmektedir.

function smsGonder($numara,$mesaj){
## Kullanıcı bilgileri
$username   = '5076644810'; // 0 ve boşluk olmayacak
$password   = 'ŞİFRENİZ';
$orgin_name = 'APITEST'; // Böyle kalacak
## 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>
            <number>{$numara}</number>
         </receipents>
      </message>
   </order>
</request>
EOS;
## XML yapısını gönderiyoruz.
$sonuc = sendRequest('http://api.iletimerkezi.com/v1/send-sms',$xml,array('Content-Type: text/xml'));
$xmlOku  = simplexml_load_string($sonuc);
return $xmlOku->status->message;
}

Toplu olarak farklı içerikli SMS göndermek için yukarıdaki gibi basit bir şekilde fonksiyonu hazırlıyoruz ardından da excel dosyasından verileri okutup verileri gönderiyoruz.

## Kütüphaneyi dahil ettik
include "SimpleXLSX.php";
## excel dosyasına ulaşıp verileri böldük
$excel      = SimpleXLSX::parse('mesajlar.xlsx');
## kontrol ediyoruz
if( $excel ){
   ## Excel verilerini listeliyoruz.
   $numaralar  = array();
   $mesajlar   = array();
   ## Diziye numaraları aktarıyoruz.
   $veriler    = $excel->rows();
   for($a=1; $a <count($veriler); $a++){
      $numaralar[]   = $veriler[$a]["0"];
      $mesajlar[]    = $veriler[$a]["1"];
   }
}else{
   ## Hata varsa ekrana yazdırıyoruz.
   echo SimpleXLSX::parseError();
}
## Tüm işlemleri hallettik. Şimdi SMS Gönderelim
for($a=0; $a < count($numaralar); $a++){
   echo smsGonder( $numaralar[$a], $mesajlar[$a]);
}

Excel dosyasından verileri aldıktan sonra gerekli değişkenlere verileri aktarıyoruz. Verileri değişkene depoladıktan sonra smsGonder() fonksiyonunu for döngüsü ile döndürerek farklı içerikteki değerleri gönderiyoruz.

İlgili Makaleler

Bir cevap yazın

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