duitkupg/duitku-php
Composer 安装命令:
composer require duitkupg/duitku-php
包简介
Duitku PHP
README 文档
README
Welcome to Duitku PHP Example Project Implementation Page, Integrate this Duitku PHP to start transaction using Duitku in your Web or Application.
Demo Project
Go To Demo Duitku-PopGo To Demo Duitku-Api
Full Step Docs
Go To Duitku Docs Duitku-PopGo To Duitku Docs Duitku-Api
Installation
Install duitku-php with composer by following command:
composer require duitkupg/duitku-php:dev-master
or add it manually in your composer.json file.
"duitkupg/duitku-php": "dev-master"
Configuration Settings
$duitkuConfig = new \Duitku\Config("YOUR_MERCHANT_KEY", "YOUR_MERCHANT_CODE"); // false for production mode // true for sandbox mode $duitkuConfig->setSandboxMode(false); // set sanitizer (default : true) $duitkuConfig->setSanitizedMode(false); // set log parameter (default : true) $duitkuConfig->setDuitkuLogs(false);
Duitku POP
Create Invoice (Duitku-Pop)
Parameter paymentMethod is optional,
You can put payment method('paymentMethod') on parameter createInvoice, as a step to set direct payment to specific payment. Customers will be directed to wanted payment without necessary to pick a payment.
// $paymentMethod = ""; // PaymentMethod list => https://docs.duitku.com/pop/id/#payment-method $paymentAmount = 10000; // Amount $email = "customer@gmail.com"; // your customer email $phoneNumber = "081234567890"; // your customer phone number (optional) $productDetails = "Test Payment"; $merchantOrderId = time(); // from merchant, unique $additionalParam = ''; // optional $merchantUserInfo = ''; // optional $customerVaName = 'John Doe'; // display name on bank confirmation display $callbackUrl = 'http://YOUR_SERVER/callback'; // url for callback $returnUrl = 'http://YOUR_SERVER/return'; // url for redirect $expiryPeriod = 60; // set the expired time in minutes // Customer Detail $firstName = "John"; $lastName = "Doe"; // Address $alamat = "Jl. Kembangan Raya"; $city = "Jakarta"; $postalCode = "11530"; $countryCode = "ID"; $address = array( 'firstName' => $firstName, 'lastName' => $lastName, 'address' => $alamat, 'city' => $city, 'postalCode' => $postalCode, 'phone' => $phoneNumber, 'countryCode' => $countryCode ); $customerDetail = array( 'firstName' => $firstName, 'lastName' => $lastName, 'email' => $email, 'phoneNumber' => $phoneNumber, 'billingAddress' => $address, 'shippingAddress' => $address ); // Item Details $item1 = array( 'name' => $productDetails, 'price' => $paymentAmount, 'quantity' => 1 ); $itemDetails = array( $item1 ); $params = array( 'paymentAmount' => $paymentAmount, 'merchantOrderId' => $merchantOrderId, 'productDetails' => $productDetails, 'additionalParam' => $additionalParam, 'merchantUserInfo' => $merchantUserInfo, 'customerVaName' => $customerVaName, 'email' => $email, 'phoneNumber' => $phoneNumber, 'itemDetails' => $itemDetails, 'customerDetail' => $customerDetail, 'callbackUrl' => $callbackUrl, 'returnUrl' => $returnUrl, 'expiryPeriod' => $expiryPeriod ); try { // createInvoice Request $responseDuitkuPop = \Duitku\Pop::createInvoice($params, $duitkuConfig); header('Content-Type: application/json'); echo $responseDuitkuPop; } catch (Exception $e) { echo $e->getMessage(); }
Check Transaction Status (Duitku-Pop)
try { $merchantOrderId = "YOUR_MERCHANTORDERID"; $transactionList = \Duitku\Pop::transactionStatus($merchantOrderId, $duitkuConfig); header('Content-Type: application/json'); $transaction = json_decode($transactionList); // var_dump($transactionList); if ($transaction->statusCode == "00") { // Action Success } else if ($transaction->statusCode == "01") { // Action Pending } else { // Action Failed Or Expired } } catch (Exception $e) { echo $e->getMessage(); }
Callback (Duitku-Pop)
try { $callback = \Duitku\Pop::callback($duitkuConfig); header('Content-Type: application/json'); $notif = json_decode($callback); // var_dump($callback); if ($notif->resultCode == "00") { // Action Success } else if ($notif->resultCode == "01") { // Action Failed } } catch (Exception $e) { http_response_code(400); echo $e->getMessage(); }
Get Payment Method (Duitku-Pop)
try { $paymentAmount = "10000"; //"YOUR_AMOUNT"; $paymentMethodList = \Duitku\Pop::getPaymentMethod($paymentAmount, $duitkuConfig); header('Content-Type: application/json'); echo $paymentMethodList; } catch (Exception $e) { echo $e->getMessage(); }
Frontend Integration (Duitku-Pop)
$.ajax({
type: "POST",
data:{
// paymentMethod: '',
paymentAmount: amount,
productDetail: productDetail,
email: email,
phoneNumber: phoneNumber
},
url: 'http://domain.com/createInvoice.php',
dataType: "json",
cache: false,
success: function (result) {
console.log(result.reference);
console.log(result);
checkout.process(result.reference, {
successEvent: function(result){
// Add Your Action
console.log('success');
console.log(result);
alert('Payment Success');
},
pendingEvent: function(result){
// Add Your Action
console.log('pending');
console.log(result);
alert('Payment Pending');
},
errorEvent: function(result){
// Add Your Action
console.log('error');
console.log(result);
alert('Payment Error');
},
closeEvent: function(result){
// Add Your Action
console.log('customer closed the popup without finishing the payment');
console.log(result);
alert('customer closed the popup without finishing the payment');
}
});
}
});
Duitku API
Create Invoice (Duitku-Api)
$paymentAmount = 10000; // Amount $paymentMethod = "BT"; // Permata Bank Virtual Account $email = "customer@gmail.com"; // your customer email $phoneNumber = "081234567890"; // your customer phone number (optional) $productDetails = "Test Payment"; $merchantOrderId = time(); // from merchant, unique $additionalParam = ''; // optional $merchantUserInfo = ''; // optional $customerVaName = 'John Doe'; // display name on bank confirmation display $callbackUrl = 'http://YOUR_SERVER/callback'; // url for callback $returnUrl = 'http://YOUR_SERVER/return'; // url for redirect $expiryPeriod = 60; // set the expired time in minutes // Customer Detail $firstName = "John"; $lastName = "Doe"; // Address $alamat = "Jl. Kembangan Raya"; $city = "Jakarta"; $postalCode = "11530"; $countryCode = "ID"; $address = array( 'firstName' => $firstName, 'lastName' => $lastName, 'address' => $alamat, 'city' => $city, 'postalCode' => $postalCode, 'phone' => $phoneNumber, 'countryCode' => $countryCode ); $customerDetail = array( 'firstName' => $firstName, 'lastName' => $lastName, 'email' => $email, 'phoneNumber' => $phoneNumber, 'billingAddress' => $address, 'shippingAddress' => $address ); // Item Details $item1 = array( 'name' => $productDetails, 'price' => $paymentAmount, 'quantity' => 1 ); $itemDetails = array( $item1 ); $params = array( 'paymentAmount' => $paymentAmount, 'paymentMethod' => $paymentMethod, 'merchantOrderId' => $merchantOrderId, 'productDetails' => $productDetails, 'additionalParam' => $additionalParam, 'merchantUserInfo' => $merchantUserInfo, 'customerVaName' => $customerVaName, 'email' => $email, 'phoneNumber' => $phoneNumber, 'itemDetails' => $itemDetails, 'customerDetail' => $customerDetail, 'callbackUrl' => $callbackUrl, 'returnUrl' => $returnUrl, 'expiryPeriod' => $expiryPeriod ); try { // createInvoice Request $responseDuitkuApi = \Duitku\Api::createInvoice($params, $duitkuConfig); header('Content-Type: application/json'); echo $responseDuitkuApi; } catch (Exception $e) { echo $e->getMessage(); }
Check Transaction Status (Duitku-Api)
try { $merchantOrderId = "YOUR_MERCHANTORDERID"; $transactionList = \Duitku\Api::transactionStatus($merchantOrderId, $duitkuConfig); header('Content-Type: application/json'); $transaction = json_decode($transactionList); // var_dump($transactionList); if ($transaction->statusCode == "00") { // Action Success } else if ($transaction->statusCode == "01") { // Action Pending } else { // Action Failed Or Expired } } catch (Exception $e) { echo $e->getMessage(); }
Callback (Duitku-Api)
try { $callback = \Duitku\Api::callback($duitkuConfig); header('Content-Type: application/json'); $notif = json_decode($callback); // var_dump($callback); if ($notif->resultCode == "00") { // Action Success } else if ($notif->resultCode == "01") { // Action Failed } } catch (Exception $e) { http_response_code(400); echo $e->getMessage(); }
Get Payment Method (Duitku-Api)
try { $paymentAmount = "10000"; //"YOUR_AMOUNT"; $paymentMethodList = \Duitku\Api::getPaymentMethod($paymentAmount, $duitkuConfig); header('Content-Type: application/json'); echo $paymentMethodList; } catch (Exception $e) { echo $e->getMessage(); }
Tests
Tests Duitku-Pop
Create Invoice Test
php vendor\bin\phpunit tests\CreateInvoiceTest.php
Transaction Status Test
php vendor\bin\phpunit tests\TransactionStatusTest.php
Callback Test
php vendor\bin\phpunit tests\CallbackTest.php
Tests Duitku-Api
Create Invoice Api Test
php vendor\bin\phpunit tests\CreateInvoiceApiTest.php
Transaction Status Api Test
php vendor\bin\phpunit tests\TransactionStatusApiTest.php
Callback Api Test
php vendor\bin\phpunit tests\CallbackApiTest.php
duitkupg/duitku-php 适用场景与选型建议
duitkupg/duitku-php 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 46.62k 次下载、GitHub Stars 达 31, 最近一次更新时间为 2026 年 01 月 04 日, 在 PHP 生态内属于活跃度较高的组件。
我们在过去多个企业项目中使用过 duitkupg/duitku-php 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 duitkupg/duitku-php 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
统计信息
- 总下载量: 46.62k
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 32
- 点击次数: 21
- 依赖项目数: 3
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2026-01-04
