Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [Klasa] Era SMS
Fifi209
post 7.03.2010, 12:13:38
Post #1





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

Ostrzeżenie: (0%)
-----


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.


--------------------
Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP
Go to the top of the page
+Quote Post
Victor152
post 11.03.2010, 19:19:46
Post #2





Grupa: Zarejestrowani
Postów: 105
Pomógł: 3
Dołączył: 26.02.2008

Ostrzeżenie: (0%)
-----


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ł.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 19.07.2025 - 10:05