
在构建现代 Web 应用时,支付功能无疑是核心模块之一。尤其是在电商、在线服务等领域,一个稳定、高效的支付系统直接关系到用户体验和业务收益。我最近负责开发一个面向印度尼西亚市场的在线商店,需要集成当地主流的支付网关——Midtrans。起初,我像往常一样,习惯性地去 Midtrans 官网寻找 PHP SDK,然后考虑手动下载、引入文件。
然而,这种传统的集成方式很快就让我感受到了压力:
require_once 各种文件,导致项目代码结构混乱,不利于团队协作和后期维护。我意识到,这种“刀耕火种”的开发方式已经跟不上时代了。我需要一个更现代、更可靠的解决方案。
就在我一筹莫展之际,我想到了 Composer——PHP 的依赖管理工具。Composer 不仅仅是一个包管理器,它更是 PHP 生态系统中的“瑞士军刀”,能够帮助我们自动化管理项目所需的各种库。通过 Composer,我们可以声明项目依赖的库,它会自动下载、安装这些库,并生成一个自动加载文件,让我们可以轻松地使用这些库而无需手动 require。
而 Midtrans 也提供了官方的 PHP Wrapper:midtrans/midtrans-php。这简直是雪中送炭!
midtrans/midtrans-php 实战使用 Composer 接入 Midtrans 支付网关,流程变得异常简洁和高效。
midtrans/midtrans-php
打开你的项目终端,运行以下命令:
<code class="bash">composer require midtrans/midtrans-php</code>
仅仅一行命令,Composer 就会自动下载 midtrans/midtrans-php 及其所有依赖,并将它们放置在项目的 vendor/ 目录下。同时,它还会生成 vendor/autoload.php 文件,负责所有依赖的自动加载。
在你的 PHP 代码中,首先引入 Composer 的自动加载文件,然后进行 Midtrans 的基本配置。
<pre class="brush:php;toolbar:false;"><?php require_once __DIR__ . '/vendor/autoload.php'; // 设置你的 Merchant Server Key \Midtrans\Config::$serverKey = '<你的服务器密钥>'; // 设置为开发/沙箱环境 (默认为 false)。生产环境请设置为 true。 \Midtrans\Config::$isProduction = false; // 开启数据清洗 (默认为 true) \Midtrans\Config::$isSanitized = true; // 信用卡交易开启 3DS (默认为 true) \Midtrans\Config::$is3ds = true; // 还可以配置通知URL等高级选项 // \Midtrans\Config::$appendNotifUrl = "https://example.com/test1,https://example.com/test2"; // \Midtrans\Config::$overrideNotifUrl = "https://example.com/test1"; // ... 你的支付逻辑 ...
这里的配置非常直观,你只需要从 Midtrans 后台获取你的 serverKey,并根据环境设置 isProduction 即可。
Midtrans 提供了多种支付产品,例如 Snap(可定制的支付弹窗)、Snap Redirect(重定向到 Midtrans 托管的支付页面)和 Core API(后端直接调用,前端自定义)。这里以最常用的 Snap 为例:
<pre class="brush:php;toolbar:false;"><?php
// ... 上面的配置代码 ...
$params = array(
'transaction_details' => array(
'order_id' => rand(100000, 999999), // 生成一个唯一的订单ID
'gross_amount' => 100000, // 交易总金额,例如 100,000 印尼盾
),
'customer_details' => array(
'first_name' => 'Budi',
'last_name' => 'Utomo',
'email' => 'budi.utomo@example.com',
'phone' => '08111222333',
),
'item_details' => array(
array(
'id' => 'item01',
'price' => 50000,
'quantity' => 1,
'name' => '产品 A'
),
array(
'id' => 'item02',
'price' => 50000,
'quantity' => 1,
'name' => '产品 B'
)
)
);
try {
$snapToken = \Midtrans\Snap::getSnapToken($params);
echo "Snap Token: " . $snapToken;
// 将 snapToken 传递给前端,用于初始化 Snap.js
// 前端示例 (HTML/JS):
/*
<html>
<body>
<button id="pay-button">立即支付!</button>
<script src="https://app.sandbox.midtrans.com/snap/snap.js" data-client-key="<你的客户端密钥>"></script>
<script type="text/javascript">
document.getElementById('pay-button').onclick = function(){
snap.pay('<?=$snapToken?>', {
onSuccess: function(result){ console.log('Payment Success:', result); },
onPending: function(result){ console.log('Payment Pending:', result); },
onError: function(result){ console.log('Payment Error:', result); }
});
};
</script>
</body>
</html>
*/
} catch (Exception $e) {
echo "Error: " . $e->getMessage();
}这段代码首先定义了交易详情、客户信息和商品详情,然后调用 \Midtrans\Snap::getSnapToken() 获取一个 Snap Token。这个 Token 会被传递到前端,用于在用户点击支付按钮时,通过 Midtrans 的 Snap.js 库弹出支付界面。整个过程后端只需处理少量逻辑,极大地简化了前端支付流程的开发。
支付完成后,Midtrans 会通过 Webhook 向你的应用发送通知。你需要创建一个专门的端点来接收和处理这些通知,更新订单状态。
<pre class="brush:php;toolbar:false;"><?php
require_once __DIR__ . '/vendor/autoload.php';
// 设置你的 Merchant Server Key
\Midtrans\Config::$serverKey = '<你的服务器密钥>';
\Midtrans\Config::$isProduction = false; // 与你的环境保持一致
$notif = new \Midtrans\Notification();
$transactionStatus = $notif->transaction_status;
$fraudStatus = $notif->fraud_status;
$orderId = $notif->order_id;
error_log("Order ID $orderId: transaction status = $transactionStatus, fraud status = $fraudStatus");
if ($transactionStatus == 'capture') {
if ($fraudStatus == 'challenge') {
// 订单状态更新为 'challenge'
} else if ($fraudStatus == 'accept') {
// 订单状态更新为 'success'
}
} else if ($transactionStatus == 'settlement') {
// 订单状态更新为 'success' (针对非信用卡交易)
} else if ($transactionStatus == 'cancel' || $transactionStatus == 'deny' || $transactionStatus == 'expire') {
// 订单状态更新为 'failure'
}
// ... 根据需要处理其他状态 ...
// 务必返回 HTTP 200 OK 响应给 Midtrans,表示通知已成功接收
http_response_code(200);通过 \Midtrans\Notification() 对象,你可以方便地获取交易状态、欺诈状态等信息,并据此更新你的数据库中的订单状态。
通过 midtrans/midtrans-php 结合 Composer,我感受到了前所未有的开发效率和代码质量提升:
composer require 一键安装,composer update 轻松更新,告别手动文件管理。现在,我的电商项目支付模块运行稳定,维护起来也异常轻松。事实证明,拥抱 Composer 这样的现代 PHP 工具,是提升开发效率和项目质量的关键一步。如果你也面临类似的支付集成挑战,强烈推荐你尝试 midtrans/midtrans-php 搭配 Composer,它会是你的得力助手!
以上就是告别繁琐集成:如何使用Composer轻松接入Midtrans支付网关的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号