0

こんにちは、支払いゲートウェイの統合中に問題に直面しています。ゲートウェイには XML 形式のリクエストが必要です。私のサイトとカートは PHP です。HTML フォームの値を XML 形式でサーバーに投稿するソリューションが必要です。サーバーには次の XML 形式が必要です。

    <html>
    <head>
    </head>
    <body>
    <form method="POST" action="https://3ds.cps.lv/GatorServo/request">
    <input name="type" value="sendForAuth">
    <textarea name="xml">
    <?xml version="1.0" encoding="UTF-8" ?>
    <cpsxml xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.cps.lv/xml/ns/cpsxml
        https://3ds.cps.lv/GatorServo/Gator_SendForAuth.xsd"
        xmlns="http://www.cps.lv/xml/ns/cpsxml">
    <header xmlns="">
    <responsetype>direct</responsetype>
    <user>test_sign</user>
    <type>sendForAuth</type>
    <transType>DB</transType>
    <digiSignature>XXXXXXXXXXXXXXXXXXXXXXX</digiSignature>
    </header>
    <request xmlns="">
    <orderNumber>012345</orderNumber>
    <cardholder>
      <firstName>FirstName</firstName>
      <lastName>LastName</lastName>
      <street>Street</street>
      <zip>54321</zip>
      <city>City</city>
      <country>LV</country>
      <email>email@domain.com</email>
      <ip>123.124.125.126</ip>
    </cardholder>
    <amount>
      <value>1000</value>
      <currency>USD</currency>
    </amount>
    <product>
      <productName>Product Name</productName>
      <productUrl>www.test.com</productUrl>
    </product>
  </request> 
</cpsxml>
</textarea>
 <input type="submit" value="Send">
 </form>
 </body>
</html>

これが私のPHPファイルです。json2xmlを使用してみましたが、今のところうまくいきません

<?php

require_once('../assist/cart-load.php');

if(isset($_POST) && isset($_POST['assist'])){
$order_id= $_REQUEST['order_id'];
$a_amount = $_REQUEST['a_total'];
$c_amount = $_REQUEST['c_total'];
$admin_curr = $_REQUEST['a_curr'];
$chk_curr = $_REQUEST['c_curr'];

$checksum = $_SESSION['basket']['security'];

$checksum2 = $_SESSION['basket']['security2'];
}
?>

      <html>
     <head><title>Complete Your Payment</title>
     <script src="json2xml.js" type="text/javascript"></script>
     <script type="text/javascript">
     var formjson = $('form#payment_form').serializeArray();
//var formxml = $.compactJSON(mjson);
var formxml = json2xml(formjson);
alert(formxml);
$.post("/collect.cgi", { 'data': formxml }, function (data){ });
     </script>
     </head>
   <body>
    <form method="post" id="payment_form" name="payment_form"  action="https://3ds.cps.lv/GatorServo/request">
    <input type="hidden" name="responsetype" value="direct">
    <input type="hidden" name="user" value="test_pasta_sign">
    <input name="type" type="hidden" value="sendForAuth">
    <input type="hidden" name="transType" value="DB">
    <input type="hidden" name="digisignature" value="XXXXXXXXXXXXXXXXXXXXXXX">
    <p>Order Number</p>
    <input type="text" readonly name="orderNumber" value="<?php echo $order_id; ?>">
    <p>F Name</p>
    <input type="text" name="firstname" value="">
    <p>L Name</p>
    <input type="text" name="lastname" value="">
    <p>Street Address</p>
    <input type="text" name="street" value="">
    <p>Zip</p>
    <input type="text" name="zip" value="">
    <p>City</p>
    <input type="text" name="city" value="">
    <p>Country</p>
    <input type="text" name="country" value="">
    <p>Email</p>
    <input type="text" name="email" value="email@domain.com">
    <input type="hidden" name="ip" value="123.124.125.126">
    <p>Enter Card No.</p>
    <input type="text" name="cardNumber" value="">
    <p>Enter CVV</p>
    <input type="text" name="cvv" value="">
    <p>Card Expiry</p>
    <input type="text" name="expires" value="">
    <p>Amount</p>
    <input type="text" name="value" readonly value="<?php echo $a_amount; ?>">
    <input type="hidden" name="currency" value="USD">
    <p>Product Name</p>
    <input type="text" name="productName" value="Product Name" readonly>
    <input type="hidden" name="productUrl" value="http://www.test.com">
    <input type="submit" value="Send">
    </form></body></html>

この問題のより良い解決策を教えてください。前もって感謝します!

更新: jsontoxml を削除し、jquery.ajax を使用するようになりました。スクリプトは次のとおりです。

     <script type="text/javascript">
     var ajaxurl="https://3ds.cps.lv/GatorServo/request";
var str="";

for(i=0; i<document.payment_form.elements.length; i++)
{
   var fieldName = document.payment_form.elements[i].name;
   var fieldValue = document.payment_form.elements[i].value;
   str += "<" + fieldName + ">" ;
    str += fieldValue ;
   str += "</" + fieldName + ">" ;
}

$.ajax({
    url: ajaxurl,
    data: str, 
    type: 'POST',
    contentType: "text/xml",
    dataType: "xml",
    success : parse_result,
    error : show_error
}); 

function parse_result(xml){
    //
}
function show_error(){
    //
}
     </script>

しかし、サーバーから「Malformed XML Request」というエラーが表示されます。

解決策はありますか?

4

1 に答える 1