【发布时间】:2012-12-20 12:28:04
【问题描述】:
在我的网站中,我正在向支付网站 (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/ostPUG4t9XV1EdS10JzVNZFscIxUuDpUHi+6GnVbLtR3ATjSz9trGoKLFgrK/ostPUG4t9XV1EdS10JzVNZFscIxUu2LVp>
【问题讨论】:
-
在我看来,您设置了错误的 form:action 值,并尝试将 ajaxsubmit 提交到远程服务器(不允许的)而不是查询您的 php curl 脚本
-
您的问题是向 API 发送请求还是从 API 解析 XML 响应?
-
@ricabral:使用普通表单提交(通过单击提交按钮),我如何解析来自其他网站的 XML 响应?我正在尝试这样做。
-
@Vprimachenko:表单动作正确。
-
@Debashis 但它会因为
Same origin policy而失败