Swisslinux.org

− The GNU/Linux crossroads in Switzerland −

 

Language

 

The Forum

You are not logged in.

#1 24 Mar 2011 18:57:39

galphanet
Affranchi(e)
 
Registered: 14 Oct 2009
Posts: 1

Script PHP pour XtraZone

Hello,

Vous connaissez certainement le site de swisscom www.xtrazone.ch qui propose d'envoyer 500 sms par mois gratuitement pour les clients moins de 26 ans.

Avec l'ancien site, beaucoup de gens avaient fait des scripts pour automatiser l'envoi de SMS.
Mais depuis l'arrivée du nouveau site, personne ne s'y est intéressé, certainement pour deux raisons :
- le nouveau est bien plus compliqué
- c'est clairement mis dans les CG qu'on a pas le droit d'automatiser l'envoi de messages

Quoi qu'il en soit ça me rend quand même bien service de pouvoir envoyer de temps à autre des SMS avec des scripts PHP...

Voici donc ma class pour l'envoi de SMS :

Code:

<?php

class Swisscom {
 
    public $authenticated; // True if we logged in successfully
    private $headers;  
    private $lastURL;  // The previous URL as visited by curl
    private $tmpFile;  // Where we store our cookies
    private $user;
    private $password;
    private $response;
    private $captcha;

    public function __construct($user,$password) {
         
        $this->tmpFile = tempnam(sys_get_temp_dir(), 'swisscom');
        $this->authenticated = false;
            
        $this->headers = array('X-Header-XtraZone: XtraZone');
        $this->user = urlencode($user);
        $this->password = urlencode($password);

        // Login
        $post = 'action=getCaptcha&passphrase=&token=&do_sso_login=0&sso_user='.$this->user.'&sso_password='.$this->password;
        $html = $this->curlPost("https://xtrazone.sso.bluewin.ch/index.php/14,49,ajax_json,,,329/", $post, $this->lastURL, $this->headers, false);

        //decode response
        $this->response = json_decode($html);
        
        $this->captcha = $this->curlGet("http:".$this->response->img,null,null,false);
            
    }
    
    public function getCaptcha() {
        return $this->captcha;
    }
    
    
    public function sendCaptcha($captchaCode) {
    
        //send the captcha
        $post = 'action=ssoLogin&token='.$this->response->token.'&do_sso_login=1&sso_user='.$this->user.'&sso_password='.$this->password.'&passphrase='.$captchaCode;

        $html = $this->curlPost("https://xtrazone.sso.bluewin.ch/index.php/14,49,ajax_json,,,329/", $post, $this->lastURL, $this->headers, false);

        $this->response = json_decode($html);    
    

        if($this->response->status == "login_ok") {
            $this->authenticated = true;
            return true;
        }
        else
            return false;

    }
 
    public function sendMessage($number,$text) {
         
         if(!$this->authentificated)
             die("Cannot use this function without being logged in !");
         
 
         $post = "receiversnames=".$number."&recipients=%5B%5D&messagebody=".urlencode($text)."&attachments=&attachmentId=";
         $html = $this->curlPost("https://xtrazone.sso.bluewin.ch/index.php/12,54,ajax,,,285/?route=%2Fmessaging%2Foutbox%2Fsendmobilemsg", $post, $this->lastURL, $this->headers, false);    
 
         $response = json_decode($html);
         
         /*
         {"httpCode":200,"isException":false,"mimeType":"application\/json","isOperationResponse":true,"content":{"headline":"Traitement\u00a0r\u00e9ussi.","messages":{"generic":["Le SMS\/MMS est envoy\u00e9."],"input":[],"operation":[]},"isError":false,"refreshContent":""}}
         */
         
         return (int)(!$response->content->isError);
    }
 
    private function curlGet($url, $referer = null, $headers = null, $return_headers = true) {
            $ch = curl_init($url);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
            curl_setopt($ch, CURLOPT_COOKIEFILE, $this->tmpFile);
            curl_setopt($ch, CURLOPT_COOKIEJAR, $this->tmpFile);
            curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
            curl_setopt($ch, CURLOPT_AUTOREFERER, true);
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
            curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_1; en-us) AppleWebKit/531.9 (KHTML, like Gecko) Version/4.0.3 Safari/531.9");
            if(!is_null($referer)) curl_setopt($ch, CURLOPT_REFERER, $referer);
            if(!is_null($headers)) curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

            if($return_headers) curl_setopt($ch, CURLOPT_HEADER, true);
            // curl_setopt($ch, CURLOPT_VERBOSE, true);

            $html = curl_exec($ch);

            if(curl_errno($ch) != 0)
            {
                throw new Exception("Error during GET of '$url': " . curl_error($ch));
            }

            $this->lastURL = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL);

            return $html;
    }

    private function curlPost($url, $post_vars = null, $referer = null, $headers = null, $return_headers = true) {
            if(is_null($post_vars))
                $post_vars = '';

            $ch = curl_init($url);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
            curl_setopt($ch, CURLOPT_COOKIEFILE, $this->tmpFile);
            curl_setopt($ch, CURLOPT_COOKIEJAR, $this->tmpFile);
            curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
            curl_setopt($ch, CURLOPT_AUTOREFERER, true);
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
            curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_1; en-us) AppleWebKit/531.9 (KHTML, like Gecko) Version/4.0.3 Safari/531.9");
            if(!is_null($referer)) curl_setopt($ch, CURLOPT_REFERER, $referer);
            curl_setopt($ch, CURLOPT_POST, true);
            curl_setopt($ch, CURLOPT_POSTFIELDS, $post_vars);
            if(!is_null($headers)) curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

            if($return_headers) curl_setopt($ch, CURLOPT_HEADER, true);
        //    curl_setopt($ch, CURLOPT_VERBOSE, true);

            $html = curl_exec($ch);

            if(curl_errno($ch) != 0)
            {
                throw new Exception("Error during POST of '$url': " . curl_error($ch));
            }

            $this->lastURL = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL);

            return $html;
        }
            
}

//USAGE

//$swisscom = new Swisscom('username','password');
//$swisscom->getCaptcha();
//$swisscom->sendCaptcha($captchaCode);
//$swisscom->sendMessage('numero', "message");

?>

Si vous voulez montrer le captcha à un utilisateur, vous pouvez le faire ainsi :

Code:

header('Content-type: image/png');
$swisscom->getCaptcha();

et donner le code avec la fonction $swisscom->sendCaptcha($captchaCode);

Si vous voulez automatiser le décodage du captcha, je peux vous recommander le site www.deathbycaptcha.com
Il vous livre la réponse en environ 20 secondes.

Voici un exemple avec leur API :

Code:

        //save captcha as a file
        $captchaFile = tempnam(sys_get_temp_dir(), 'captcha');
        $fp = fopen($captchaFile, 'w');
        fwrite($fp, $captcha_content);
        fclose($fp);


    //    Decode captcha

        require_once './captcha/dbc_client.php';
        $client = new DeathByCaptcha_Client();
        if ($client->login('user', 'password')) {
               $captchaCode = $client->decode($captchaFile);
        }

Il y a certainement moyen de le faire avec un système sur le serveur mais je n'ai pas eu le temps de m'occuper de ça.

voilà, amusez-vous bien et bonne utilisation smile

Last edited by galphanet (24 Mar 2011 19:28:33)

Offline

 

Board footer

Powered by FluxBB