我正在网站上使用neteller direct api,用户可以将资金转入我们的商家帐户。 API步骤是:
我对提交表单后要做什么感到困惑?当我们提交表单时我们得到xml页面,那很好,但现在该怎么办?我需要将结果显示给用户,因此在提交表单后,用户将能够看到基于XML批准值的“Transaction Done”或类似消息的消息。我尝试使用jQuery ajax POST方法,以便我可以在jQuery XML对象中接收响应,并且所有表单提交都在后台进行,当请求完成时,我可以获得响应xml对象以向用户显示。这是行不通的,因为跨域POST不起作用。 (我在网上的某处阅读)那么为用户提供最佳用户体验的正确步骤是什么?我们无法向用户显示此xml。那么在提交表单后想知道如何使用下一步?
表单示例:
<form method="post" action="https://api.neteller.com/netdirect">
<input type="text" name="version" value=" 4.1">
<input type="text" name="amount" size="10" value="0.02" maxlength="10">
<input type="text" name="currency" value="USD" size="10" maxlength="3">
<input type="text" name="net_account" size="20" maxlength="100">
<input type="text" name="secure_id" size="10" maxlength="6">
<input type="hidden" name="merchant_id" value="">
<input type="hidden" name="merch_key" value="">
<input type="hidden" name="merch_transid" value="" maxlength="50">
<input type="hidden" name="language_code" value="EN">
<input type="hidden" name="merch_name" value="">
<input type="hidden" name="merch_account" value="" maxlength="50">
<input type="hidden" name="custom_1" value="test123" maxlength="50">
<input type="hidden" name="custom_2" value="test123" maxlength="50">
<input type="hidden" name="custom_3" value="test123" maxlength="50">
<button type="submit" name="submit">Make Transfer</button>
有人可以帮忙解决如何完成这项工作的问题吗? AJAX或CURL或者如何?
答案 0 :(得分:3)
我能够通过CURL完成这项工作。我已经使用curl方法发布到url并在xml中获取结果,稍后通过php方法解析simplexml_load_string()
// open curl connection
$ch = curl_init('https://api.neteller.com/netdirect');
// get the vars from POST request and add them as POST fields
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query([
'version' => $_POST['version'],
'amount' => urlencode($_POST['amount']),
'currency' => $_POST['currency'],
'net_account' => urlencode($_POST['net_account']),
'secure_id' => urlencode($_POST['secure_id']),
'merchant_id' => urlencode($_POST['merchant_id']),
'merch_key' => urlencode($_POST['merch_key']),
'merch_transid' => urlencode($_POST['merch_transid']),
'language_code' => $_POST['language_code'],
'merch_name' => urlencode($_POST['merch_name']),
'merch_account' => urlencode($_POST['merch_account']),
'custom_1' => urlencode($_POST['custom_1']),
'custom_2' => urlencode($_POST['custom_2']),
'custom_3' => urlencode($_POST['custom_3']),
'button' => 'Make Transfer'
]));
// set other curl options
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
// execute post
$output = curl_exec($ch);
$info = curl_getinfo($ch);
$error = '';
$approval = '';
// check if curl request processed or not
if(($output == false) or ($output == '')) {
$curlerror = curl_error($ch);
$error = 'Server Error. ';
} else {
$response = simplexml_load_string($output);
$approval = $response->approval;
}
// close curl connection
curl_close($ch);
答案 1 :(得分:1)
您不会将请求发送给neteller,而是发送给您的服务器 而且你从服务器发送请求到neteller
- 通过这种方式进入您的服务器
function netellerPayment(){
$.ajax({
async: false,
type: "POST",
url: "http://localhost/neteller/notification.php",
data: $("#netellerform").serialize(),
success: function(data){
}
})
}
$(function() {
$('#submitneteller').click(function( event ){
event.preventDefault();
netellerPayment();
})
})
- 现在你的服务器上的php
$urltopost = "https://api.neteller.com/netdirect";
$data = $_POST;
$urltopost = "https://api.neteller.com/netdirect";
$ch = curl_init ($urltopost);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
$returndata = curl_exec ($ch);
$xml = new DOMDocument ( '1.0', 'utf-8' );
$xml->preserveWhiteSpace = false;
$xml->loadXML ( $returndata );
$errors = $xml->getElementsByTagName( 'error' );
foreach ($errors as $error) {
echo $error->nodeValue;
}