在我的网站上,我正在向支付网站(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,但没有成功。显示API密钥无效,使用上面的html表单,我得到响应。 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 / ostPUG4t9XV1EdS10JzVZFscIxUu2LVmJN9NVpCgaD9NaA
答案 0 :(得分: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;
我就是这样做的,因为我精通DOMDocument来解析和编写xml,你可以使用DOMDocument的http://www.php.net/manual/en/class.domdocument.php手册进行解析,也可以使用SIMPLEXML http://php.net/manual/en/book.simplexml.php。解析xml以将数据添加到数据库。
答案 1 :(得分:0)
您也可以使用ajax向该URL发送数据或从该URL获取数据。 我创建了一个显示地图和标记数据的简单页面。我抓了 使用ajax的数据。对我的ajax调用的响应是xml。所以之后 得到回应,我只是解析了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);
希望这会有所帮助。