Vous n'êtes pas identifié.
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 :
<?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 :
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 :
//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
Dernière modification par galphanet (24 Mar 2011 19:28:33)
Hors ligne