[SMS] Une peau neuve pour mon script d’envoi de SMS
C'est avec une immense joie que je vous annonce qu'un des lecteurs de Dyrk nous apporte son petit lot de surprise !
En effet, il y a de cela 2 ans, j'écrivais cet article "PHP envoyer des SMS avec Bouygues"
Aussi, thebigworld, nous a déterré ce vieux post, pour lui donner une seconde vie !!!
Je souhaitais donc, vous permettre ... nous permettre de découvrir ainsi les nouveautés.
TheBigWorld, met à disposition un fichier php "Bouygues.php", développé exclusivement en mode "client", aussi, dans le cadre d'une utilisation intégrée à votre application Web, il vous faudra transformer un peu le script php :
if (sizeof($argv) <> 6) {
echo 'Usage: php ' . $argv[0] . ' username password MSISDN message maxLengthMessage' . PHP_EOL;
echo 'Username and password are credentials for Bouygues Telecom account website.' . PHP_EOL;
echo 'Enter several MSISDN separated by a ";" if you want.' . PHP_EOL;
exit();
}
$username = $argv[1];
$password = $argv[2];
$msisdn = $argv[3];
$message = urlencode($argv[4]);
$maxLengthMessage = $argv[5];...
par un
function SendBouygueSmS($username, $password, $msisdn){
$maxLengthMessage = 160;
...}
En mode client normal vous pourrez utiliser le script "run.sh" (après l'avoir configuré) :
#!/bin/bash
USERNAME=""
PASSWORD=""
MSISDN=""
MSG=$(cat)
MAX_LENGTH_MSG=160
De la manière suivante :
echo "Mon super message" | ./run.sh
TheBigWorld, compte à terme, intégrer le support d'envoi de sms depuis l'opérateur Free.
Attention :
Le GIT, où se trouve les scripts disposent d'un certificats auto-généré, votre navigateur lèvera sans doute une exception, mais vous pouvez y aller les yeux fermés.
Plus d'info ici : https://rpi-florentv.zapto.org/gitlist/send-sms.git/master/
Bonjour,
Juste deux-trois fautes dans le message « Le GIT, où se trouvent les scripts disposent d’un certificats auto-généré, votre navigateur lèvera sans doute une exception, mais vous pouvez y aller les yeux fermés. » => « Le GIT, où se trouve les scripts dispose d’un certificat auto-généré, votre navigateur lèvera sans doute une exception, mais vous pouvez y aller les yeux fermés. »
« TheBigWorld, met à disposition un fichier php « Bouygue.php », développé exclusivement » => « TheBigWorld, met à disposition un fichier php « Bouygues.php », développé exclusivement »
Ce message peut être supprimé après ;)
Bonjour,
Je suis toujours autant intéressé mais je galère pas mal.
Je ne voulais pas vous déranger avec mon manque de compétences, mais cela fait des jours et je n’arrive décidément à rien.
Si je veux faire simple : J’ai hébergé le fichier bouygues.php sur mon serveur… et maintenant ?!! Où faut-il que je déclare la fonction SendBouyguesSMS et quelles lignes sont à remplacer, ce n’est pas bien clair pour moi ?
Le fichier run.sh est-il indispensable ?
En fait, j’aurais bien besoin d’un pas à pas…
Merci d’avance de votre aide et de votre indulgence !
Coucou Dixours, si tu fais un petit peu de php, récupère le code qui est dans « Bouygues.php »
Tu place ce code :
function SendBouygueSmS($username, $password, $msisdn){
$maxLengthMessage = 160;
ici
}
Tu supprimes tous les endroits où les variables $username, $password, $msisdn sont associés à une valeurs, et hop, tu pourras mettre cette fonction dans ton code :)
PS : J’ai bien l’impression que le serveur git utilisé est en rade :/
C’est vraiment super sympa de me venir en aide !
Oui, je faisais du PHP à faible niveau, mais je me rends compte que j’ai beaucoup perdu (déjà que je n’avais pas grand chose !). Je pensais que ça reviendrait, comme le vélo, mais pas vraiment ! Et c’est plus difficile de prendre un travail de quelqu’un d’autre en cours de route par rapport à son propre travail que l’on connait de A à Z !
J’héberge le fichier bouygues.php sur mon serveur et quand j’ouvre mon navigateur à l’adresse http//monserveur.com/bouygues.php, je veux qu’un SMS soit envoyé au numéro pré-enregistré dans le script.
J’édite donc le fichier bouygues.php pour le transformer en :
<?php
function SendBouygueSmS($username, $password, $msisdn){
$maxLengthMessage = 160;
}
function curl_it($url, $fields) {
$fields_string = '';
foreach($fields as $key=>$value) {
$fields_string .= $key.'='.$value.'&';
}
$fields_string = rtrim($fields_string, '&');
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
if ($fields){
curl_setopt($ch, CURLOPT_POST , count($fields));
curl_setopt($ch, CURLOPT_POSTFIELDS , $fields_string);
}
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER , false);
curl_setopt($ch, CURLOPT_COOKIEFILE , 'cookie.txt');
curl_setopt($ch, CURLOPT_COOKIEJAR , 'cookie.txt');
curl_setopt($ch, CURLOPT_RETURNTRANSFER , 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION , true);
curl_setopt($ch, CURLOPT_HEADER, 1);
$result = curl_exec($ch);
$header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
$header = substr($result, 0, $header_size);
$datas = curl_getinfo($ch);
curl_close($ch);
return ['body' => $result, 'header' => $header];
}
function filter($message, $maxLengthMessage, $display = false) {
if ($display) {
echo 'Message initial: ' . PHP_EOL;
echo urldecode($message) . PHP_EOL;
}
if (strlen(urldecode($message)) > $maxLengthMessage) {
// replace all '\n' and '\r' by space
$message = preg_replace('/%0A/', '+', $message);
// remove extras spaces
$regex = '/\\+{2,}/';
$message = preg_replace($regex, '+', $message);
// trim message
$message = substr($message, 0, $maxLengthMessage);
// trim last '+'
$message = rtrim($message, '+');
// trim last '%0A'
$message = rtrim($message, '%0A');
}
if ($display) {
echo PHP_EOL;
echo 'Message tronqué: ' . PHP_EOL;
echo urldecode($message) .PHP_EOL;
echo 'Longueur du message tronqué: ' . strlen(urldecode($message)) . PHP_EOL;
}
return $message;
}
if(file_exists ('cookie.txt')) {
unlink('cookie.txt') ;
}
echo 'Authentification en cours …' . PHP_EOL;
$url = 'https://www.mon-compte.bouyguestelecom.fr/cas/login';
$output = curl_it($url, []);
$regex = '/Set-Cookie: JSESSIONID=(.*); Path=\\/cas\\/; HttpOnly/';
preg_match($regex, $output['header'], $matches);
$jsessionid = $matches[1];
$regex = '/<input type=\"hidden\" name=\"lt\" value=\"([a-zA-Z0-9_-]*)\"/';
preg_match($regex, $output['body'], $matches);
$lt = $matches[1];
$url = 'https://www.mon-compte.bouyguestelecom.fr/cas/login;jsessionid=' . $jsessionid . '?service=https%3A%2F%2Fwww.secure.bbox.bouyguestelecom.fr%2Fservices%2FSMSIHD%2FsendSMS.phtml';
$fields = [
'username' => $username,
'password' => $password,
'rememberMe' => 'true',
'_rememberMe' => 'on',
'lt' => $lt,
'execution' => 'e1s1',
'_eventId' => 'submit'
];
$response = curl_it($url, $fields);
$url = 'https://www.secure.bbox.bouyguestelecom.fr/services/SMSIHD/sendSMS.phtml';
$response = curl_it($url, []);
$regex = '/Il vous reste <strong>(\\d*) SMS gratuit\\(s\\)<\\/strong>./';
preg_match($regex, $response['body'], $matches);
if ($matches[1] == '0') {
echo 'Il ne vous reste plus de SMS gratuits.' . PHP_EOL;
echo 'Envoi annulé.' . PHP_EOL;
exit();
}
$fields = [
'fieldMsisdn' => $msisdn,
'fieldMessage' => filter(($message, $maxLengthMessage, true),
'Verif.x' => '58', // can be whatever
'Verif.y' => '15', // can be whatever
];
$url = 'https://www.secure.bbox.bouyguestelecom.fr/services/SMSIHD/confirmSendSMS.phtml';
$responseConfirmSendSMS = curl_it($url, $fields);
echo 'Numéro(s) de téléphone: ' . $msisdn . PHP_EOL;
$regex = '/<span class=\"txt12\">(Après cet envoi il vous restera : )<strong>([a-zA-Z0-9_ -]*)<\/strong><\/span>/';
preg_match($regex, $responseConfirmSendSMS['body'], $matches);
echo $matches[1] . $matches[2] . '.' . PHP_EOL;
$url = 'https://www.secure.bbox.bouyguestelecom.fr/services/SMSIHD/resultSendSMS.phtml';
$responseResultSendSMS = curl_it($url, []);
$regex = '/<strong>(0\\d \\d{2} \\d{2} \\d{2} \\d{2})<\\/strong>/m';
preg_match($regex, $responseResultSendSMS['body'], $matches);
echo 'Votre message a bien été envoyé au numéro : ' . $matches[1] . '.' . PHP_EOL;
$regex = '/Il vous reste <strong>(\\d*) SMS gratuit\\(s\\)<\\/strong>./';
preg_match($regex, $responseResultSendSMS['body'], $matches);
echo 'Il vous reste ' . $matches[1] .' SMS gratuit(s).' . PHP_EOL;
$message = ‘ALERTE INTRUSION’;
SendBouygueSmS(MON TEL, MON MOT DE PASSE, LE TEL DU DESTINATAIRE);
Ca devrait le faire ?
Merci encore et désolé pour le temps que je te fais perdre.
Salut,
Pourrais-tu stp poster ton code définitif qui fonctionne.
Merci
Bon, j’ai retravaillé un peu le truc parce que je faisais un peu n’importe-quoi. Voilà où j’en suis :
C’est fait ;)
Par contre, du coup ça marche, ou tu as des erreurs ?
Merci !
Non, y a un truc qui merdouille mais je n’ai pas eu le temps de trop chercher encore. En fait j’ai un petit bout de chou tout neuf à m’occuper, et j’en perds mon PHP ! Ah ah ah ! :o)
Je pense que ça va finir par le faire, surtout si j’arrive à dormir un peu ! Dans ce cas je reviendrai te dire bien sûr !
Félicitation Dixours ;)
Mon petit bout de chou à moi il est arrivé il y a bientôt 4 ans … c’est fou ce que le temps passe vite ;)
Mais je te rassure, tu ne finiras jamais JAMais JAMAIs JAMAIS de t’en occuper ;)
C’est un cycle interminable, une boucle sans fin :D
Haha bon courage à toi et encore félicitation :p
Salut !
J’ai développé une version Node.JS de l’interface disponible sur npm (https://www.npmjs.com/package/bouygues-sms) et sur GitHub (https://github.com/y3nd/bouygues-sms) pour ceux que ça intéresse. J’ai repris exactement le même fonctionnement que le script PHP et l’ai utilisé intensément pour développer mon module, j’ai donc crédité TheBigWorld en mettant un lien vers son dépôt.
Le script est assez lent en soit, il est probablement possible d’omettre certaines requêtes, mais je n’ai pas vraiment cherché la rapidité en connaissance de la limite imposée (5 sms /j).
Voilà, j’espère que ça servira à des activités de domotique par exemple, le cas le plus connu :)
Salut Y3n,
Petite dédicace : http://api.ikarton.fr/2016/10/07/sms-un-module-nodejs-pour-lenvoi-de-sms-aux-abonnes-bouygues/
Bonsoir à tous, je sais que ce sujet est un peu vieux, mais savez vous comment transformer ce fichier php en javascript ou vbs ?
merci
Moi je suis à la recherche d’un script PHP ou autre technologie qui pourra faire un App Store ou un site comme APKPURE
Normalement un simple CMS (WordPress, Drupal, Joomla) te permettra de faire ça.