Crea un modulo di iscrizione SMS parte 2

Benvenuti alla seconda parte di questo tutorial sull'utilizzo della tecnologia SMS per creare un modulo di registrazione. In precedenza, nella prima parte di questa serie, abbiamo utilizzato HTML, JavaScript, MySQL e PHP per creare un modulo di registrazione. In questo tutorial tratteremo l'integrazione con un gateway SMS e il codice necessario per completare l'elaborazione del modulo di registrazione.


Passo 1: dove siamo partiti

Nella prima parte di questa serie, abbiamo creato due funzioni: registrazione e attivazione. Come indicano i nomi, il primo viene utilizzato per l'iscrizione al modulo e il secondo per l'inserimento del codice di attivazione. Continueremo dimostrando come utilizzare due diversi servizi di gateway SMS per l'invio di messaggi. Cos'è un gateway SMS? È essenzialmente un servizio che fornisce l'accesso al traffico di rete mobile con uno o più operatori di telefonia cellulare. Quindi, perché utilizzare due diversi servizi? La mia prima scelta era Clickatell, ma per poter inviare messaggi SMS negli Stati Uniti senza uno shortcode, dovevo trovare un altro servizio. SmsMatrix è un ottimo servizio che può inviare messaggi in molti paesi diversi, compresi gli Stati Uniti. Potrei semplicemente utilizzare SmsMatrix da solo, ma utilizzerò entrambi i servizi per dimostrare come si abilita il server a selezionare un servizio in base al paese in cui si è targeting. Ciò potrebbe accadere nel mondo reale, in quanto è possibile variarli per risparmiare sul costo per messaggio o come backup nel caso in cui il primo servizio che si tenta risponda con un codice di errore.


Passaggio 2: la classe Clickatell

Clickatell è tra i più grandi gateway di SMS online disponibili. Secondo le informazioni sul proprio sito Web, Clickatell attualmente supporta 221 paesi e territori. Hanno un sacco di funzioni, tra cui SMS semplici, SMS bidirezionali e SMS shortcode. Hanno anche una base di utenti impressionante, che serve oltre 10.000 clienti in tutto il mondo. Alcuni di questi clienti includono CNN, Continental Airlines, Vodafone, Oracle, Nokia e altri grandi attori nel settore IT e aziendale. La cosa bella di Clickatell è che puoi registrarti per un account gratuito e utilizzare 10 crediti gratuiti per l'invio di SMS mentre stai imparando. I gateway SMS funzionano in genere con i crediti acquistati per l'invio di messaggi SMS. La quantità di crediti che un singolo messaggio SMS avrà un costo varia a seconda di dove (geograficamente) viene inviato il messaggio. Vai a Clickatell e registrati per un account gratuito. Quando invii i crediti di prova, il contenuto del messaggio verrà sostituito con informazioni sui test, ma dovrebbe funzionare bene per le nostre esigenze. Al momento della registrazione, fai attenzione alla registrazione per Clickatell Central e seleziona Copertura esclusa USA, in quanto è necessario un numero speciale di shortcode per l'invio negli Stati Uniti..

Dopo aver attivato correttamente il tuo account e effettuato l'accesso, fai clic sul link "fai clic qui per creare una nuova connessione". Questo imposterà un api_id con il quale è possibile inviare SMS.

Seleziona HTTP come tipo di connessione. Clickatell offre molte opzioni per l'invio di SMS, il più facile è probabilmente quello di inviare una e-mail a un determinato indirizzo. Supportano molti protocolli come XML, SOAP e persino FTP per i messaggi di massa. La connessione HTTP è tutto ciò di cui abbiamo bisogno.

Continua e fai clic su Ottieni ID API. Otterrai una pagina con una stringa di esempio. Copia la stringa di esempio nel browser e sostituisci nome utente, password e parametri con nome utente, password e numero di cellulare. Avrai un risultato nel browser con un messaggio "OK" o "ERR" seguito da un codice. Questo è ciò di cui abbiamo bisogno per costruire la nostra libreria Clickatell.

Per iniziare a creare la libreria Clickatell, creare un nuovo file chiamato Clickatell_api.php nel applicazioni / librerie cartella. Inserisci il seguente codice:

 class Clickatell_api // cambia questo utente e password reali private $ username = 'username'; private $ password = 'password'; private $ api_id = 'api id'; private $ url = 'http://api.clickatell.com/http/sendmsg'; funzione pubblica send_sms ($ phone, $ text) $ url = $ this-> url. '? utente ='. $ questo-> nome utente. '& password ='. $ this-> password. '& api_id ='. $ this-> api_id. '& a ='. $ telefono. '& text ='. urlencode ($ text); $ r = @file ($ url); $ res = substr ($ r [0], 0, 2); if ($ res == 'ER') return false;  return true; 

Il codice è piuttosto auto-esplicativo, ma prima di iniziare a rivederlo, si noti che in un ambiente di produzione questo script deve risiedere in una directory al di fuori della web root o fare affidamento sulla configurazione del proprio server per impedire l'accesso pubblico. L'ultima cosa che vuoi è che qualcuno possa chiamare questo script direttamente da un browser o da un altro script.

Nell'esempio sopra, creiamo una classe Clickatell_api che ha alcuni memebers: username, password, api_id e l'url su cui baseremo. Sostituisci con il tuo nome utente, password e api_id. All'interno della classe abbiamo un singolo inviare SMS() funzione che accetta un numero di telefono e il messaggio di testo da inviare. La classe crea l'url concatenando i membri della classe e formando un URL finale. Noi usiamo UrlEncode () per codificare il testo nell'URL e poi passarlo a file(). Ovviamente, per i server che hanno la funzione file () bloccata, è possibile utilizzare CURL, ma non è questo il punto del tutorial. Quindi otteniamo il risultato e usiamo subtr () per ottenere i primi due caratteri dalla prima riga. Se la risposta è 'ER', che viene da ERRORE, restituiamo false, altrimenti restituiamo true. Questo è tutto ciò che fa la classe, ma è ancora meglio usare una classe in quanto è possibile riutilizzarla più tardi in qualsiasi applicazione.


Passaggio 3: la classe SmsMatrix

SmsMatrix è un altro servizio potente. Questo ha cose molto più avanzate, come conversione da testo a voce, risposta programmabile ("premi 2 per sì o 1 per no") e messaggi vocali, ma la cosa più importante per noi è che non richiede di avere un numero di cortocircuito per inviare messaggi SMS negli Stati Uniti. Hanno anche un'opzione di account gratuito che ti dà 5 crediti per testare la tua app SMS. Ottenere l'installazione con SmsMatrix è più semplice di Clickatell: si crea l'account, e quindi si usano il nome utente e la password per inviare il messaggio SMS. Avrai bisogno della guida per l'invio di SMS, ma l'idea è la stessa: si forma un url speciale e si accede a PHP. Creiamo una libreria smsmatrix_api per questo. Crea un file chiamato Smsmatrix_api.php nel applicazioni / librerie cartella e scrivere quanto segue:

 class Smsmatrix_api // cambia questo utente e password reali private $ username = 'username'; private $ password = 'password'; private $ url = 'http://www.smsmatrix.com/matrix'; funzione pubblica send_sms ($ phone, $ text) $ url = $ this-> url. '? username ='. urlencode ($ this-> username). '& password ='. urlencode ($ this-> password). '& telefono ='. $ telefono. '& txt ='. urlencode ($ text); $ r = @file ($ url); $ res = substr ($ r [2], 11); if ($ res> 399) return false;  return true; 

Di nuovo, creiamo una classe con nome utente, password e membri e creiamo la stessa cosa inviare SMS() funzione. Lo abbiamo chiamato lo stesso, in modo che le classi potessero essere intercambiabili. Creiamo l'URL finale, con cui accediamo file() e otteniamo il codice del risultato. Il codice del risultato si trova nella terza riga della stringa del risultato, quindi usiamo le sottotrame ($ r [2], 11) per ottenere il numero dopo la stringa 'STATUSCODE ='. Ho ricevuto i codici di errore dalla guida pdf e in pratica qualsiasi codice inferiore a 399 è successo, quindi restituiamo true, altrimenti restituiamo false.


Passaggio 4: integrazione del controller

Ok, è ora di tornare al nostro controller di registrazione. Vai alla funzione processi() e inserisci il seguente codice dopo l'inserimento del database:

 // invia auth SMS se in USA se ($ this-> input-> post ('country') == 1) $ this-> load-> library ('smsmatrix_api'); $ this-> smsmatrix_api-> send_sms ($ signup ['mobile'], $ signup ['activation']);  else // quando non USA $ this-> load-> library ('clickatell_api'); $ this-> clickatell_api-> send_sms ($ signup ['mobile'], $ signup ['activation']); 

Per prima cosa, controlliamo il codice paese, se è 1 (cioè Stati Uniti) useremo SmsMatrix, quindi lo carichiamo con $ This-> load-> library ( 'smsmatrix_api'). Se il paese non è Stati Uniti, carichiamo il clickatell_api. Ad ogni modo, usiamo inviare SMS() per inviare il codice di attivazione al numero di cellulare. Noterai che il numero di cellulare è stato inserito prima nel database concatenando il valore del paese (che contiene il prefisso per quel paese) con il numero di cellulare. Potremmo effettivamente completare il secondo parametro nel carico della libreria per accedervi con un certo nome e utilizzare solo send sulla libreria:

 // invia auth sms se in USA if ($ this-> input-> post ('country') == 1) $ this-> load-> library ('smsmatrix_api', 'sms_api');  else // quando non in US $ this-> load-> library ('clickatell_api', 'sms_api');  $ this-> sms_api-> send_sms ($ signup ['mobile'], $ signup ['activation']);

In questo modo, carichiamo solo la libreria appropriata con lo stesso nome, accedendola con 'sms_api', ma è la stessa cosa. Fondamentalmente le due librerie condividono la stessa interfaccia. Inoltre, se si ottiene false come valore di ritorno, è possibile inviare l'SMS con l'altra libreria come backup.


Passaggio 5: reindirizzamento dei cookie

Se impostiamo un cookie "firmato" dopo aver inviato il messaggio SMS, possiamo utilizzarlo in seguito per evitare che vengano inviati più messaggi. Abbiamo bisogno di farlo in modo tale che quando l'utente si allontana dal modulo di registrazione e in seguito torni a provare e iscriversi nuovamente, lo reindirizzeremo automaticamente alla funzione di attivazione. Aggiungi questo nella parte superiore del Iscriviti() funzione:

 function index () if (get_cookie ('signed')) redirect ('signup / activate');  $ this-> config-> load ('countries', true); $ data ['countries'] = $ this-> config-> item ('countries'); $ this-> load-> view ('signup', $ data); 

In questo modo, se ti iscrivi una volta e provi ad accedere nuovamente al modulo di iscrizione, otterrai la stessa funzione di attivazione che ti dice di inserire il codice di attivazione. Prendiamoci cura dell'attivazione successiva.


Passaggio 6: la funzione di attivazione

Ora creeremo il processo di attivazione:

 function activate () if (! get_cookie ('signed')) redirect ('signup');  $ data ['error'] = "; if ($ this-> input-> post ('signup')) // se inviato $ where = array ('uid' => get_cookie ('signed'), ' attivazione '=> $ this-> input-> post (' code ')); $ result = $ this-> db-> dove ($ where) -> count_all_results (' users '); if ($ result < 1 ) $data['error'] = '
Il codice di autorizzazione non è corretto!
'; else delete_cookie ('signed'); $ this-> db-> set (array ('active' => 1, 'activation' => ")) -> dove ('uid', get_cookie ('signed')) -> update ('users'); reindirizzamento ('registrazione / successo'); $ this-> load-> view ('activate', $ data);

Lascia che ti spieghi cosa sta succedendo qui: faccio il contrario, se il cookie non è impostato reindirizzo alla registrazione. Quindi, ho impostato il messaggio di errore su ", perché non abbiamo alcun errore ora.Se il campo del messaggio di registrazione è stato impostato (cioè se il modulo è stato inviato), cerco una voce nella tabella con l'id da il cookie e l'attivazione equivalgono al codice inviato. È importante non avere mai un ID 0 nel database, in quanto ciò renderebbe falso il cookie e ci sarebbe un ciclo di reindirizzamento. Questo controllo può essere fatto, ma è meglio impostarlo nel database.

Conto le righe restituite e, se non ne ricevo, mostro un errore che l'autorizzazione non è corretta. Poiché l'utente può avere solo un determinato codice di attivazione, quando inserisci il codice sbagliato, il database non troverà alcuna riga e restituirà 0. Se troviamo una riga, eliminiamo il cookie, poiché non ne abbiamo più bisogno, impostiamo la colonna attiva su 1 e l'attivazione su "e aggiorno la tabella." Da questo momento in poi, l'utente viene attivato e sappiamo per certo che è il suo telefono, e probabilmente possiamo inviare un'offerta speciale come un sms. reindirizzare l'utente al successo() funzione, che è una vista semplice con questo messaggio di successo:

    
Attivare

Successo

Grazie, il tuo account è stato attivato!

Passaggio 7: il codice del controller finale

Questo è il codice del controller di registrazione finale:

 la classe Signup estende Controller function Signup () parent :: Controller ();  function index () if (get_cookie ('signed')) redirect ('signup / activate');  $ this-> config-> load ('countries', true); $ data ['countries'] = $ this-> config-> item ('countries'); $ this-> load-> view ('signup', $ data);  function process () $ this-> load-> library ('form_validation'); if ($ this-> form_validation-> run ()) $ signup = array (); $ signup ['name'] = $ this-> input-> post ('name'); $ signup ['email'] = $ this-> input-> post ('email'); $ signup ['country'] = $ this-> input-> post ('country'); $ signup ['mobile'] = $ this-> input-> post ('country'). $ this-> input-> post ('mobile'); // genera il codice di attivazione univoco mt_rand (); $ signup ['activation'] = rand (11111, 99999); // inserisce in db $ this-> db-> insert ('users', $ signup); // invia auth sms // se negli Stati Uniti se ($ this-> input-> post ('country') == 1) $ this-> load-> library ('smsmatrix_api'); $ this-> smsmatrix_api-> send_sms ($ signup ['mobile'], $ signup ['activation']);  else $ this-> load-> library ('clickatell_api'); $ this-> clickatell_api-> send_sms ($ signup ['mobile'], $ signup ['activation']);  set_cookie ('signed', $ this-> db-> insert_id (), 86500); // reindirizza il reindirizzamento ('registrati / attiva');  else $ this-> config-> load ('countries', true); $ data ['countries'] = $ this-> config-> item ('countries'); $ this-> load-> view ('signup', $ data);  function check_email_exists ($ email) $ rs = $ this-> db-> where ('email', $ email) -> count_all_results ('users'); $ this-> form_validation-> set_message ('check_email_exists', 'Siamo spiacenti, questa email esiste già!'); se ($ rs < 1 ) return true;  return false;  function activate() if( !get_cookie('signed') ) redirect('signup');  $data['error'] ="; if( $this->input-> post ('signup')) // se inviato $ where = array ('uid' => get_cookie ('signed'), 'activation' => $ this-> input-> post ('code') ); $ result = $ this-> db-> dove ($ where) -> count_all_results ('users'); se ($ risultato < 1 ) $data['error'] = '
Il codice di autorizzazione non è corretto!
'; else delete_cookie ('signed'); $ this-> db-> set (array ('active' => 1, 'activation' => ")) -> dove ('uid', get_cookie ('signed')) -> update ('users'); reindirizzamento ('signup / success'); $ this-> load-> view ('activate', $ data); function success () $ this-> load-> view ('success');

Conclusione

Grazie per aver letto questo tutorial! Poiché il risultato di questo tutorial è limitato e il test è costoso, non abbiamo un'anteprima, ma puoi eseguirlo dalle fonti fornite con i tuoi account di prova. Questa è solo una piccola parte di ciò che può essere fatto con Clickatell e SmsMatrix. Ci sono molte cose che puoi provare, come l'invio a più telefoni, la pubblicità di massa, l'invio tramite e-mail di un file vocale per creare un messaggio vocale, messaggi TTS e così via. Spero ti sia piaciuto il mio tutorial e spero che tu lo usi nella tua applicazione SMS di prossima generazione! Grazie per aver seguito il mio tutorial e scritto nei commenti quello che hai scoperto!