khidirdotid/midtrans-laravel
Composer 安装命令:
composer require khidirdotid/midtrans-laravel
包简介
A Midtrans Wrapper for Laravel
README 文档
README
A Midtrans Wrapper for Laravel
Installation
-
Install the package
composer require khidirdotid/midtrans-laravel
-
Publish the config file
php artisan vendor:publish --provider="KhidirDotID\Midtrans\Providers\MidtransServiceProvider" -
Add the Facade to your
config/app.phpintoaliasessection'Midtrans' => KhidirDotID\Midtrans\Facades\Midtrans::class,
-
Add ENV data
MIDTRANS_PRODUCTION_SERVER_KEY=Mid-server- MIDTRANS_PRODUCTION_CLIENT_KEY=Mid-client- MIDTRANS_SANDBOX_SERVER_KEY=SB-Mid-server- MIDTRANS_SANDBOX_CLIENT_KEY=SB-Mid-client- MIDTRANS_ENVIRONMENT=sandbox MIDTRANS_3DS=false MIDTRANS_APPEND_NOTIF_URL= MIDTRANS_OVERRIDE_NOTIF_URL=
or you can set it through the controller
\Midtrans::setServerKey($serverKey); \Midtrans::setClientKey($clientKey); \Midtrans::setProduction(true); \Midtrans::set3ds(true); \Midtrans::setAppendNotifUrl(route('midtrans.ipn')); \Midtrans::setOverrideNotifUrl(route('midtrans.ipn'));
Usage
Snap
- Get Snap Token
$params = [ 'transaction_details' => [ 'order_id' => rand(), 'gross_amount' => 10000 ] ]; $snapToken = \Midtrans::getSnapToken($params);
- Initialize Snap JS when customer click pay button
<button id="pay-button">Pay!</button> <pre><div id="result-json">JSON result will appear here after payment:<br></div></pre> <!-- TODO: Remove ".sandbox" from script src URL for production environment. Also input your client key in "data-client-key" --> <script src="https://app.sandbox.midtrans.com/snap/snap.js" data-client-key="{{ env('MIDTRANS_SANDBOX_CLIENT_KEY') }}"></script> <script type="text/javascript"> document.getElementById('pay-button').onclick = function() { // SnapToken acquired from previous step snap.pay('{{ $snapToken }}', { // Optional onSuccess: function(result) { /* You may add your own js here, this is just example */ document.getElementById('result-json').innerHTML += JSON.stringify(result, null, 2); }, // Optional onPending: function(result) { /* You may add your own js here, this is just example */ document.getElementById('result-json').innerHTML += JSON.stringify(result, null, 2); }, // Optional onError: function(result) { /* You may add your own js here, this is just example */ document.getElementById('result-json').innerHTML += JSON.stringify(result, null, 2); } }); }; </script>
Snap Redirect
- Get Redirection URL of a Payment Page
$params = [ 'transaction_details' => [ 'order_id' => rand(), 'gross_amount' => 10000 ] ]; try { // Get Snap Payment Page URL $paymentUrl = \Midtrans::createTransaction($params)->redirect_url; // Redirect to Snap Payment Page return redirect()->away($paymentUrl); } catch (\Throwable $th) { throw $th; }
Core API
- Create Transaction details
$transaction_details = [ 'order_id' => time(), 'gross_amount' => 200000 ];
- Create Item Details, Billing Address, Shipping Address, and Customer Details (Optional)
// Populate items $items = [ [ 'id' => 'item1', 'price' => 100000, 'quantity' => 1, 'name' => 'Adidas f50' ], [ 'id' => 'item2', 'price' => 50000, 'quantity' => 2, 'name' => 'Nike N90' ] ]; // Populate customer's billing address $billing_address = [ 'first_name' => "Andri", 'last_name' => "Setiawan", 'address' => "Karet Belakang 15A, Setiabudi.", 'city' => "Jakarta", 'postal_code' => "51161", 'phone' => "081322311801", 'country_code' => 'IDN' ]; // Populate customer's shipping address $shipping_address = [ 'first_name' => "John", 'last_name' => "Watson", 'address' => "Bakerstreet 221B.", 'city' => "Jakarta", 'postal_code' => "51162", 'phone' => "081322311801", 'country_code' => 'IDN' ]; // Populate customer's info $customer_details = [ 'first_name' => "Andri", 'last_name' => "Setiawan", 'email' => "test@test.com", 'phone' => "081322311801", 'billing_address' => $billing_address, 'shipping_address' => $shipping_address ];
- Create Transaction Data
// Transaction data to be sent $transaction_data = [ 'payment_type' => 'bank_transfer', 'bank_transfer' => [ 'bank' => 'bca' ], 'transaction_details' => $transaction_details, 'item_details' => $items, 'customer_details' => $customer_details ];
- Charge
$response = \Midtrans::charge($transaction_data);
Handle HTTP Notification
- Create route to handle notifications
Route::match(['GET', 'POST'], 'midtrans.ipn', [PaymentController::class, 'midtransIpn'])->name('midtrans.ipn');
- Create method in controller
public function midtransIpn(Request $request) { try { $response = \Midtrans::status($request->transaction_id); if (in_array($response->transaction_status, ['settlement', 'capture']) && $response->fraud_status === 'accept') { // TODO: Set payment status in merchant's database to 'success' } } catch (\Throwable $th) { throw $th; } }
- Except verify CSRF token in
app/Http/Middleware/VerifyCsrfToken.phpprotected $except = [ 'midtrans/ipn' ];
khidirdotid/midtrans-laravel 适用场景与选型建议
khidirdotid/midtrans-laravel 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 33 次下载、GitHub Stars 达 0, 最近一次更新时间为 2023 年 04 月 29 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「laravel」 「midtrans」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 khidirdotid/midtrans-laravel 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 khidirdotid/midtrans-laravel 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 khidirdotid/midtrans-laravel 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
Laravel Midtrans - Wrapper for Midtrans package
Midtrans Accept Online Payment Magento 2 module
Midtrans gateway for Omnipay payment processing library
payment gateway using midtrans for badaso
Alfabank REST API integration
Unofficial PHP Wrapper for midtrans VT-Direct payment API.
统计信息
- 总下载量: 33
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 0
- 点击次数: 8
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2023-04-29