2012-08-25 1 views
1

Sur mon site Web, je soumets un formulaire html à un site de paiement (webmasterchecks.com) et le site me répond par une réponse XML. La réponse XML est affichée sur un lien externe (https://api.webmasterchecks.com/payments/add) après la soumission normale du formulaire (en cliquant sur le bouton Soumettre). Je veux lire la réponse XML et mettre à jour ma base de données. Mon langage de codage est PHP.Comment lire la réponse XML d'un autre site après la soumission d'un formulaire html

formulaire HTML:

<form name="payment_form" action="https://api.webmasterchecks.com/payments/add" method="post"> 

<input type="text" name="client_id" value="****"></input> 
<input type="text" name="akey" value="**********"></input> 
<input type="text" name="method_id" value="2"></input> 
<input type="text" name="payee" value="ABCD EFGH"></input> 
<input type="text" name="amount" value="1.00"></input> 
<input type="text" name="postage_id" value="6"></input> 
<input type="text" name="reference" value="Payment"></input> 
<input type="text" name="street_addr" value="51 ABCD"></input> 
<input type="text" name="city" value="XYZ"></input> 
<input type="text" name="state" value="NJ"></input> 
<input type="text" name="country" value="United States"></input> 
<input type="text" name="zip" value="01544"></input> 
<input type="submit" name="submit" value="submit"></input> 
</form> 

j'ai essayé de soumettre le formulaire à l'aide post jquery et obtenir les données JSON. Mais le formulaire n'est pas soumis (ne pas avoir d'erreur dans la console). Le code est donné ci-dessous. J'ai également essayé d'utiliser curl, mais n'y ai pas réussi.

$(function(){ 
     $("form[name=payment_form]").submit(function(){ 
     $.post($(this).attr("action"), $(this).serialize(), function(jsonData){ 
      alert(jsonData); 
     }, "json"); 
     return false; 
     }); 
    }); 

Son affichage de la clé de l'API est invalide, car en utilisant le formulaire html ci-dessus, j'obtiens une réponse. Le code CURL est donné ci-dessous.

$client_id = "****"; 
    $api_key = "*****************************"; 

    $output_url = "https://api.webmasterchecks.com/payments/add"; 

    $output_transaction = "client_id=$client_id&"; 
    $output_transaction .= "akey=$api_key&"; 
    $output_transaction .= "method_id=2&"; 
    $output_transaction .= "payee=ABCD EFGH&"; 
    $output_transaction .= "amount=1.00&"; 
    $output_transaction .= "postage_id=6&"; 
    $output_transaction .= "reference=Payment&"; 
    $output_transaction .= "street_addr=FGHFHGFG&"; 
    $output_transaction .= "city=JHGJHG&"; 
    $output_transaction .= "state=NJ&"; 
    $output_transaction .= "country=United States&"; 
    $output_transaction .= "zip=54545454"; 

    ob_start(); 
    $ch = curl_init ($output_url); 
    curl_setopt ($ch, CURLOPT_VERBOSE, 1); 
    curl_setopt ($ch, CURLOPT_POST, 1); 
    curl_setopt ($ch, CURLOPT_POSTFIELDS, $output_transaction); 
    curl_exec ($ch); 
    curl_close ($ch); 
    $process_result = ob_get_contents(); 
    ob_end_clean(); 

Comment puis-je mettre à jour ma base de données en utilisant la réponse XML?

Merci d'avance.

EDIT

Ma clé api contient peu plus "+" signe là-dessus. Un exemple de format de clé API est donné ci-dessous.

q5Un5ObLZs2ovY2COW + LvHzEVdUy0kR3u6dPwh/p + wzlbh80vONBbo + otLpBwPqnvP/VjhglfFos51sLFDpUHi + 6GnVbLtR3ATjSz9trGoKLFgrK/ostPUG4t9XV1EdS10JzVZFscIxUu2LVmJN9NVpCgaD9NaA

+0

il me semble que vous définissez la mauvaise forme: valeur d'action, et essayer d'ajaxsubmit à un serveur distant (ce qui n'est pas autorisé) au lieu d'interroger votre script php curl – Valerij

+0

Votre problème est-il l'envoi de la demande à l'API ou l'analyse XML réponse de l'API? – rlcabral

+0

@ ricabral: Utilisation de la soumission de formulaire normal (En cliquant sur le bouton "Envoyer"), comment puis-je analyser la réponse XML d'un autre site Web? J'essaie de le faire. – Debashis

Répondre

2

Ce que vous devez faire ici est d'envoyer vos données grâce à un script local et l'emballage puis en une demande boucle d'interagir avec le serveur distant via son API.

<form name="payment_form" action="local_script.php" method="post"> 
<input type="text" name="method_id" value="2"></input> 
<input type="text" name="payee" value="ABCD EFGH"></input> 
<input type="text" name="amount" value="1.00"></input> 
<input type="text" name="postage_id" value="6"></input> 
<input type="text" name="reference" value="Payment"></input> 
<input type="text" name="street_addr" value="51 ABCD"></input> 
<input type="text" name="city" value="XYZ"></input> 
<input type="text" name="state" value="NJ"></input> 
<input type="text" name="country" value="United States"></input> 
<input type="text" name="zip" value="01544"></input> 
<input type="submit" name="submit" value="submit"></input> 
</form> 

Remarque J'ai retiré client_id et api_key de la forme que ceux-ci ne doivent jamais être présentés au public comme celui-ci

local_script.php

$api_url = "https://api.webmasterchecks.com/payments/add"; 
$client_id = "****"; 
    $api_key = "*****************************"; 

$_POST['client_id'] = $client_id; 
$_POST['akey'] = $api_key; 

     $post_data = http_build_query($_POST); 

    $xml = new DOMDocument(); 
    $ch = curl_init ($api_url); 
    curl_setopt($ch, CURLOPT_VERBOSE, 1); 
    curl_setopt($ch, CURLOPT_POST, 1); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);//return xml 
    curl_setopt($ch, CURLOPT_HEADER, FALSE);//we only need the body 
    curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); 
    $xml->loadXML(curl_exec($ch)); 
    curl_close ($ch); 
    //for testing echo xml 
    echo $xml->saveXML(); 
    //you need now to parse the xml before adding info to db 
    $name = $xml->getElementsByTagName('name')->item(1)->nodeValue; 
    $email = $xml->getElementsByTagName('email')->item(1)->nodeValue; 

Voilà comment je le ferais, comme je suis versé dans DOMDocument pour l'analyse et l'écriture XML, vous pouvez soit analyser en utilisant le manuel pour DOMDocument http://www.php.net/manual/en/class.domdocument.php ou utiliser SIMPLEXML http://php.net/manual/en/book.simplexml.php de toute façon, vous devez analyser le fichier XML pour ajouter les données à votre base de données.

+0

Je suis confus avec le code ci-dessus. En utilisant le formulaire HTML, vous envoyez toute la requête au fichier local_script.php. Ensuite, pourquoi vous collectez la valeur en utilisant la variable "$ output_transaction" et l'envoi en utilisant curl? S'il vous plaît noter, j'avais une erreur avec la clé API en utilisant la méthode curl. Si j'utilise la même clé API dans mon formulaire HTML, le formulaire est correctement envoyé. – Debashis

+0

Vous avez raison, c'était une erreur de ma part, car je pensais que c'était ce que votre transaction de sortie avait été. J'ai maintenant utilisé http_build_query pour prendre le $ _POST et le remettre dans curl. J'ai également ajouté la clé d'api et l'identification de client dans le tableau de poste et à travers dans les données. http_build_query devrait l'encoder correctement et cela devrait fonctionner –

+0

C'est le chemin à parcourir. – rlcabral

0

Probablement, vous pouvez également envoyer et récupérer des données depuis/vers cette URL en utilisant ajax. J'ai créé une page simple qui affiche des données de carte et de marqueurs. J'ai récupéré les données en utilisant ajax. La réponse à mon appel ajax était xml. Donc, après obtenir une réponse, j'ai simplement analysé le xml.

E.g.

 

    var url="mapData.php"; 
     var request = getRequestObj(); 
     request.open("GET", url, true); 
     request.onreadystatechange = function() { 
      if (request.readyState == 4) { 
      var xmlDoc = request.responseXML; 
      // obtain the array of markers and loop through it 
      var markers = xmlDoc.documentElement.getElementsByTagName("marker"); 


      for (var i = 0; i < markers.length; i++) { 
      //parsing other xml element... 
      } 
      } 
     } 
     request.send(null); 

Espérons que cela aiderait.

Questions connexes