Toplu SMS Gönderim Sınıfı
6
Turkcell‘e bağlı SMS gateway sunucuları ile SMS gönderimini birkaç satır kod ile yapmaya olanak sağlayan PHP sınıfını yazının devamında bulabilirsiniz. Sınıfı SMS Makinesi‘ne uygun olarak yazdım ancak bildiğim kadarıyla sınıf içindeki host ve url değerleri değiştirilerek başka firmalar ile de kullanılabilir.
Sınıfın özellikleri;
- Mesaj 160 karakterden az ise tek gönderim, fazla ise çoklu gönderim yapar
- Uygunsuz karakterleri mesaj içeriğinden temizler
- Gateway hata kodlarını kontrol eder
Kullanımı;
<?php
$kisaMesaj = new sms($originator, $kullanici, $parola, $vendorid);
$kisaMesaj->telEkle('5553331122');
$kisaMesaj->telEkle('5554441122');
$kisaMesaj->mesaj('Bu mesajı 900 kişiye gönderen kerizlere Bill Gates servetini veriyor.');
$kisaMesaj->gonder(); // Duruma göre TRUE veya FALSE döner.
?>
Sınıfın kaynak kodları;
<?php
class sms {
private $pKullanici, $pParola, $pGonderen, $pSaglayici,
$pListe, $pMesaj, $pTip, $pXml,
$pHata = array (
"-1"=>"Sunucuya erisimde sorun var. Lutfen internet baglantinizi kontrol ediniz.",
"-2"=>"Sms sepeti bos.",
"01"=>"Hatali kullanici adi – sifre – bayi kodu",
"02"=>"Boyle bir Mesaj id kayitli degil.",
"04"=>"Gelen XML yok",
"05"=>"XML dügümü eksik ya da hatali",
"06"=>"Tanımsız Originator Bilgisi",
"08"=>"Verilen tarihler arasinda SMS gonderimi yok ya da Gonderim Raporu hazir degil",
"09"=>"Tarih alanlari bos veya hatali",
"11"=>"Tanimlanamayan hata",
"14"=>"Gonderimde Hatali Numaralar var.",
"15"=>"Mesaj gonderiminde hatali icerik var.",
"16"=>"Yetersiz Kontor Bilgisi"
);
function __construct($gonderen, $kullanici, $parola, $saglayici) {
$this->pGonderen=$gonderen;
$this->pKullanici=$kullanici;
$this->pParola=$parola;
$this->pSaglayici=$saglayici;
}
function telEkle($no) {
$no=trim($no);
if(is_numeric($no) && strlen($no)==10) {
$this->pListe.='<DST_MSISDN>'.$no.'</DST_MSISDN>';
}
}
function mesaj($mesaj) {
$this->pMesaj=str_replace(
array('ö','ç','ş','ı','ğ','ü','Ö','Ç','Ş','İ','Ğ','Ü'),
array('o','c','s','i','g','u','O','C','S','I','G','U'),
trim(str_replace(array('|','^','{','}','[',']','~','\\','\'','"'),' ', $mesaj)));
strlen($this->pMesaj)<160 ? $this->pTip='SENDSMS>' : $this->pTip='SENDCONCAT>';
}
function gonder() {
if(!$this->pListe) { exit('HATA: Telefon numarasi listesi bos gorunuyor.'); }
$this->pXml = '<?xml version="1.0" encoding="utf-8" ?>
<'.$this->pTip.'
<USERNAME>'.$this->pKullanici.'</USERNAME>
<PASSWORD>'.$this->pParola.'</PASSWORD>
<VENDOR_ID>'.$this->pSaglayici.'</VENDOR_ID>
<SDATE></SDATE>
<SENDER>'.$this->pGonderen.'</SENDER>
<TM_LIST>
<TM>
<DST_MSISDN_LIST>
'.$this->pListe.'
</DST_MSISDN_LIST>
<CONTENT_LIST>
<CONTENT>
<CONTENT_TEXT>'.$this->pMesaj.'</CONTENT_TEXT>
</CONTENT>
</CONTENT_LIST>
</TM>
</TM_LIST>
</'.$this->pTip;
$url = "https://gateway.smsmakinesi.com/SendSMS/SendSMS.asmx/sendSMS";
$h[]='POST /SendSMS/SendSMS.asmx/sendSMS HTTP/1.1';
$h[]='Host: gateway.smsmakinesi.com';
$h[]='Content-Type: application/x-www-form-urlencoded';
$h[]='Content-Length: '.strlen($this->pXml);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_POST,true);
curl_setopt($ch, CURLOPT_POSTFIELDS,'xml='.$this->pXml);
curl_setopt($ch, CURLOPT_HTTPHEADER,$h);
curl_setopt($ch, CURLOPT_FAILONERROR, 0);
curl_setopt($ch, CURLOPT_TIMEOUT, 5);
$data=curl_exec($ch);
$data=trim(strip_tags($data));
curl_close($ch);
if(strlen($data)==2) {
echo 'HATA: '.$this->pHata[$data];
return false;
} else {
return true;
}
}
}
?>
|
30.04.2009 |
PHP
Murat abi geçen gün soracaktım unuttum. Bu tarz değil de, kullanıcıdan mesaj alabilmemiz gerekiyor diyelim.Operatörler bu hizmeti ne şartlar karşılığında sağlıyor bilgin var mı?
Bu arada Murat abi, yazdığın sınıf PHP5 ile PHP4 arasında kalmış onu da söyleyeyim. Sınıfta “sms” fonksiyonunu yapılandırıcı ( constructor ) olarak kullanmışsın ki bu PHP4′e ait bir özelliktir, bunun yanında görünürlük kullanmışsın ( private, public, protected ) ki bu da PHP5′e özgüdür. en güzel çözüm, sms fonksiyonunu __construct olarak değiştirmek
Ya kardeşim farkındayım; yemin ederim kaç gündür aklımdaydı
Düzelttim bile… Bu arada bahsetttiğin çift yönlü SMS hizmetini operatörler veriyor mu bilmiyorum. Ama parası olan şirketler için mutlaka bir çözümleri vardır.
eğer isteyen olursa
vb.net
asp.net
için gerekli kodları sağlayabilirim, bende şirketimizin yönetim programından günü geldiğinde müşterilere doom günü mesajı yollayan bir yazılım hazırlıyorum.
saygılar
smsmakinesi çift yönlü smsi ücretsiz olarak veriyor. bunla ilgili örnekler yolladılar paylaşabilirim isterseniz.