Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Klasa] Era SMS
Forum PHP.pl > Forum > Gotowe rozwiązania > Algorytmy, klasy, funkcje
Fifi209
Witam, pewnie nie tylko ja potrzebuję od czasu do czasu wysłać sms'a z bramki Ery. Jak można przeczytać na ich stronie stworzyli dostęp skryptowy, jednak nie podają nawet przykładowych kodów - wszystko trzeba samemu napisać. Tak właśnie narodziła się klasa EraSMS.

Obsługuje póki co wysyłkę tylko z bramki sponsorowanej (sms lub mms)

Cały kod klasy:
[PHP] erasms.php - pobierz, plaintext
  1. <?php
  2.  
  3. class EraSMSException extends Exception {}
  4.  
  5. class EraSMS {
  6.  
  7. private $login;
  8. private $password;
  9.  
  10. private $url;
  11.  
  12. public function __construct($login, $password, $url) {
  13. if (preg_match('#^48([0-9]{9,9})$#', $login) && !empty($password)) {
  14. if (filter_var($url)) {
  15. $this->login = $login;
  16. $this->password = $password;
  17. $this->url = $url;
  18. }else{
  19. throw new EraSMSException('Wpisany adres url jest niepoprawny!');
  20. }
  21. }else{
  22. throw new EraSMSException('Podałeś niepoprawy numer (wskazuje na to jego format) lub nie podałeś hasła!');
  23. }
  24. }
  25.  
  26. public function send($text, $number, $mms='false') {
  27. if (preg_match('#^([a-z0-9,!\.\?\s]{1,100})$#i', $text) && preg_match('#^[0-9]{9,9}$#', $number)) {
  28. $string = '?message='.urlencode($text).'&number='.$number;
  29. $string .= '&password='.$this->password.'&login='.$this->login.'&mms='.$mms;
  30. $string .= '&failure='.$this->url.'&success='.$this->url;
  31. file_get_contents('http://www.era.pl/msg/api/do/tinker/sponsored'.$string);
  32. }else{
  33. throw new EraSMSException('Tekst może zawierać tylko: Litery duże i małe (bez polskich znaków), znaki specjalne: !,.? <br/>Wpisany numer może mieć niepoprawny format.');
  34. }
  35. }
  36.  
  37. public function read() {
  38. echo file_get_contents('status.txt');
  39. }
  40.  
  41. }
  42.  
  43. ?>
[PHP] erasms.php - pobierz, plaintext


Kod pliku, który odbiera odpowiedzi:
[PHP] response.php - pobierz, plaintext
  1. <?php
  2.  
  3. $errors = array(
  4. 0 => 'wysyłka bez błędu',
  5. 1 => 'awaria systemu',
  6. 2 => 'użytkownik nieautoryzowany',
  7. 3 => 'dostęp zablokowany',
  8. 5 => 'błąd składni',
  9. 7 => 'wyczerpany limit',
  10. 8 => 'błędny adres odbiorcy',
  11. 9 => 'wiadomość zbyt długa',
  12. 10 => 'brak wymaganej liczby żetonów'
  13. );
  14.  
  15. $x = explode('&', $_SERVER['QUERY_STRING']);
  16.  
  17. $vars=array();
  18.  
  19. foreach ($x as $y) {
  20. list($var, $val) = explode('=', $y);
  21. $vars[$var] = $val;
  22. }
  23.  
  24. if (array_key_exists('X-ERA-error', $vars)) {
  25. file_put_contents('status.txt', $errors[$vars['X-ERA-error']]);
  26. }else{
  27. $text = 'SMS Wysłany!<br/>';
  28. $text .= 'Pozostało: '.$vars['X-ERA-counter'].' smsów<br/>';
  29. file_put_contents('status.txt', $text);
  30. }
  31.  
  32. ?>
[PHP] response.php - pobierz, plaintext


A tutaj mały przykład jak tego używać:
[PHP] test.php - pobierz, plaintext
  1. <?php
  2.  
  3. header('Content-Type: text/html; charset=UTF8');
  4.  
  5. include('eraSMS.php');
  6.  
  7. try {
  8. $obj = new EraSMS('Twój numer np. 48602602602', 'hasło', 'http://domena.pl/response.php');
  9. $obj->send('Test mojej bramki. Fifi.', 'numer np. 602602602');
  10. // lub
  11. $obj->send('Test mojej bramki. Fifi.', 'numer np. 602602602', 'true'); // wysyłanie mms
  12. $obj->read();
  13. }catch(EraSMSException $e) {
  14. echo $e->getMessage();
  15. }
  16.  
  17. ?>
[PHP] test.php - pobierz, plaintext


W następnej wersji:
  • Możliwość ustawienia, z której bramki mają zostać wysłane sms/mms. (sponsorowana/multimedialna)
  • Wszystko zostanie oparte o sesje
  • Optymalizacja kodu


Mam nadzieję, że się komuś przyda.
Pozdrawiam.
Victor152
Ja bym dodał czy od wysłania smsa został zedytowany ten plik ze statusem i jeżeli nie to przy read() czekał, aż Era odpowie do naszego serwerka i dopiero wyświetlał.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2024 Invision Power Services, Inc.