1

私の Web サイトで、支払いサイト (webmasterchecks.com) に html フォームを送信すると、サイトから XML 応答が返されます。XML 応答は、(送信ボタンをクリックして) 通常のフォーム送信後に外部リンク (https://api.webmasterchecks.com/payments/add) に表示されます。XML 応答を読み取り、データベースを更新したいと考えています。私のコーディング言語は PHP です。

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>

jquery post を使用してフォームを送信し、json データを取得しようとしました。しかし、フォームは送信されていません (コンソールでもエラーは発生しません)。コードを以下に示します。

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

curl も使用しようとしましたが、成功しませんでした。上記のHTMLフォームを使用すると、APIキーが無効になり、応答が得られます。CURL コードを以下に示します。

   $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();

XML 応答を使用してデータベースを更新するにはどうすればよいですか?

前もって感謝します。

編集

私の API キーには、プラス "+" 記号がほとんど含まれていません。API キーのサンプル形式を以下に示します。

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

4

2 に答える 2

2

ここで行う必要があるのは、データをローカルスクリプトに送信し、それをcurlリクエストにパッケージ化して、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>

client_idとapi_keyをフォームから削除したことに注意してください。これらは、このように一般に公開されるべきではないためです。

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;

xmlの解析と記述についてDOMDocumentに精通しているので、これが私が行う方法です。DOMDocumenthttp://www.php.net/manual/en/class.domdocument.phpのマニュアルを使用して解析するか、次のいずれかを使用できます。 SIMPLEXML http://php.net/manual/en/book.simplexml.phpどちらの方法でも、xmlを解析してデータをデータベースに追加する必要があります。

于 2012-08-25T11:37:44.633 に答える
0

おそらく、ajaxを使用してそのURLとの間でデータを送受信することもできます。地図とマーカーのデータを表示する簡単なページを作成しました。ajaxを使用してデータをフェッチしました。私のajax呼び出しへの応答はxmlでした。したがって、応答を受け取った後、私は単にxmlを解析しました。

例えば

 

    var url = "mapData.php";
        var request = getRequestObj();
        request.open( "GET"、url、true);
        request.onreadystatechange = function(){
          if(request.readyState == 4){
            var xmlDoc = request.responseXML;
            //マーカーの配列を取得し、ループします
            varmarkers = xmlDoc.documentElement.getElementsByTagName( "marker");


            for(var i = 0; i <markers.length; i ++){
             //他のxml要素を解析しています...
            }
          }
        }
        request.send(null);

これがお役に立てば幸いです。

于 2012-08-25T11:41:14.753 に答える