Envoyer des notifications SMS gratuitement grâce à Free Mobile

free-mobileBien que ce ne soit plus une nouveauté au jour d’aujourd’hui, il y a quelques semaines, Free Mobile mettait à disposition une API permettant d’envoyer des notifications SMS directement sur son téléphone lié à son compte Free Mobile.

Je me suis dit que ce serait sympa à intégrer au logiciel d’alerte Leboncoin que je maintient sur GitHub. C’est chose faite avec la version 2.4 qui permet maintenant d’envoyer les alertes par SMS grâce à la nouvelle API de Free Mobile.

Pour l’occasion, j’ai écris une petite classe pour prendre en charge l’envoi des SMS. Je vous partage donc le code (c’est simple, mais peut toujours servir) :

<?php

namespace SMS;

class FreeMobile
{
    protected $_url = "https://smsapi.free-mobile.fr/sendmsg";
    protected $_user;
    protected $_key;

    protected $_curl;

    public function __construct()
    {
        $this->_curl = curl_init();
        curl_setopt($this->_curl, CURLOPT_SSL_VERIFYPEER, false);
    }

    public function __destruct()
    {
        curl_close($this->_curl);
    }

    /**
     * Envoi un message par SMS.
     * @param string $msg
     * @throws \Exception
     */
    public function send($msg)
    {
        $msg = trim($msg);
        if (!$this->_user || !$this->_key || empty($msg)) {
            throw new \Exception("Un des paramètres obligatoires est manquant", 400);
        }
        curl_setopt($this->_curl, CURLOPT_URL, $this->_url."?user=".$this->_user.
            "&pass=".$this->_key.
            "&msg=".urlencode($msg));
        curl_exec($this->_curl);
        if (200 != $code = curl_getinfo($this->_curl, CURLINFO_HTTP_CODE)) {
            switch ($code) {
                case 400: $message = "Un des paramètres obligatoires est manquant."; break;
                case 402: $message = "Trop de SMS ont été envoyés en trop peu de temps."; break;
                case 403: $message = "Vous n'avez pas activé la notification SMS dans votre espace abonné Free Mobile ou votre identifiant/clé est incorrect."; break;
                case 500: $message = "erreur sur serveur Free Mobile."; break;
                default: $message = "erreur inconnue.";
            }
            throw new \Exception($message, $code);
        }
        return $this;
    }

    /**
    * @param string $user
    * @return \SMS\FreeMobile
    */
    public function setUser($user)
    {
        $this->_user = $user;
        return $this;
    }

    /**
    * @return string
    */
    public function getUser()
    {
        return $this->_user;
    }

    /**
    * @param string $key
    * @return \SMS\FreeMobile
    */
    public function setKey($key)
    {
        $this->_key = $key;
        return $this;
    }

    /**
    * @return string
    */
    public function getKey()
    {
        return $this->_key;
    }
}

Elle exploite cURL, veillez à l’avoir installée.
Je l’ai placée dans un espace de nom « SMS » que vous pouvez enlever si vous ne souhaitez pas utiliser les espaces de nom.

L’usage est extrêmement simple :

// inclure ici le fichier de la classe
require "sms/FreeMobile.php";

$sms = new SMS\FreeMobile();

/**
 * configure l'ID utilisateur et la clé disponible dans
 * le compte Free Mobile après avoir activé l'option.
 */
$sms->setKey("La clé générée")
    ->setUser("votre id Free Mobile");

try {
    // envoi d'un message
    $sms->send("Hello World !");
} catch (Exception $e) {
    // le monde n'est pas parfait, il y aura
    // peut-être des erreurs.
    echo "Erreur sur envoi de SMS: (".$e->getCode().") ".$e->getMessage();
}

À vous de trouver des cas d’utilisation maintenant 😉

40 réflexions sur « Envoyer des notifications SMS gratuitement grâce à Free Mobile »

  1. Confirmation ! En testant le logiciel Windows Freemobile_SMS_Notifier.zip, vous pourrez constater par vous même que l’envoi du SMS fonctionne si vous l’envoyez sur votre ligne FREE, MAIS pas sur un autre numéro ! (pour ma part, un SFR)

    Service gratuit mais verrouillé ;o(((

  2. Verrouillé ? Il n’a jamais été question de pouvoir envoyer des SMS vers d’autre numéro que celui du compte Free Mobile. Tous les sites en parlant le précisaient. Il n’est pas difficile de comprendre pourquoi …

  3. Merci pour le script. Par contre, le CURL sur un HTTPS ne fonctionne pas pour moi. Cela me faisait une erreur: SSL: certificate subject name ‘*.free.fr’ does not match target host name ‘smsapi.free-mobile.fr’ (avec la fonction curl_error)

    J’ai du passé par un file_get_contents et récuper son http_code.

  4. Étrange l’erreur, je n’ai pas rencontré ce souci.
    Avec : curl_setopt($this->_curl, CURLOPT_SSL_VERIFYPEER, false);
    On évite une erreur sur les certificats non « certifié ». Mais là, je ne vois pas en quoi est du ton erreur.
    Si j’ai le temps, j’essayerai de creuser.

  5. J’ai réussi à le faire passer en mettant:
    curl_setopt($this->_curl, CURLOPT_SSL_VERIFYHOST, 0);
    le problème à mon avis vient d’un souci plutot serveur (côté DNS) donc le script n’y est pas pour grand chose.
    A+

  6. J’essaie depuis une page PHP hébergée chez Free (…) dans les pages perso.
    J’ai une box B&You, et je teste juste l’URL.
    Pour l’instant, j’obtiens « Firefox ne peut trouver le serveur à l’adresse smsapi.free-mobile.fr ».
    Le service serait déjà déconnecté ?

      • Merci pour l’info.
        Mais je tiens à envoyer les SMS depuis les pages perso Free.
        J’y arrive depuis une page PHP, maintenant je cherche un moyen de récupérer les codes d’erreur. Ça a pas l’air coton, beaucoup de méthodes sont bridées.

  7. Salut
    Quelqu’un a t’il noté si le numéro utilisé pour l’envoi est toujours le même SVP ?
    C’est pour pouvoir l’utiliser sur un service où le numéro d’envoi doit être connu pour passer, comme AndroidLost.

  8. OK le numéro de téléphone utilisé pour envoyer les notifs (alias N. de l’expéditeur) est son propre N. de téléphone Free Mobile. Merci.

    Avoir intégré les Status codes HTTP dans le script est une bonne idée pour savoir rapidement ou regarder en cas de schmilblick.
    Pour ma part un essai avec l’URL de l’API Free-SMS-notification, j’obtiens une page _blanche_ code source inclu ; autant dire que j’aimerai bien un status code ! La syntaxe utilisée est correcte sauf erreur perso : …/sendmsg?user=CODE&pass=KEY&msg=MESSAGE%20ENCODED

      • C’est exactement le même que vous. Un fichier php pour la class et un autre pour l’exécution du script. Les seules valeurs qui changent sont mon identifiant et le mot de passe.

        Je peux maintenant vous envoyer les scripts par mail si vous pensez pouvoir m’aider.

  9. Bonjour,

    J’ai essayé de vous contacter via GitHub mais impossible.
    Est-il possible d’ajouter votre script directement sur le chrome store ? Car quand je l’importe, celui-ci le bloque quelques minutes plus tard…

    Dommage de ne pas pouvoir profiter d’un super travail à cause de ce blocage. Merci 🙂

  10. Bonjour,

    Lignes 36 et 51 : throw new \Exception . L’anti-slash me signale une erreur Unexpected character in input: ‘\’ (ASCII=92)
    Je l’ai supprimé mais sans résultat satisfaisant.
    J’ai encore l’erreur suivante que je ne sais pas interpréter :
    FreeMobile chargéFreeMobile Object ( [_url:protected] => https://smsapi.free-mobile.fr/sendmsg [_user:protected] => 102xxxxx [_key:protected] => we6puExxxxxxxx [_curl:protected] => Resource id #5 ) Erreur sur envoi de SMS: (0) erreur inconnue.
    Une piste svp ?

  11. Bonjour,

    ça fonctionne avec EasyPHP 14.1 (en local)
    mais sur le site de FREE ou même OVH ça ne fonctionne pas.
    Voici l’erreur :
    Ligne 11 —–> $sms = new SMS\FreeMobile(); // new SMS\FreeMobile();

    Warning: Unexpected character in input: ‘\’ (ASCII=92) state=1 in /mnt/153/sda/3/4/geryko/sendsms.php on line 11
    Parse error: syntax error, unexpected T_STRING in /mnt/153/sda/3/4/geryko/sendsms.php on line 11
    Que se passe t-il ?
    Remède ?
    Merci
    (au départ j’avais tenté de tout mettre sur la racine, sans le dossier sms)

    • Sur Free, les appels distants ne sont pas autorisés, il n’est donc pas possible d’utiliser l’API sur leur hébergement.
      Pour OVH, ca devrait passer.

  12. Bonjour à tous,
    Sur free, j’ai réussi à passer en version PHP Version 5.6.8 (5.3 non disponible)
    grâce à ce lien :
    https://www.freenews.fr/freenews-edition-nationale-299/services-web-180/pages-perso-free-ajout-support-php-5-6

    Mais j’ai encore une erreur :
    Fatal error: Call to undefined function SMS\curl_init() in /var/www/sda/3/4/geryko/sms/FreeMobile.php on line 14

    ligne 14 —-> $this->_curl = curl_init();
    Que puis-je faire ?
    Merci

    • Comme indiqué plus haut, il n’est pas possible de faire des appels distants sur Free, donc impossible d’utiliser l’API sur leur hébergement.

  13. Bonjour, je souhaite intégrer votre système.
    Après test aucun sms n’arrive.
    PHP Version 5.5.9-1
    Petite question : ou entrez vous le numéro de téléphone sur lequel recevoir le sms ?

  14. Je sais pas vous mais je ne peux plus utiliser l’option sms de free depuis quelques jours, erreur 500 retournée: erreur sur serveur Free Mobile.

Répondre à David Annuler la réponse

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Notifiez-moi des commentaires à venir via email. Vous pouvez aussi vous abonner sans commenter.