Système de validation par SMS

E
ERICSTAMANT
Système de validation par SMS

Avec les téléphones mobiles à portée de pratiquement tout le monde, de plus en plus de services utilisent la double authentification SMS ou encore la validation de téléphone par SMS. Cela évite les connexions et inscriptions via des bots, et permet de valider en quelque sorte que la personne existe bel et bien, et que son numéro de téléphone est valide.

Dans ce tutoriel, je vais vous montrer une technique simple à mettre en place et peu dispendieuse avec la plateforme SMS Gateway. Celle-ci fonctionne par crédit (1 sms = 1 crédit), et vous pouvez débuer dès 1000 crédits (10 dollars pour 1000 validations SMS!). À noter que ce tutoriel sera réalisé avec PHP.

Inscription à SMS Gateway

En premier lieu, vous devrez vous inscrire à SMS Gateway (www.smsgateway.ca). Suite à votre inscription, vous aurez droit à 50 crédits pour tester les services SMS. Attention, ces crédits seront uniquement valides pour envoyer des SMS à votre téléphone portable (le numéro indiqué lors de votre inscription).

Suite à la validation de votre compte, connectez-vous à l’interface de SMS Gateway. Ensuite, rendez-vous sur l’onglet “API” puis récupérer la série de chiffres et de lettres suite à “Your Account Key”. Il s’agît de votre clée API.

Explication de la procédure de validation SMS

Avant de procéder à la fabrication de notre système de validation par SMS, je vous explique brièvement comment va fonctionner votre application.

Supposons que vous désirez valider, à l’inscription d’un utilisateur sur votre plateforme, que son numéro de cellulaire existe réellement et qu’il lui appartient.

Donc, dans votre formulaire d’inscription, vous devrez créer un champ obligatoire, afin que lors de l’inscription, votre utilisateur doit y indiquer son numéro de portable.

Ensuite, lors de l’envoie de ce formulaire d’inscription, vous allez générer un code aléatoire, l’enregistrer dans une variable session (vous pouvez également utiliser un COOKIE ou l’enregistrer dans votre base de données). Puis, envoyer un SMS à votre utilisateur avec ce code. La norme est généralement d’envoyer un code à 6 chiffres.

Nous redirigerons alors l’utilisateur vers un formulaire, où il devra entrer les 6 chiffres reçu via SMS, que nous validerons ensuite avec notre variable session. Si les chiffres indiqués sont les bons, nous pourrons alors activer le compte de notre nouvel utilisateur!

Procédure de validation par SMS avec SMS Gateway

Prêt? Passons maintenant à l’action!

Le but de ce tutoriel n’est pas de vous montrer comment coder un formulaire d’inscription et le script de réception en PHP, mais bien de vous montrer l’aspect de validation par SMS.

Donc, suite à l’envoie du formulaire, vous allez récupérer le numéro de téléphone. Supposons que vous procédez ainsi :

$phone = $mysqli->real_escape_string($_POST['phone']);

Maintenant, nous allons générer un code à 6 chiffres, que nous allons associer à un variable session :

$_SESSION['verification_code'] = rand(100000,999999);

La fonction "rand" de PHP va générer un code de 6 chiffres, compris entre 100000 et 999999.

Maintenant, nous allons envoyer ce fameu SMS!

SMSGateway propose un bout de code très simple d’utilisation. Nous n’avons pas besoin de charger une librairie ou SDK quelconque. Nous allons ajouter à cela un try catch pour récupérer l’erreur, s’il y a, ainsi qu’une petite fonction pour retirer tous les caractères spéciaux de notre numéro.

$sms_gateway_key = "VOTRE CLÉ API (YOUR ACCOUNT KEY)";

class SMSParam {
    public $CellNumber;
    public $AccountKey;
    public $MessageBody;
}

$client = new SoapClient('http://www.smsgateway.ca/sendsms.asmx?WSDL');
$parameters = new SMSParam;

try {
	$phone = preg_replace("/[^0-9]/", "", $phone);

	$parameters -> CellNumber = $phone;
	$parameters -> AccountKey = $sms_gateway_key;
	$parameters -> MessageBody = 'Voici votre numero de validation : '.$_SESSION['verification_code'].'. Merci de votre inscription!.';

	$Result = $client->SendMessage($parameters);
} catch (Exception $e) {
  echo 'Caught exception: '.$e->getMessage();
  exit();
}

Suite à l’envoie du SMS, rédirigez votre utilisateur vers une page où il sera invité à entrer le code de validation. Suite à cela, vous n’aurez qu’à vérifier si la série de chiffres entrée correspond à votre variable session.

Je suggère également de proposer à l’utilisateur un bouton qui permet de renvoyer un code, et une option pour modifier son numéro de téléphone, au cas où il aurait fait une erreur ou bien entré un numéro de téléphone fix.

En terminant, je voudrais vous faire part d’une petite observation. Lors de mes tests, l’envoie de SMS avec les crédits gratuits semblaient être un peu plus long pour la réception. Lors de l’achat de crédit, c’était quasi instantanée.