如何使用 php 开发 neteller Direct API?

Posted

技术标签:

【中文标题】如何使用 php 开发 neteller Direct API?【英文标题】:How to develop neteller Direct API with php? 【发布时间】:2013-09-24 07:44:21 【问题描述】:

我正在网站上开发 neteller direct api,用户可以在其中将资金转移到我们的商家帐户。 API 步骤如下:

    在网站上创建表单 要求用户填写表格 将表单提交到 neteller 安全 URL,该 URL 将返回带有响应元素的 XML 页面

我对提交表单后下一步该怎么做感到困惑?当我们提交表单时,我们得到 xml 页面,这很好,但现在该怎么办?我需要将结果显示给用户,以便在提交表单后,用户将能够看到一条消息,上面写着“事务完成”或基于 XML 批准值的类似消息。我尝试使用 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 或如何?

【问题讨论】:

【参考方案1】:

我能够通过 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);

【讨论】:

【参考方案2】:

您不会将请求发送给 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; 

【讨论】:

以上是关于如何使用 php 开发 neteller Direct API?的主要内容,如果未能解决你的问题,请参考以下文章

HDU5115:Dire Wolf——题解+翻译

Hdu5115 Dire Wolf

UVAlive 10154:Dire Wolf 区间DP

HDU 5115 Dire Wolf(区间dp)

hdu 5115 Dire Wolf 区间dp

Php文件上载脚本