Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 9 sur 9
  1. #1
    Invité de passage
    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 : 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 !

  2. #2
    Membre Expert
    Avatar de ska_root
    Homme Profil pro
    Développeur informatique
    Inscrit en
    août 2005
    Messages
    1 182
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    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

    Par défaut

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

  3. #3
    Modérateur
    Avatar de grunk
    Homme Profil pro Olivier
    Dév. Web / Android
    Inscrit en
    août 2003
    Messages
    2 929
    Détails du profil
    Informations personnelles :
    Nom : Homme Olivier
    Âge : 29
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Dév. Web / Android
    Secteur : Industrie

    Informations forums :
    Inscription : août 2003
    Messages : 2 929
    Points : 6 327
    Points
    6 327

    Par défaut

    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

  4. #4
    Invité de passage
    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 : 0
    Points
    0

    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 :
    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 !

  5. #5
    Invité de passage
    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 : 0
    Points
    0

    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
    Responsable Développement Web

    Avatar de Bovino
    Homme Profil pro Didier Mouronval
    Développeur Web
    Inscrit en
    juin 2008
    Messages
    21 252
    Détails du profil
    Informations personnelles :
    Nom : Homme Didier Mouronval
    Âge : 43
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : juin 2008
    Messages : 21 252
    Points : 83 094
    Points
    83 094

    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 :
    $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 !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  7. #7
    Invité de passage
    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 : 0
    Points
    0

    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
    Invité de passage
    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 : 0
    Points
    0

    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 :
    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
    Responsable Développement Web

    Avatar de Bovino
    Homme Profil pro Didier Mouronval
    Développeur Web
    Inscrit en
    juin 2008
    Messages
    21 252
    Détails du profil
    Informations personnelles :
    Nom : Homme Didier Mouronval
    Âge : 43
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : juin 2008
    Messages : 21 252
    Points : 83 094
    Points
    83 094

    Par défaut

    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 !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •