用于安全支付的Datatrans Payments API设置教程

237 阅读3分钟

作者:Vincy。最后修改于2022年9月29日。

Datatrans是欧洲流行的电子商务网站的支付网关系统之一。它提供无摩擦的支付解决方案。

Datatrans支付网关在欧洲国家广泛流行。我的一个来自德国的客户需要将这个支付网关集成到他们的网上商店。

在本教程中,我分享了在PHP应用程序中集成Datatrans的知识。这将为开发者节省研究长篇大论的Datatrans文档的时间。

这个支付网关提供了许多集成选项。

  1. 重定向和灯箱
  2. 安全字段
  3. 移动SDK
  4. API端点

在本教程中,我们将看到设置Datatrans支付网关的第一个集成选项。在前面的文章中,我们已经看到了许多在PHP中集成支付网关的例子

下面的工作实例有助于我们轻松地理解事情。在看这个例子之前,请先获得Datatrans的商户ID和密码。在访问这个支付API时,它对认证是很有用的。

datatrans api payment

获取Datatrans商户的ID和密码

通过下面的步骤可以得到你的Datatrans账户的商家ID和密码。

    1. 开设一个Datatrans沙盒账户并通过电子邮件进行验证。
    2. 通过选择用户名、组名(Login)和密码来设置你的账户。
    3. 设置完毕后,将显示以下细节
      • 登录凭证。
      • 管理仪表板的沙盒网址。
      • 网页、移动SDK的Datatrans商家ID。
    4. 访问沙盒网址,使用第3步中得到的凭证登录。
    5. 点击*"改变商家*"和 "选择商家 "来查看仪表板。
    6. 进入UPP管理->安全,复制API访问的**(Marchant Id**)用户名和密码

当我们看到CCAvenue支付集成时,它也列出了几个步骤,以便从仪表板上获得商家ID。

应用程序配置

这个配置文件是为这个例子创建的,以便在整个代码中使用API密钥。

它配置了支付后DataTrans服务器必须调用的URL。

Config.php (配置Datatrans认证细节)

<?php
class Config {

    const WEB_ROOT = 'http://localhost/pp-article-code/data-trans/';

    const MERCHANT_ID = 'YOUR_MERCHANT_ID';

    const PASSWORD = 'YOUR_MERCHANT_DASHBOARD_PASSWORD';

    const SUCCESS_URL = Config::WEB_ROOT . 'return.php';

    const CANCEL_URL = Config::WEB_ROOT . 'return.php?status=cancelled';

    const ERROR_URL = Config::WEB_ROOT . 'return.php?status=error';
}
?>

显示 "立即支付 "选项

首先,一个登陆页面显示一个带有支付选项的产品瓦片。它将在浏览器中显示一个 "通过DataTrans支付 "按钮。

点击这个按钮后,它将调用AJAX脚本来获得交易ID。

这个页面包括Datatrans的JavaScript库,以便用交易ID开始支付。

index.php (带支付按钮的产品瓦片)

<HTML>
<HEAD>
<TITLE>Datatrans Payments API for Secure Payment</TITLE>
<link rel="stylesheet" type="text/css" href="css/style.css">
<script src="https://code.jquery.com/jquery-3.6.0.min.js"
    integrity="sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4="
    crossorigin="anonymous"></script>

</HEAD>
<BODY>

    <div class="container">
        <h1>Datatrans Payments API for Secure Payment</h1>
        <div class="outer-container">
            <img src="image/camera.jpg" alt="camera image">
            <div class="inner-container">

                <p class="text-style">A6900 MirrorLess Camera</p>


                <p class="price-color-align">
                    $289.61<input type="hidden" name="amount"
                        id="amount" value="289.61" />
                </p>

                <input type="button" id="pay-now" class="pay-button"
                    value="Pay via DataTrans" onClick="initiate()" />
            </div>
        </div>
    </div>
    <script
        src="https://pay.sandbox.datatrans.com/upp/payment/js/datatrans-2.0.0.js"></script>
</BODY>
</HTML>

获取交易ID并通过API进行支付

*initiate()*函数向PHP文件发布金额以启动Datatrans支付。

结果是,PHP将返回交易ID以进一步处理付款。

*proceedPayment()*函数调用Datatrans JavaScript API来开始付款。它将显示一个带有卡片选项的Datatrans覆盖层来选择支付方式。

index.php (调用Datatrans启动的AJAX脚本)

function initiate() {
	$.ajax({
		method: "POST",
		url: "initialize-datatrans-ajax.php",
		dataType: "JSON",
		data: { "amount": $("#amount").val() }
	})
		.done(function(response) {
			if (response.responseType == 'success') {
				proceedPayment(response.transactionId);
			} else {
				alert(response.responseType + ": " + response.message);
			}
		});

};

function proceedPayment(transactionId) {
	Datatrans.startPayment({
		transactionId: transactionId,
		'opened': function() { console.log('payment-form opened'); },
		'loaded': function() { console.log('payment-form loaded'); },
		'closed': function() { console.log('payment-page closed'); },
		'error': function() { console.log('error'); }
	});
}

启动支付交易,获得Datatrans支付交易ID

这个文件是通过AJAX脚本调用的PHP端点,以获得Datatrans交易ID。

它调用DatatransPaymentService,向Datatrans API发布cURL请求。它请求启动支付并从Datatrans服务器接收交易ID。

这个输出将在AJAX成功回调中读取,以通过JavaScript库开始支付。

initialize-datatrans-ajax.php

initializeTransaction($amount, $orderId);
print $result;
?>

Datatrans支付交易服务,通过PHP cURL调用API

这个服务调用包含*initializeTransaction()*方法,该方法在PHP中准备cURL请求到Datatrans API。

它将金额、货币和更多细节传递给API端点,以请求交易ID。

DatatransPaymentService.php

 $amount,
            'currency' => "USD",
            'refno' => $orderId,
            'redirect' => [
                'successUrl' => Config::SUCCESS_URL,
                "cancelUrl" => Config::CANCEL_URL,
                "errorUrl" => Config::ERROR_URL
            ]
        ));

        $key = Config::MERCHANT_ID . ':' . Config::PASSWORD;
        $keyBase64 = base64_encode($key);

        $ch = curl_init();

        curl_setopt_array($ch, array(
            CURLOPT_URL => $url,
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_CUSTOMREQUEST => "POST",
            CURLOPT_POSTFIELDS => $postFields,
            CURLOPT_HTTPAUTH => CURLAUTH_BASIC,
            CURLOPT_HTTPHEADER => array(
                "Authorization: Basic " . $keyBase64,
                "Content-Type: application/json"
            )
        ));

        $curlResponse = curl_exec($ch);

        $curlJSONObject = json_decode($curlResponse);

        if (empty($curlResponse)) {
            $curlError = curl_error($ch);
        } else if (! empty($curlJSONObject->error)) {
            $curlError = $curlJSONObject->error->code . ": " . $curlJSONObject->error->message;
        }
        curl_close($ch);

        if (empty($curlJSONObject->transactionId)) {
            $result = array(
                'responseType' => "Error",
                'message' => $curlError
            );
        } else {
            $result = array(
                'responseType' => "success",
                'transactionId' => $curlJSONObject->transactionId
            );
        }

        $result = json_encode($result);

        return $result;
    }
}
?>

付款后调用应用程序的URL

return.php

<HTML>
<HEAD>
<TITLE>Datatrans payment status notice</TITLE>
</HEAD>
<BODY>
    <div class="text-center">
<?php
if (! empty($_GET["status"])) {
    ?>
    <h1>Something wrong with the payment process!</h1>
        <p>Kindly contact admin with the reference of
	your transaction id <?php echo $_GET["datatransTrxId"]; ?></p>
<?php
} else {
    ?>
    <h1>Your order has been placed</h1>
        <p>We will contact you shortly.</p>
<?php
}
?>
</div>
</BODY>
</HTML>

下载