Bienvenue dans la deuxième partie de ce didacticiel sur l’utilisation de la technologie SMS pour créer un formulaire d’inscription. Auparavant, dans la première partie de cette série, nous utilisions HTML, JavaScript, MySQL et PHP pour créer un formulaire d’inscription. Dans ce tutoriel, nous aborderons l'intégration avec une passerelle SMS et le code nécessaire pour terminer le traitement du formulaire d'inscription..
Dans la première partie de cette série, nous avons créé deux fonctions: inscription et activation. Comme les noms l'indiquent, le premier est utilisé pour l'inscription au formulaire et le second pour la saisie du code d'activation. Nous allons continuer en montrant comment utiliser deux services de passerelle SMS différents pour envoyer des messages. Qu'est-ce qu'une passerelle SMS? Il s’agit essentiellement d’un service permettant d’accéder au trafic de réseau mobile avec un ou plusieurs opérateurs de téléphonie cellulaire. Alors, pourquoi utiliser deux services différents? Mon premier choix était Clickatell, mais pour pouvoir envoyer des SMS aux États-Unis sans shortcode, je devais trouver un autre service. SmsMatrix est un excellent service qui peut envoyer des messages dans de nombreux pays, y compris aux États-Unis. J'aurais pu utiliser SmsMatrix seul, mais j'utiliserai les deux services pour montrer comment vous permettriez au serveur de sélectionner un service en fonction du pays dans lequel vous vous trouvez. le ciblage. Cela peut bien se produire dans le monde réel, car vous pouvez faire varier les passerelles pour économiser sur le coût par message ou comme sauvegarde au cas où le premier service que vous essayez répondrait avec un code d'erreur..
Clickatell fait partie des plus grandes passerelles SMS en ligne disponibles. Selon les informations sur son site Web, Clickatell prend actuellement en charge 221 pays et territoires. Ils ont beaucoup de fonctionnalités, y compris les SMS simples, SMS bidirectionnels et SMS shortcode. Ils ont également une base d'utilisateurs impressionnante, servant plus de 10 000 clients à travers le monde. Parmi ces clients figurent CNN, Continental Airlines, Vodafone, Oracle, Nokia et d’autres grands acteurs de l’informatique et des affaires. La bonne chose à propos de Clickatell est que vous pouvez créer un compte gratuit et utiliser 10 crédits gratuits pour envoyer des SMS pendant votre apprentissage. Les passerelles SMS utilisent généralement des crédits que vous achetez pour envoyer des messages SMS. Le montant des crédits d’un message SMS unique dépendra du lieu (géographique) où le message est envoyé. Allez sur Clickatell et créez un compte gratuit. Lorsque vous envoyez avec les crédits de test, le contenu du message sera remplacé par des informations sur les tests, mais cela devrait suffire à nos besoins. Lorsque vous vous inscrivez, faites attention à vous inscrire à Clickatell Central et sélectionnez Couverture hors États-Unis, car vous avez besoin d'un numéro de code abrégé spécial pour l'envoi vers les États-Unis..
Après avoir activé votre compte et vous être connecté avec succès, cliquez sur le lien "cliquez ici pour créer une nouvelle connexion". Cela va configurer un api_id avec lequel vous pouvez envoyer des SMS.
Sélectionnez HTTP comme type de connexion. Clickatell offre de nombreuses options pour l'envoi de SMS, la plus simple étant probablement d'envoyer un email à une adresse donnée. Ils prennent en charge de nombreux protocoles tels que XML, SOAP et même FTP pour la messagerie en masse. La connexion HTTP est tout ce dont nous aurons besoin.
Continuez et cliquez sur Obtenir l'ID de l'API. Vous obtiendrez une page avec un exemple de chaîne. Copiez l'exemple de chaîne dans votre navigateur et remplacez le nom d'utilisateur, le mot de passe et les paramètres par votre nom d'utilisateur, votre mot de passe et votre numéro de téléphone mobile. Vous obtiendrez un résultat dans le navigateur avec un message "OK" ou "ERR" suivi d'un code. Voici ce dont nous avons besoin pour construire notre bibliothèque Clickatell.
Pour commencer à créer la bibliothèque Clickatell, créez un nouveau fichier appelé Clickatell_api.php dans le application / bibliothèques dossier. Entrez le code suivant:
class Clickatell_api // change ceci en utilisateur réel et mot de passe private $ username = 'username'; private $ password = 'password'; private $ api_id = 'api id'; private $ url = 'http://api.clickatell.com/http/sendmsg'; fonction publique send_sms ($ phone, $ text) $ url = $ this-> url. '? utilisateur ='. $ this-> nom d'utilisateur. '& password ='. $ this-> mot de passe. '& api_id ='. $ this-> api_id. '& to ='. $ téléphone. '& text ='. urlencode ($ text); $ r = @file ($ url); $ res = substr ($ r [0], 0, 2); if ($ res == 'ER') return false; return true;
Le code est assez explicite, mais avant de commencer à l'examiner, notez que dans un environnement de production, ce script doit résider dans un répertoire situé en dehors de la racine Web ou s'appuyer sur la configuration de votre serveur pour empêcher tout accès public. La dernière chose que vous voulez, c'est que quelqu'un puisse appeler ce script directement depuis un navigateur ou un autre script..
Dans l'exemple ci-dessus, nous créons une classe Clickatell_api comportant quelques membres: nom d'utilisateur, mot de passe, api_id et l'URL sur laquelle nous allons nous appuyer. Remplacez-le par votre propre nom d'utilisateur, mot de passe et api_id. Dans la classe, nous avons un seul envoyer un SMS() fonction qui accepte un numéro de téléphone et le message texte à envoyer. La classe construit l'URL en concaténant les membres de la classe et en formant une URL finale. Nous utilisons urlencode () pour encoder le texte dans l'URL et le transmettre ensuite à fichier(). Bien sûr, pour les serveurs dont la fonction file () est bloquée, vous pouvez utiliser CURL, mais ce n’est pas l’intérêt du tutoriel. Nous obtenons alors le résultat et utilisons subtr () pour obtenir les deux premiers caractères de la première ligne. Si la réponse est 'ER', qui provient de ERROR, nous retournons false, sinon nous retournons true. C'est tout ce que la classe fait, mais il est toujours préférable d'utiliser une classe car vous pouvez la réutiliser ultérieurement dans n'importe quelle application..
SmsMatrix est un autre service puissant. Celui-ci comporte des éléments beaucoup plus avancés, tels que la conversion texte-à-voix, la réponse programmable ("s'il vous plaît appuyez sur 2 pour oui ou 1 pour non"), et les messages vocaux, mais la chose la plus importante pour nous est que ce n'est pas vous obliger à avoir un numéro de code court pour envoyer des SMS aux États-Unis. Ils ont également une option de compte gratuit qui vous donne 5 crédits pour tester votre application SMS. La configuration avec SmsMatrix est plus simple que Clickatell: vous créez le compte, puis vous utilisez votre nom d'utilisateur et votre mot de passe pour envoyer le message SMS. Vous aurez besoin du guide d’envoi de SMS, mais l’idée est la même: vous formez une URL spéciale et vous y accédez avec PHP. Créons une bibliothèque smsmatrix_api pour cela. Créer un fichier nommé Smsmatrix_api.php dans le application / bibliothèques dossier et écrivez ce qui suit:
class Smsmatrix_api // change ceci en utilisateur réel et mot de passe private $ username = 'username'; private $ password = 'password'; private $ url = 'http://www.smsmatrix.com/matrix'; fonction publique send_sms ($ phone, $ text) $ url = $ this-> url. '? nomutilisateur ='. urlencode ($ this-> nomutilisateur). '& password ='. urlencode ($ this-> mot de passe). '& phone ='. $ téléphone. '& txt ='. urlencode ($ text); $ r = @file ($ url); $ res = substr ($ r [2], 11); if ($ res> 399) retourne faux; return true;
De nouveau, nous créons une classe avec le nom d’utilisateur, le mot de passe et les membres et créons le même. envoyer un SMS() une fonction. Nous l'avons appelé de la même façon, afin que les classes puissent être interchangeables. Nous créons l'URL finale, nous y accédons avec fichier() et nous obtenons le code de résultat. Le code de résultat est dans la 3ème ligne de la chaîne de résultat, nous utilisons donc subtrs ($ r [2], 11) pour obtenir le nombre après la chaîne 'STATUSCODE ='. J'ai reçu les codes d'erreur du guide pdf et, fondamentalement, tout code inférieur à 399 est un succès, donc nous retournons true, sinon nous renvoyons false.
Ok, il est temps de revenir à notre contrôleur d'inscription. Aller à la fonction processus() et entrez le code suivant après l’insertion de la base de données:
// envoie les SMS authentiques si aux États-Unis si ($ this-> input-> post ('pays') == 1) $ this-> charger-> bibliothèque ('smsmatrix_api'); $ this-> smsmatrix_api-> send_sms ($ signup ['mobile'], $ signup ['activation']); else // quand ce n'est pas USA $ this-> load-> library ('clickatell_api'); $ this-> clickatell_api-> send_sms ($ signup ['mobile'], $ signup ['activation']);
Tout d’abord, nous vérifions le code pays. Si c’est 1 (c’est-à-dire États-Unis), nous utiliserons SmsMatrix. $ this-> load-> library ('smsmatrix_api'). Si le pays n'est pas les États-Unis, nous chargeons le clickatell_api. De toute façon, nous utilisons envoyer un SMS() pour envoyer le code d'activation au numéro de mobile. Vous remarquerez que le numéro de mobile est déjà inséré dans la base de données en concaténant la valeur du pays (qui contient le préfixe de ce pays) avec le numéro de mobile. Nous pourrions en fait compléter le deuxième paramètre du chargement de la bibliothèque pour y accéder avec un certain nom, et utiliser uniquement send sur la bibliothèque:
// envoie les SMS authentifiés si aux États-Unis si ($ this-> input-> post ('pays') == 1) $ this-> charger-> bibliothèque ('smsmatrix_api', 'sms_api'); else // lorsqu'il n'est pas dans US $ this-> load-> library ('clickatell_api', 'sms_api'); $ this-> sms_api-> send_sms ($ signup ['mobile'], $ signup ['activation']);
De cette façon, nous ne chargeons que la bibliothèque appropriée portant le même nom, en y accédant avec 'sms_api', mais c'est la même chose. Fondamentalement, les deux bibliothèques partagent la même interface. De plus, si vous obtenez false comme valeur de retour, vous pouvez envoyer le SMS avec l’autre bibliothèque en tant que sauvegarde..
Si nous définissons un cookie "signé" après l'envoi du message SMS, nous pouvons l'utiliser ultérieurement pour empêcher l'envoi de plusieurs messages. Nous devons le faire de sorte que, lorsque l'utilisateur quitte le formulaire d'inscription et recommence plus tard pour essayer et s'inscrire à nouveau, nous le redirigeons automatiquement vers la fonction d'activation. Ajoutez ceci dans le haut de la s'inscrire() une fonction:
function index () if (get_cookie ('signé')) redirect ('signup / activate'); $ this-> config-> load ('countries', true); $ data ['countries'] = $ this-> config-> item ('countries'); $ this-> load-> view ('inscription', $ data);
Ainsi, si vous vous inscrivez une fois et que vous essayez d'accéder à nouveau au formulaire d'inscription, vous obtiendrez la même fonction d'activation qui vous demandera d'entrer le code d'activation. Prenons soin de l'activation suivante.
Nous allons maintenant créer le processus d'activation:
function activate () if (! get_cookie ('signé')) redirect ('signup'); $ data ['error'] = "; if ($ this-> input-> post ('inscription')) // si envoyé $ where = array ('uid' => get_cookie ('signé'), ' activation '=> $ this-> input-> post (' code ')); $ result = $ this-> db-> où ($ où) -> count_all_results (' utilisateurs '); if ($ result < 1 ) $data['error'] = 'Le code d'autorisation n'est pas correct!'; else delete_cookie ('signé'); $ this-> db-> set (array ('active' => 1, 'activation' => ")) -> où ('uid', get_cookie ('signé')) -> update ('utilisateurs'); redirection ('inscription / succès'); $ this-> load-> view ('activer', $ data);
Permettez-moi de vous expliquer ce qui se passe ici: je fais l'inverse. Si le cookie n'est pas défini, je le redirige vers l'inscription. Ensuite, je mets le message d'erreur à ", car nous n'avons aucune erreur pour le moment. Si le champ de post-inscription a été défini (c'est-à-dire si le formulaire a été soumis), je cherche une entrée dans la table avec l'identifiant de le cookie et l'activation sont égaux au code soumis. Il est important de ne jamais avoir un identifiant égal à 0 dans la base de données, car cela rendrait le cookie faux, et il y aurait une boucle de redirection. Cette vérification peut être effectuée, mais il est préférable de le mettre dans la base de données.
Je compte les lignes renvoyées et, si je n'en reçois pas, je signale une erreur indiquant que l'autorisation n'est pas correcte. Comme l'utilisateur ne peut avoir qu'un certain code d'activation, lorsque vous entrez un code erroné, la base de données ne trouvera aucune ligne et renverra 0. Si nous trouvons une ligne, nous supprimons le cookie, car nous n'en avons plus besoin, nous définissons la colonne active sur 1 et l'activation sur "et mettons à jour la table. À partir de ce moment, l'utilisateur est activé et nous savons avec certitude qu'il s'agit de son téléphone, et nous pouvons probablement envoyer une offre spéciale en tant que SMS. J'ai également rediriger l'utilisateur vers le Succès() function, qui est une vue simple avec ce message de réussite:
Activer Succès
Merci, votre compte a été activé!
C'est le code du contrôleur d'inscription final:
la classe Signup étend le contrôleur function Signup () parent :: Controller (); function index () if (get_cookie ('signé')) redirect ('signup / activate'); $ this-> config-> load ('countries', true); $ data ['countries'] = $ this-> config-> item ('countries'); $ this-> load-> view ('inscription', $ 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 ('pays'). $ this-> input-> post ('mobile'); // génère le code d'activation unique mt_rand (); $ inscription ['activation'] = rand (11111, 99999); // insère dans db $ this-> db-> insert ('utilisateurs', $ signup); // envoie auth sms // si aux États-Unis si ($ this-> input-> post ('pays') == 1) $ this-> charger-> bibliothèque ('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 ('signé', $ this-> db-> insert_id (), 86500); // redirect redirect ('signup / activate'); else $ this-> config-> load ('countries', true); $ data ['countries'] = $ this-> config-> item ('countries'); $ this-> load-> view ('inscription', $ data); function check_email_exists ($ email) $ rs = $ ceci-> db-> où ('email', $ email) -> count_all_results ('utilisateurs'); $ this-> form_validation-> set_message ('check_email_exists', 'Nous sommes désolés, cet email existe déjà!'); si ($ rs < 1 ) return true; return false; function activate() if( !get_cookie('signed') ) redirect('signup'); $data['error'] ="; if( $this->input-> post ('inscription')) // si envoyé $ où = array ('uid' => get_cookie ('signé'), 'activation' => $ this-> input-> post ('code') ) $ result = $ this-> db-> where ($ where) -> count_all_results ('utilisateurs'); si ($ résultat < 1 ) $data['error'] = 'Le code d'autorisation n'est pas correct!'; else delete_cookie ('signé'); $ this-> db-> set (array ('active' => 1, 'activation' => ")) -> où ('uid', get_cookie ('signé')) -> update ('utilisateurs'); redirection ('inscription / succès'); $ this-> load-> view ('activer', $ data); function success () $ this-> load-> view ('success');
Merci d'avoir lu ce tutoriel! Le résultat de ce didacticiel étant faible et les tests coûtant cher, nous n’avons pas d’aperçu, mais vous pouvez l’exécuter à partir des sources fournies avec vos propres comptes de test. Ceci n'est qu'une petite partie de ce que l'on peut faire avec Clickatell et SmsMatrix. Vous pouvez essayer beaucoup de choses, comme envoyer à plusieurs téléphones, faire de la publicité de masse, envoyer un fichier vocal par courrier électronique pour créer un message vocal, des messages TTS, etc. J'espère que vous avez apprécié mon tutoriel et que vous l'utiliserez dans votre application SMS de prochaine génération! Merci d'avoir suivi mon tutoriel et d'écrire dans les commentaires ce que vous avez trouvé!