IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Formulaire callback numéro vers format international


Sujet :

Langage PHP

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    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 : 1
    Points
    1
    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 !

  2. #2
    Membre chevronné
    Avatar de ska_root
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    1 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France

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

    Informations forums :
    Inscription : Août 2005
    Messages : 1 203
    Points : 1 839
    Points
    1 839
    Par défaut
    Bonjour,

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

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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>";

  3. #3
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 692
    Points : 20 244
    Points
    20 244
    Par défaut
    Je ferais un truc avec 2 expression régulières :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    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 : 1
    Points
    1
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 !

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    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 : 1
    Points
    1
    Par défaut
    Ok trouvé !

    Modification dans le head :

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

    $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.


  6. #6
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    $pattern = '`^0[1-79][0-9]{8}$`';

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    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 : 1
    Points
    1
    Par défaut
    Effectivement j'avais pas pensé aux numéros spéciaux !

    Je vais intégrer tout ça, merci pour votre aide.

  8. #8
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    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 : 1
    Points
    1
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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;

  9. #9
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    C'est var_dump($numero); qui provoque cet affichage...

Discussions similaires

  1. [VBA-E]: alphanumérique vers format numerique?
    Par VBBBA dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 04/03/2007, 22h38
  2. Configuration d'un export vers format texte
    Par celesteorion dans le forum Access
    Réponses: 3
    Dernier message: 04/08/2006, 11h00
  3. Réponses: 2
    Dernier message: 05/07/2006, 17h52
  4. Validation de formulaire ET renvoi vers autre page
    Par mosquitout dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 24/11/2005, 11h22
  5. Validation formulaire ET renvoi vers autre page
    Par mosquitout dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 23/11/2005, 21h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo