Saturday, July 16, 2016

Kategori:

Tutorial PHP - SMS Gateway 4 : Membuat Script Penerimaan SMS Panjang

sms-gateway


Tutorial PHP - SMS Gateway 4 : Membuat Script Penerimaan SMS Panjang


Tutorial PHP - SMS Gateway 4 : Membuat Script Penerimaan SMS Panjang / Long SMS Gateway Gammu Enggine. Belajar SMS Gateway Dengan PHP, Gammu, PHP dan Bootstrap Dengan Fitur Ajax Auto Refresh.

Setelah sebelumnya sudah membuat tutorial tentang Tutorial PHP - SMS Gateway 3 : Membuat Script Pengiriman SMS Panjangmaka selanjutnya kita buat script untuk menerima sms panjang, biasanya terdapat orang yang sering membuat sms panjang, sms yang panjangnya lebih dari 160 karakter, maka dari itu kita perlu membuatnya pada aplikasi sms gateway yang kita gunakan, ok selanjutnya mari kita pelajari scipt berikut ini. Silahkan buka text editor sobat.

Folder project

Silahkan sobat semua buat folder project penerimaan sms panjang ini yang digunakan untuk menyimpan beberapa script berikut ini. Misalkan folder "sms4".


Tabel baru

Untuk membuat teknik penerimaan long sms, atau penerimaan sms yang lebih dari 160 karakter, sobat perlu tabel baru untuk databasenya, silahkan buat tabel baru dengan nama sms_inbox. Silahkan tambahkan atau import pada database gammu enggine yang sudah ada pada phpMyadmin. Berikut ini struktur tabelnya. Silahkan run si phpmyadmin atau copy dan simpan dengan nama sms_inbox.sql, lalu importkan di database gammu sobat.



CREATE TABLE `sms_inbox` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `pesan` text,
  `nohp` varchar(20) DEFAULT NULL,
  `waktu` datetime DEFAULT NULL,
  `modem` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`id`)
)


Config.php

Selanjutnya buat script config.php ini berisikan koneksi yang ada pada database gammu enggine, pastikan nama database, username dan password yang ada sama dengan yang ada di phpMyadmin. Berikut ini scriptnya, silahkan copy dan pastekan di text editor sobat, lalu simpan dengan nama file config.php


<?php

// koneksi ke database

$dbhost = 'localhost';
$dbuser = 'root';
$dbpass = '';
$dbname = 'sms';

mysql_connect($dbhost, $dbuser, $dbpass);
mysql_select_db($dbname);


Function.php

Function.php ini ialah class cekinbox php yang akan menjalankan dan mengecek inbox atau proses pembacaan sms di tabel inbox, lalu cari yang processednya masih false, dan kita ada bantuan dari UDH,  setelah di baca maka sms akan di simpan di table sms_inbox.  Pemrosesannya melibatkan UDH untuk menyusun kembali pesan SMS yang masuk secara terpisah-pisah menjadi sebuah pesan utuh.


Berikut ini sciptnya, silahkan sobat bisa copy dan simpan dengan nama function.php. 


<?php

// proses pembacaan sms di inbox setelah dibaca, sms akan disimpan di tabel sms_inbox

function ngecekinbox()
{
 // mencari pesan SMS yang masih false (blm diproses)
 $query = "SELECT * FROM inbox WHERE processed = 'false'";
 $hasil = mysql_query($query);

 while ($data = mysql_fetch_array($hasil))
 {
  $sum = 0;
  $noTelp = $data['SenderNumber'];
  $idmodem = $data['RecipientID'];
  
  // jika UDH nya ada (mrpkan part long SMS)
  if ($data['UDH'] != '')
  {
   // baca prefix UDH 
   $chop = substr($data['UDH'], 0, 8);
   // baca bagian UDH untuk mendapatkan total part
   $n = (int) substr($data['UDH'], 8, 2);
   $text = "";
   
   // mencari semua part SMS berdasarkan struktur UDH dan nomor pengirimnya 
   for ($i=1; $i<=$n; $i++)
   {
    // mengkonstruksi UDH untuk setiap part
    $udh = $chop.sprintf("%02s", $n).sprintf("%02s", $i);
    $query3 = "SELECT * FROM inbox WHERE udh = '$udh' AND SenderNumber = '$noTelp' AND processed = 'false'";
    $hasil3 = mysql_query($query3);
    if (mysql_num_rows($hasil3) > 0) $sum++;
   }
   
   // jika semua part sudah ada (lengkap), lakukan penggabungan pesan 
   if ($sum == $n)
   {
    for ($i=1; $i<=$n; $i++)
    {
     // mengkonstruksi UDH untuk setiap part
     $udh = $chop.sprintf("%02s", $n).sprintf("%02s", $i);
     // membaca pesan dari setiap part berdasarkan UDH dan nomor pengirimnya
     $query3 = "SELECT * FROM inbox WHERE udh = '$udh' AND SenderNumber = '$noTelp' AND processed = 'false'";
     $hasil3 = mysql_query($query3);
     $data3 = mysql_fetch_array($hasil3);
     // proses penggabungan pesan
     $text .= $data3['TextDecoded'];
     $id = $data3['ID'];
     // menghapus pesan yang sudah diproses
     $query3 = "DELETE FROM inbox WHERE ID = '$id'";
     mysql_query($query3);
    }
  
    // memasukkan pesan utuh hasil penggabungan ke tabel SMS_INBOX
    $notelp = $data['SenderNumber'];
    $time = $data['ReceivingDateTime'];
    $text = str_replace("'", "\'", $text); 

    $query2 = "INSERT INTO sms_inbox(pesan, nohp, waktu, modem) VALUES ('$text', '$notelp', '$time', '$idmodem')";
    mysql_query($query2);  
   }   
  }
  else 
  {
   // jika UDH nya tidak ada (short SMS)
   $id = $data['ID'];
   $notelp = $data['SenderNumber'];
   $time = $data['ReceivingDateTime'];   
   $text = str_replace("'", "\'", $data['TextDecoded']);
   
   // menghapus pesan yang sudah diproses
   $query2 = "DELETE FROM inbox WHERE ID = '$id'";
   mysql_query($query2);
   
   // memasukkan pesan ke SMS_INBOX
   $query2 = "INSERT INTO sms_inbox(pesan, nohp, waktu, modem) VALUES ('$text', '$notelp', '$time', '$idmodem')";
   mysql_query($query2);
 
  }
 }
}

?>



Auto.php

Selanjutnya kita buat script auto.php, script ini ialah script yang digunakan untuk menjalan file config.php dan fuction.php yang telah kita buat. dan akan menampilkan pesan yang masuk di tabel sms_inbox. Silahkan copy dan simpan dengan nama auto.php.


<?php

include 'config.php';
include 'function.php';

// proses membaca inbox dan menyimpan ke tabel sms_inbox
ngecekinbox();

// tampilkan data inbox sesuai urutan waktu
$query = "SELECT * FROM sms_inbox ORDER BY waktu DESC";
$hasil = mysql_query($query);

echo "<table border='1'>";
echo "<tr><th>Pesan SMS</th><th>Pengirim</th><th>Waktu</th><th>Modem</th></tr>";  
while ($data = mysql_fetch_array($hasil))
{
 $nohp = $data['nohp'];
 $modem = $data['modem']; 
 $time = $data['waktu'];
 $text = $data['pesan'];
 echo "<tr><td>".$text."</td><td>".$nohp."</td><td>".$time."</td><td>".$modem."</td></tr>";
} 
echo "</table>";
?>



Index.php 

Ok, selanjutnya mari kita buat file index.php, script ini berisikan sebuah file auto refresh yang menjalankan script auto.php yang sudah kita buat sebelumnya,  di file index.php ini juga akan menampilkan data yang datanya diambil dari tabel sms_inbox yang sudah kita buat. Didalam script autorefresh ini sobat juga dapat mengatur set timeout dari refresh itu sendiri.


<html>
 <head>
  <title> Terima SMS Panjang - Tobiweb.id</title>
  <script type="text/javascript">
   function ajaxrunning()
   {
    if (window.XMLHttpRequest)
    {
     xmlhttp=new XMLHttpRequest();
    }
    else
    {
     xmlhttp =new ActiveXObject("Microsoft.XMLHTTP");
    }
 
    xmlhttp.onreadystatechange=function()
    {
     if (xmlhttp.readyState==4 && xmlhttp.status==200)
     {
      document.getElementById("inbox").innerHTML = xmlhttp.responseText;
     }
    }
 
    xmlhttp.open("GET","auto.php");
    xmlhttp.send();
    setTimeout("ajaxrunning()", 5000); 
   }
  </script>
 </head>
 <body onload="ajaxrunning()">
  <h1> Terima SMS Panjang - Tobiweb.id </h1>
  
  <div id="inbox"></div>
  
 </body>
</html>

Jangan lupa ya ke 4 script diatas disimpan dalam satu folder yang sudah di buat dan simpan di folder project htdocs sobat.

Sekian tutorial kali ini tentang Tutorial PHP - SMS Gateway 4 : Membuat Script Penerimaan SMS Panjang, script ini saya dapat referensi dari google dan ebook yang saya gunakan untuk belajar, Silahkan sobat gunakan untuk belajar juga. Semoga tutorial kali ini bermanfaat ya, Terima Kasih

Tobi Muhammad

Author & Editor

Tobi (Muhammad Tobi) adalah seorang Tukang Masak di perusahaan startup, suka sekali menulis dan mempelajari source code open source lisensi GNU di Github dll. Bisa pemrogramman web karena sering belajar dari contoh program yang ada di Github dll. Anak desa yang hanya lulusan Paket C.

1 comments:

  1. wah tutorial-tutorial SMS gatewaynya bagus-bagus rapi dan detail mas, makasih sudah tercerahkan, maaf pemula sms gateway. saran bagaimana kalau ditampilkan juga printscreen hasilnya :)

    ReplyDelete

 

News Letters

Subscribe here to get our newsletter in your inbox, it is safe and EASY!

Copyright © Tobi Web™