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

AJAX Discussion :

[AJAX] Récupérer données XML sur une url externe [Méthode POST]


Sujet :

AJAX

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 23
    Points : 14
    Points
    14
    Par défaut [AJAX] Récupérer données XML sur une url externe [Méthode POST]
    Bonsoir,

    Je vous explique très vite mon problème :

    Je fais un validateur de code allopass en Javascript/Ajax, le problème c'est que l'API Allopass que j'utilise est sous forme d'url (https://payment.allopass.com/api/one...date-codes.apu), utilisant la méthode POST, et qui donne la réponse sous forme XML, et ça bloque.

    J'utilise le code suivant pour faire une requête en Ajax sur l'API (avec JQuery) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    var dataString = 'site_id=xxx&product_id=xxx&code[]=xxx';
     
    $.ajax({
     
    		url : 'https://payment.allopass.com/api/onetime/validate-codes.apu',
    		dataType: 'xml',
    		type: 'POST',
    		contentType: 'application/x-www-form-urlencoded',
                    data: dataString,
    		success : alert(xml)
     
    });
    Mais il se trouve que rien ne marche, quelqu'un pourrait donc me donner la solution pour faire une requête sur cette API via la méthode POST et récupérer le code XML généré par cette dernière ?

    Merci d'avance,
    Cordialement,
    SoGeek.

  2. #2
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    16 933
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 933
    Points : 44 084
    Points
    44 084
    Par défaut
    Bonsoir,
    le paramètre success attend comme valeur une fonction, donc...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $.ajax({
        url : 'https://payment.allopass.com/api/onetime/validate-codes.apu',
        dataType: 'xml',
        type: 'POST',
        contentType: 'application/x-www-form-urlencoded',
        data: dataString,
        success : function( xml){
            alert( xml);
          }
    });

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 23
    Points : 14
    Points
    14
    Par défaut
    Bonsoir,

    Malgré ce nouveau code, cela ne marche toujours pas, en effet, aucun advert ne s'affiche.

    Merci tout de même pour l'attention que tu portes à ce problème,
    SoGeek.

  4. #4
    Membre du Club
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Juillet 2011
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juillet 2011
    Messages : 34
    Points : 44
    Points
    44
    Par défaut
    Ne s'agit-il pas ici d'un cas de requête en cross domain?
    Et si c'est le cas, en dehors de la technique avec jsonP, peut-on y parvenir avec du XML?
    Il m'est arrivé d'interroger une API XML mais seulement en PHP pur.
    mctarek

  5. #5
    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 : 53
    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 416
    Points
    91 416
    Billets dans le blog
    20
    Par défaut
    De toute façon, le cross domain commence à s'appliquer si l'on change le protocole, donc ne rêve pas : tu ne pourras jamais appeler une URL en https à partir d'une page qui ne l'est pas (et bien entendu, encore moins vers une URL différente de celle de la page appelante).
    Tu dois obligatoirement passer par un script sur ton serveur qui lui ira récupérer les informations de allopass.
    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

  6. #6
    Membre du Club
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Juillet 2011
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juillet 2011
    Messages : 34
    Points : 44
    Points
    44
    Par défaut
    Merci Bovino. Voilà qui confirme mes doutes.
    A soGeek, tu peux toujours interroger l'API (validate-codes.apu) en PHP avec simplexml_load_file (avec création d'un context de flux) ou avec cURL. mctarek

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 23
    Points : 14
    Points
    14
    Par défaut
    Bonjour,

    simplexml_load_file me permet de lire le code xml de la page, mais le problème c'est que je dois envoyer des informations via la méthode POST à cette API (ID du site, ID du produit, le CODE allopass) et le code xml CHANGE en fonction de ces informations POST (exemple : si le code est VALIDE l'API va m'afficher un certain code xml, mais s'il est faux, elle va m'en afficher un autre). Et si je lis la page XML sans envoyer ces informations, elle m'affiche une erreur dans ce genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <response code="11" message="You provided an account (by its site_id) nonexistent"/>
    Alors que si j'envoie les informations post (manuellement), elle m'affiche un code xml dans ce genre :

    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
     
    <response xmlns="https://api.allopass.com/rest" code="0" message="OK">
    <status>0</status>
    <status_description>success</status_description>
    <access_type>onetime</access_type>
    <transaction_id>2402e646-6d1a-466b-b241-e5938cbab036</transaction_id>
    <price currency="EUR" amount="0.00" exchange="1.0000000" reference_currency="EUR" reference_amount="0.00"/>
    <paid currency="EUR" amount="0.00" exchange="1.0000000" reference_currency="EUR" reference_amount="0.00"/>
    <validation_date timestamp="1312887740" date="2011-08-09T11:02:20+00:00"/>
    <product_name>
    <![CDATA[ xxx ]]>
    </product_name>
    <website id="xxx" name="xxx" url="http://www.xxx.fr/" audience_restricted="false" category="Others"/>
    <customer_ip/>
    <customer_country/>
    <expected_number_of_codes>1</expected_number_of_codes>
    <codes>
    <code>
    <value>ASCQXW</value>
    <pricepoint id="0" country_code="FR" type="free-code" category="free-code"/>
    <price currency="EUR" amount="0.00" exchange="1.0000000" reference_currency="EUR" reference_amount="0.00"/>
    <paid currency="EUR" amount="0.00" exchange="1.0000000" reference_currency="EUR" reference_amount="0.00"/>
    <payout currency="EUR" amount="0.00" exchange="1.0000000" reference_currency="EUR" reference_amount="0.00"/>
    </code>
    </codes>
    <merchant_transaction_id/>
    <data/>
    <affiliate/>
    <partners/>
    </response>
    Je cherche donc une méthode pour envoyer des informations POST à une url, et en lire le code xml généré (en n'importe quel langage).

    Cordialement,
    SoGeek.

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 23
    Points : 14
    Points
    14
    Par défaut
    Excusez moi problème réglé, je n'avais pas vu la fonction cURL que mctarek m'avais proposé, en effet elle marche très bien, voici le code source si ça peut aider quelqu'un :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?php 
    $url = "https://payment.allopass.com/api/onetime/validate-codes.apu";
    $ch = curl_init();    // initialize curl handle
    curl_setopt($ch, CURLOPT_URL,$url); // set url to post to
    curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); // return into a variable
    curl_setopt($ch, CURLOPT_TIMEOUT, 10); // times out after 4s
    curl_setopt($ch, CURLOPT_POSTFIELDS, "site_id=xxx&product_id=xxx&code[]=xxx"); // add POST fields
    $result = curl_exec($ch); // run the whole process
    echo $result; //contains response from server (Will certainly be FALSE)
    ?>

  9. #9
    Membre du Club
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Juillet 2011
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juillet 2011
    Messages : 34
    Points : 44
    Points
    44
    Par défaut
    Merci soGeek pour le partage. Il suffira donc de récupérer le retour de l' echo $result en Ajax et traîter le tout en local. N'hésite pas à passer ce post en Résolu. mctarek

  10. #10
    Nouveau Candidat au Club
    Femme Profil pro
    Chercheur en informatique
    Inscrit en
    Juin 2012
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2012
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    moi j'ai affiché mon résultat xml manuellement, et j'ai obtenu ceci :
    <response code="82009" message="Expired timestamp"/> comme résultat avec ça : date_default_timezone_set('UTC');

    Pourriez-vous m'aider svp. merci !!!

  11. #11
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2007
    Messages : 4
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par SoGeek Voir le message
    Excusez moi problème réglé, je n'avais pas vu la fonction cURL que mctarek m'avais proposé, en effet elle marche très bien, voici le code source si ça peut aider quelqu'un :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?php 
    $url = "https://payment.allopass.com/api/onetime/validate-codes.apu";
    $ch = curl_init();    // initialize curl handle
    curl_setopt($ch, CURLOPT_URL,$url); // set url to post to
    curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); // return into a variable
    curl_setopt($ch, CURLOPT_TIMEOUT, 10); // times out after 4s
    curl_setopt($ch, CURLOPT_POSTFIELDS, "site_id=xxx&product_id=xxx&code[]=xxx"); // add POST fields
    $result = curl_exec($ch); // run the whole process
    echo $result; //contains response from server (Will certainly be FALSE)
    ?>
    Hello,

    3 ans après, ton code m'a bien aidé !
    C'est exactement ce que je recherchais pour une autre API.
    Maintenant, je peut utiliser la variable dans simpleXML

    Merci

Discussions similaires

  1. Récupérer donnée Boolean sur une table
    Par minooo dans le forum AWT/Swing
    Réponses: 7
    Dernier message: 06/02/2012, 12h00
  2. Dispatcher une requete sur une URL externe
    Par blueman1 dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 05/02/2009, 12h48
  3. [RegEx] Récupérer des infos sur une page externe
    Par kevinf dans le forum Langage
    Réponses: 1
    Dernier message: 29/10/2008, 09h28
  4. Récupérer des infos sur une page externe
    Par Horrigan dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 20/07/2006, 15h46
  5. Recupération de données XML depuis une URL
    Par tonymo dans le forum Format d'échange (XML, JSON...)
    Réponses: 27
    Dernier message: 21/11/2005, 14h48

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