Précédent   Forum du club des développeurs et IT Pro > PHP > Langage > Formulaires
Formulaires Forum d'entraide sur les formulaires avec PHP. Avant de poster -> FAQ formulaires, Cours de formulaires et Sources de formulaires
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 28/11/2012, 16h34   #1
Jayce68
Invité de passage
 
Homme
Inscription : novembre 2012
Messages : 5
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Secteur : Communication - Médias

Informations forums :
Inscription : novembre 2012
Messages : 5
Points : 0
Points : 0
Par défaut Formulaire callback numéro vers format international

Bonjour à tous !

Je suis en train d'intégrer pour la 1ère fois une fonction type "rappel gratuit" (API Orange ClickToCall).
Cet API fonctionne uniquement avec des numéros au format internatinal (33), hors pour simplifier la vie des internautes, je souhaiterai une fonction qui transforme un numéro national (type 0145214521) vers le format international (ex: 33145214521) que l'API comprendra.

Une idée ?

Merci d'avance !
Jayce68 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/11/2012, 16h51   #2
ska_root
Membre Expert
 
Avatar de ska_root
 
Homme
Développeur informatique
Inscription : août 2005
Messages : 1 182
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 43
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Service public

Informations forums :
Inscription : août 2005
Messages : 1 182
Points : 1 784
Points : 1 784
Bonjour,

si tes appels sont toujours à destination de la france, c'est relativement simple...

Code :
1
2
3
4
5
6
7
 
$numero= '0102030405';
// bien sur il faut tester le bon format du numero avant
$internationnal= "33".substr($numero,1);
 
echo "<p>avant : ".$numero."</p>";
echo "<p>apres : ".$internationnal."</p>";
__________________
http://cdemarche.developpez.com/

Tu as la réponse à ta question ? N'oublies pas le petit en bas à gauche de ton message...
ska_root est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/11/2012, 17h02   #3
grunk
Modérateur
 
Avatar de grunk
 
Homme Olivier
Développeur Web
Inscription : août 2003
Messages : 2 499
Détails du profil
Informations personnelles :
Nom : Homme Olivier
Âge : 28
Localisation : France, Côte d'Or (Bourgogne)

Informations professionnelles :
Activité : Développeur Web
Secteur : Industrie

Informations forums :
Inscription : août 2003
Messages : 2 499
Points : 5 209
Points : 5 209
Je ferais un truc avec 2 expression régulières :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$numero = '0312345678';
//$numero = '3312345678';
//$numero = '+3312345678';
$numero = str_replace(' ','',$numero);
if(strlen($numero) == 10)
{
   $pattern = '`^0[1-9][0-9]{8}$`';
   $ok = preg_match($pattern,$numero);
   if($ok) {$numero = '33'.substr($numero,1);} else {$numero = null;}
}
else
{
   $pattern = '`^\+?33[1-9][0-9]{8}$`';
   $ok = preg_match($pattern,$numero);
   if(!$ok){$numero = null;}
}
 
var_dump($numero);
Si le numéro fait 10 de long , on test son format pour vérifier le format français (commence par un 0 puis suivi d'un chiffre de 1 à 9, puis de 8 chiffre entre 0 et 9)
Si c'est ok , on rajoute 33 au début du numéro sinon on le passe à null.

Dans le cas ou le numéro ne fait pas 10 de long , il y'a des chances que ce soit un 33xxxx, on test donc le format. (j'ai rajouté la possibilité d'un + au début , à toi de voir si tu en as besoin ou pas).
Si ok on ne change rien , sinon on passe numéro à null.

Ne reste plus qu' à regarder numéro :
si null => mauvais format , sinon format international.

PS : je suis une bille en expression régulière donc y'a peut être plus simple
__________________
Pry Framework php5 | Recherche CDI dev. Web sur Dijon et alentours.
grunk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/11/2012, 18h44   #4
Jayce68
Invité de passage
 
Homme
Inscription : novembre 2012
Messages : 5
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Secteur : Communication - Médias

Informations forums :
Inscription : novembre 2012
Messages : 5
Points : 0
Points : 0
Purée vraiment sympa, merci à tous les deux, ça à l'air tout simple en plus (toujours plus simple quand on voit faire ).

Par contre je ne vois pas trop comment intégrer ce bout de code.

Dans mon HEAD :
ps: j'ai caché la clé API et le numéro destinataire.


Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
<?php
 
// Indiquez ici votre API Access Key
$accesskey = "***********";
// Numéro de téléphone (au format international) de l'appelé
$to = "33**********";
// Choix entre "true", "false", "caller" et "callee"
$private = "callee";
// Durée maxium de l'appel en secondes (au dela l'appel est coupé), chiffre entier (par défaut : "120")
$max_duration = "120";
// Confirmation (ou non) de l'appel par l'appelant, "true" ou "false"
$call_confirmation = "false";
// Langue de la voix synthétique si il y a confirmation d'appel (call_confirmation), "ENG" ou "FRE"
$lang = "FRE";
// URL du fichier audio d'attente, URL absolues uniquement
//$audio_url = urlencode("http://XXXXXXXXXXXXXXXXXXX/test.wav");
// URL de réception des notifications d'appel, URL absolues uniquement
//$notification_url = urlencode("http://XXXXXXXXXXXXXXXXXXX/receive.php");
 
 
if (isset ($_REQUEST["submit"])){
 
    // Récupération du numéro de téléphone saisi dans le formulaire (au format international)
    $from = $_REQUEST["from"];
 
    // Nous vidons totalement le fichier de notifications
    $filename = './notifs.txt';  
    $fp = fopen($filename, 'w+');
    fwrite($fp, "");
    fclose($fp);
 
    // Création et exécution de la requête http au createCall
    $url = "http://run.orangeapi.com/call/createCall.xml?id=" . $accesskey . "&from=" . $from . "&to=" . $to . "&private=" . $private . "&max_duration=" . $max_duration . "&call_confirmation=" . $call_confirmation . "&lang=" . $lang;
    $response = file_get_contents($url);
    $xml = simplexml_load_string($response);
 
} elseif (isset ($_REQUEST["cancel"])){
 
    $url_cancel = "http://run.orangeapi.com/call/releaseCall.xml?id=" . $accesskey . "&call_id=" . $_REQUEST["call_id"];
    $response_cancel = file_get_contents($url_cancel);
    $xml_cancel = simplexml_load_string($response_cancel);
 
}
 
?>
Dans mon BODY :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 
					<form action="<?php echo $_SERVER["PHP_SELF"]; ?>" target="_self" method="POST">
 
					    <span>Numéro de téléphone : </span>
					    <input name="from" type="text" size="20" value="<?php echo $from; ?>"/><br />
					    <input type="hidden" name="call_id" value="<?php echo $xml->data->call_id ;?>"/>
					    <input type="submit" class="submit" name="submit" value="Valider"/><?php if (isset ($_REQUEST["submit"]) AND ($xml->status->status_code == 200)){echo '<input type="submit" name="cancel" value="X"/>';}?>
 
					</form>
 
					<?php
 
					if (isset ($_REQUEST["submit"])){
 
					    if ($xml->status->status_code == 200) {
					        echo '<i>Appel en cours.</i>';
					    } else {
					        echo '<i>Erreur lors de l\'appel : ' . $xml->status->status_msg . '.</i>';
					    }
 
					}
 
					?>
D'ailleurs, avec vos bouts de code, j'imagine que je garde le numéro destinataire en format international (je préfère confirmation) ?

Merci d'avance !
Jayce68 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/11/2012, 20h29   #5
Jayce68
Invité de passage
 
Homme
Inscription : novembre 2012
Messages : 5
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Secteur : Communication - Médias

Informations forums :
Inscription : novembre 2012
Messages : 5
Points : 0
Points : 0
Ok trouvé !

Modification dans le head :

Citation:
$from = $_REQUEST["from"];
par

Citation:
$numero = $_REQUEST["from"];
$from = "33".substr($numero,1);
Testé et ça fonctionne nickel, merci encore à tous les deux.
Grunk, je garde ton code sous le code si jamais.

Jayce68 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/11/2012, 21h31   #6
Bovino
Responsable Développement Web

 
Avatar de Bovino
 
Homme Didier Mouronval
Développeur Web
Inscription : juin 2008
Messages : 18 160
Détails du profil
Informations personnelles :
Nom : Homme Didier Mouronval
Âge : 42
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2008
Messages : 18 160
Points : 65 063
Points : 65 063
Citation:
Envoyé par Jayce68
Grunk, je garde ton code sous le code si jamais.
Ben... c'est plutôt le contraire que tu devrais faire... A moins de ne rien avoir à faire de la facturation Orange, ça peut être utile de vérifier le format du numéro avant d'envoyer un appel...
D'ailleurs, en complément de la solution de grunk, tu ferais bien aussi de vérifier que ce n'est pas un 08 que tu vas appeler
Code :
$pattern = '`^0[1-79][0-9]{8}$`';
__________________
Pas de question technique par MP !
Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
Vous possédez un blog et aimeriez diffuser vos billets sur le forum, contactez-moi !
Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
Mon livre sur jQuery
Bovino est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2012, 07h35   #7
Jayce68
Invité de passage
 
Homme
Inscription : novembre 2012
Messages : 5
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Secteur : Communication - Médias

Informations forums :
Inscription : novembre 2012
Messages : 5
Points : 0
Points : 0
Effectivement j'avais pas pensé aux numéros spéciaux !

Je vais intégrer tout ça, merci pour votre aide.
Jayce68 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2012, 12h01   #8
Jayce68
Invité de passage
 
Homme
Inscription : novembre 2012
Messages : 5
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Secteur : Communication - Médias

Informations forums :
Inscription : novembre 2012
Messages : 5
Points : 0
Points : 0
A priori ça à l'air de fonctionner, par contre lors des essais, j'ai tout en haut de ma page :

STRING (11) "331234556" (quelque chose comme ça avec le numéro renseigné)

ou

NULL
lorsque le numéro renseigné commence par 08.

Comment faire pour ne pas l'afficher ?

Mon code du body est le même que plus haut, et mon head est ainsi :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
if (isset ($_REQUEST["submit"])){
 
	$numero = $_REQUEST["from"];;
	//$numero = '3312345678';
	//$numero = '+3312345678';
	$numero = str_replace(' ','',$numero);
	if(strlen($numero) == 10)
	{
	   $pattern = '`^0[1-79][0-9]{8}$`';
	   $ok = preg_match($pattern,$numero);
	   if($ok) {$numero = '33'.substr($numero,1);} else {$numero = null;}
	}
	else
	{
	   $pattern = '`^\+?33[1-9][0-9]{8}$`';
	   $ok = preg_match($pattern,$numero);
	   if(!$ok){$numero = null;}
	}
 
	var_dump($numero);
	$from = $numero;
Jayce68 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2012, 13h37   #9
Bovino
Responsable Développement Web

 
Avatar de Bovino
 
Homme Didier Mouronval
Développeur Web
Inscription : juin 2008
Messages : 18 160
Détails du profil
Informations personnelles :
Nom : Homme Didier Mouronval
Âge : 42
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2008
Messages : 18 160
Points : 65 063
Points : 65 063
C'est var_dump($numero); qui provoque cet affichage...
__________________
Pas de question technique par MP !
Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
Vous possédez un blog et aimeriez diffuser vos billets sur le forum, contactez-moi !
Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
Mon livre sur jQuery
Bovino est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 07h53.


 
 
 
 
Partenaires

Hébergement Web