PHP code example of doku / doku-php-library
1. Go to this page and download the library: Download doku/doku-php-library library . Choose the download type require .
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
doku / doku-php-library example snippets
use Doku\Snap\Snap;
$privateKey = "YOUR_PRIVATE_KEY";
$publicKey = "YOUR_PUBLIC_KEY";
$clientId = "YOUR_CLIENT_ID";
$secretKey = "YOUR_SECRET_KEY";
$isProduction = false;
$issuer = "YOUR_ISSUER";
$authCode = "YOUR_AUTH_CODE";
$snap = new Snap($privateKey, $publicKey, $clientId, $issuer, $isProduction, $secretKey, $authCode);
$snap = new Snap($privateKey, $publicKey, $clientId, $issuer, $isProduction, $secretKey, $authCode);
use Doku\Snap\Models\VA\Request\CreateVaRequestDto;
use Doku\Snap\Models\TotalAmount\TotalAmount;
use Doku\Snap\Models\VA\AdditionalInfo\CreateVaRequestAdditionalInfo;
use Doku\Snap\Models\VA\VirtualAccountConfig\CreateVaVirtualAccountConfig;
$createVaRequestDto = new CreateVaRequestDto(
"8129014", // partner
"17223992157", // customerno
"812901417223992157", // virtualAccountNo
"T_" . time(), // virtualAccountName
"test.example." . time() . "@test.com", // virtualAccountEmail
"621722399214895", // virtualAccountPhone
"INV_CIMB_" . time(), // trxId
new TotalAmount("12500.00", "IDR"), // totalAmount
new CreateVaRequestAdditionalInfo(
"VIRTUAL_ACCOUNT_BANK_CIMB", new CreateVaVirtualAccountConfig(true)
), // additionalInfo
'C', // virtualAccountTrxType
"2024-08-31T09:54:04+07:00" // expiredDate
);
$result = $snap->createVa($createVaRequestDto);
echo json_encode($result, JSON_PRETTY_PRINT);
use Doku\Snap\Models\VA\Request\UpdateVaRequestDto;
use Doku\Snap\Models\VA\AdditionalInfo\UpdateVaRequestAdditionalInfo;
use Doku\Snap\Models\VA\VirtualAccountConfig\UpdateVaVirtualAccountConfig;
$updateVaRequestDto = new UpdateVaRequestDto(
"8129014", // partnerServiceId
"17223992155", // customerNo
"812901417223992155", // virtualAccountNo
"T_" . time(), // virtualAccountName
"test.example." . time() . "@test.com", // virtualAccountEmail
"00000062798", // virtualAccountPhone
"INV_CIMB_" . time(), // trxId
new TotalAmount("14000.00", "IDR"), // totalAmount
new UpdateVaRequestAdditionalInfo("VIRTUAL_ACCOUNT_BANK_CIMB", new UpdateVaVirtualAccountConfig("ACTIVE", "10000.00", "15000.00")), // additionalInfo
"O", // virtualAccountTrxType
"2024-08-02T15:54:04+07:00" // expiredDate
);
$result = $snap->updateVa($updateVaRequestDto);
echo json_encode($result, JSON_PRETTY_PRINT);
use Doku\Snap\Models\VA\Request\DeleteVaRequestDto;
use Doku\Snap\Models\VA\Request\DeleteVaRequestDto;
use Doku\Snap\Models\VA\AdditionalInfo\DeleteVaRequestAdditionalInfo;
$deleteVaRequestDto = new DeleteVaRequestDto(
"8129014", // partnerServiceId
"17223992155", // customerNo
"812901417223992155", // virtualAccountNo
"INV_CIMB_" . time(), // trxId
new DeleteVaRequestAdditionalInfo("VIRTUAL_ACCOUNT_BANK_CIMB") // additionalInfo
);
$result = $snap->deletePaymentCode($deleteVaRequestDto);
echo json_encode($result, JSON_PRETTY_PRINT);
use Doku\Snap\Models\DirectInquiry\InquiryResponseBodyDto;
use Doku\Snap\Models\DirectInquiry\InquiryResponseVirtualAccountDataDto;
use Doku\Snap\Models\DirectInquiry\InquiryReasonDto;
use Doku\Snap\Models\DirectInquiry\InquiryResponseAdditionalInfoDto;
use Doku\Snap\Models\VA\VirtualAccountConfig\CreateVaVirtualAccountConfig;
use Doku\Snap\Models\TotalAmount\TotalAmount;
directInquiry(){
$requestBody = $this->request->getJSON(true);
$authorization = $this->request->getHeaderLine('Authorization');
$isValid = $this->snap->validateTokenB2B($authorization);
if($isValid) {
$responseCode =2002400;
$responseMessage = 'Successful';
$inquiryRequestId = $requestBody['inquiryRequestId'];
$partnerServiceId = $requestBody['partnerServiceId'];
$customerNo = $requestBody['customerNo'];
$virtualAccountNo = $requestBody['virtualAccountNo'];
<!-- validate virtualAccountNo from your database before proccess it -->
$virtualAccountName = "Nama ". time();
$trxId = "INV_MERCHANT_" . time();
$virtualAccountEmail = "email." . time() . "@gmail.com";
$virtualAccountPhone =time();
$totalAmount = new TotalAmount(
"25000.00",
"IDR"
);
$inquiryStatus = "00";
$additionalInfo = new InquiryResponseAdditionalInfoDto(
$requestBody['additionalInfo']['channel'],
$trxId,
new CreateVaVirtualAccountConfig(
true,
"100000.00",
"10000.00"
)
);
$inquiryReason = new InquiryReasonDto(
"Success",
"Sukses"
);
$virtualAccountTrxType = "C";
$freeText = [
[
"english" => "Free text",
"indonesia" => "Tulisan Bebas"
]
];
$vaData = new InquiryResponseVirtualAccountDataDto(
$partnerServiceId,
$customerNo,
$virtualAccountNo,
$virtualAccountName,
$virtualAccountEmail,
$virtualAccountPhone,
$totalAmount,
$virtualAccountTrxType,
$additionalInfo,
$inquiryStatus,
$inquiryReason,
$inquiryRequestId,
$freeText
);
$body = new InquiryResponseBodyDto(
$responseCode,
$responseMessage,
$vaData
);
return $this->respond($body);
}
}
use Doku\Snap\Models\VA\Request\CheckStatusVaRequestDto;
$checkStatusVaRequestDto = new CheckStatusVaRequestDto(
"8129014", // partnerServiceId
"17223992155", // customerNo
"812901417223992155", // virtualAccountNo
null,
null,
null
);
$result = $snap-> ($checkStatusVaRequestDto);
echo json_encode($result, JSON_PRETTY_PRINT);
use Doku\Snap\Models\AccountBinding\AccountBindingRequestDto;
use Doku\Snap\Models\AccountBinding\AccountBindingAdditionalInfoRequestDto;
public function accountBinding()
{
$requestData = $this->request->getJSON(true);
$partnerReferenceNo = $requestData['phoneNo'] ?? null;
$additionalInfo = new AccountBindingAdditionalInfoRequestDto(
$requestData['additionalInfo']['channel'],
$requestData['additionalInfo']['custIdMerchant'],
$requestData['additionalInfo']['customerName']?? null,
$requestData['additionalInfo']['email'],
$requestData['additionalInfo']['idCard'] ?? null,
$requestData['additionalInfo']['country'] ?? null,
$requestData['additionalInfo']['address'] ?? null,
$requestData['additionalInfo']['dateOfBirth'] ?? null,
$requestData['additionalInfo']['successRegistrationUrl'],
$requestData['additionalInfo']['failedRegistrationUrl'],
$requestData['additionalInfo']['deviceModel'] ?? null,
$requestData['additionalInfo']['osType'] ?? null,
$requestData['additionalInfo']['channelId'] ?? null
);
$requestBody = new AccountBindingRequestDto(
$partnerReferenceNo,
$additionalInfo
);
$ipAddress = $this->request->getHeaderLine('X-IP-ADDRESS');
$deviceId = $this->request->getHeaderLine('X-DEVICE-ID');
$response = $this->snap->doAccountBinding($requestBody, $ipAddress, $deviceId);
if (is_array($response) || is_object($response)) {
$responseObject = (array)$response; // Ubah objek ke array jika perlu
} else {
throw new \Exception('Unexpected response type');
}
$responseCode = $responseObject['responseCode'];
$statusCode = substr($responseCode, 0, 3);
$this->response->setStatusCode((int)$statusCode);
return $this->response->setJSON($responseObject);
}
public function getTokenB2B2C() {
$requestData = $this->request->getJSON(true);
$authCode = $requestData['authCode'];
$tokenData = $this->snap->getTokenB2B2C($authCode);
return $this->response->setJSON($tokenData);
}
use Doku\Snap\Models\AccountUnbinding\AccountUnbindingRequestDto;
use Doku\Snap\Models\AccountUnbinding\AccountUnbindingAdditionalInfoRequestDto;
public function accountUnbinding()
{
$requestData = $this->request->getJSON(true);
$tokenId = $requestData['tokenId'] ?? '';
$additionalInfo = new AccountUnbindingAdditionalInfoRequestDto(
$requestData['additionalInfo']['channel']
);
$requestBody = new AccountUnbindingRequestDto(
$tokenId,
$additionalInfo
);
$ipAddress = $this->request->getHeaderLine('X-IP-ADDRESS');
$response = $this->snap->doAccountUnbinding($requestBody, $ipAddress);
if (is_array($response) || is_object($response)) {
$responseObject = (array)$response; // Ubah objek ke array jika perlu
} else {
throw new \Exception('Unexpected response type');
}
$responseCode = $responseObject['responseCode'];
$statusCode = substr($responseCode, 0, 3);
$this->response->setStatusCode((int)$statusCode);
return $this->response->setJSON($responseObject);
}
use Doku\Snap\Models\CardRegistration\CardRegistrationRequestDto;
use Doku\Snap\Models\CardRegistration\CardRegistrationAdditionalInfoRequestDto;
use Doku\Snap\Models\CardRegistration\CardRegistrationCardDataRequestDto;
public function cardRegist()
{
$requestData = $this->request->getJSON(true);
$cardData = new CardRegistrationCardDataRequestDto(
$requestData['cardData']['bankCardNo'],
$requestData['cardData']['bankCardType'],
$requestData['cardData']['expiryDate'],
$requestData['cardData']['identificationNo'],
$requestData['cardData']['identificationType'],
$requestData['cardData']['email'],
);
$custIdMerchant = $requestData['custIdMerchant'] ?? null;
$phoneNo = $requestData['phoneNo'] ?? null;
$additionalInfo = new CardRegistrationAdditionalInfoRequestDto(
$requestData['additionalInfo']['channel'],
$requestData['additionalInfo']['customerName']?? null,
$requestData['additionalInfo']['email'],
$requestData['additionalInfo']['idCard'] ?? null,
$requestData['additionalInfo']['country'] ?? null,
$requestData['additionalInfo']['address'] ?? null,
$requestData['additionalInfo']['dateOfBirth'] ?? null,
$requestData['additionalInfo']['successRegistrationUrl']?? null,
$requestData['additionalInfo']['failedRegistrationUrl']?? null
);
$requestBody = new CardRegistrationRequestDto(
$cardData,
$custIdMerchant,
$phoneNo,
$additionalInfo
);
$response = $this->snap->doCardRegistration($requestBody);
if (is_array($response) || is_object($response)) {
$responseObject = (array)$response; // Ubah objek ke array jika perlu
} else {
throw new \Exception('Unexpected response type');
}
$responseCode = $responseObject['responseCode'];
$statusCode = substr($responseCode, 0, 3);
$this->response->setStatusCode((int)$statusCode);
return $this->response->setJSON($responseObject);
}
public function getTokenB2B2C() {
$requestData = $this->request->getJSON(true);
$authCode = $requestData['authCode'];
$tokenData = $this->snap->getTokenB2B2C($authCode);
return $this->response->setJSON($tokenData);
}
use Doku\Snap\Models\AccountUnbinding\AccountUnbindingRequestDto;
use Doku\Snap\Models\AccountUnbinding\AccountUnbindingAdditionalInfoRequestDto;
public function cardUnbinding()
{
$requestData = $this->request->getJSON(true);
$tokenId = $requestData['tokenId'] ?? '';
$additionalInfo = new AccountUnbindingAdditionalInfoRequestDto(
$requestData['additionalInfo']['channel']
);
$requestBody = new AccountUnbindingRequestDto(
$tokenId,
$additionalInfo
);
$ipAddress = $this->request->getHeaderLine('X-IP-ADDRESS');
$response = $this->snap->doCardUnbinding($requestBody);
if (is_array($response) || is_object($response)) {
$responseObject = (array)$response; // Ubah objek ke array jika perlu
} else {
throw new \Exception('Unexpected response type');
}
$responseCode = $responseObject['responseCode'];
$statusCode = substr($responseCode, 0, 3);
$this->response->setStatusCode((int)$statusCode);
return $this->response->setJSON($responseObject);
}
use Doku\Snap\Models\TotalAmount\TotalAmount;
use Doku\Snap\Models\Payment\PaymentRequestDto;
use Doku\Snap\Models\Payment\PaymentAdditionalInfoRequestDto;
public function payment(){
$requestData = $this->request->getJSON(true);
$payOptionDetails =json_decode(json_encode($requestData['payOptionDetails'] ?? null));
$partnerReferenceNo = $requestData['partnerReferenceNo'] ?? null;
$amount = new TotalAmount(
$requestData['amount']['value'],
$requestData['amount']['currency']
);
$additionalInfo = new PaymentAdditionalInfoRequestDto(
$requestData['additionalInfo']['channel'],
$requestData['additionalInfo']['remarks'],
$requestData['additionalInfo']['successPaymentUrl'],
$requestData['additionalInfo']['failedPaymentUrl'],
$requestData['additionalInfo']['lineItems'],
$requestData['additionalInfo']['paymentType'] ?? null
);
$feeType = $requestData['feeType'] ?? '';
$chargeToken = $requestData['chargeToken'] ?? '';
$request = new PaymentRequestDto(
$partnerReferenceNo,
$amount,
$payOptionDetails,
$additionalInfo,
$feeType,
$chargeToken
);
$ipAddress = $this->request->getHeaderLine('X-IP-ADDRESS');
$authCode = $requestData['authCode'];
$response = $this->snap->doPayment($request, $authCode, $ipAddress);
if (is_array($response) || is_object($response)) {
$responseObject = (array)$response; // Ubah objek ke array jika perlu
} else {
throw new \Exception('Unexpected response type');
}
// var_dump($responseObject);
// Ambil responseCode
$responseCode = $responseObject['responseCode'];
// Atur status HTTP berdasarkan tiga angka pertama
$statusCode = substr($responseCode, 0, 3);
$this->response->setStatusCode((int)$statusCode); // Set status HTTP
return $this->response->setJSON($responseObject);
}
use Doku\Snap\Models\TotalAmount\TotalAmount;
use Doku\Snap\Models\PaymentJumpApp\PaymentJumpAppRequestDto;
use Doku\Snap\Models\PaymentJumpApp\PaymentJumpAppAdditionalInfoRequestDto;
use Doku\Snap\Models\PaymentJumpApp\UrlParamDto;
public function paymentJumpApp()
{
$requestData = $this->request->getJSON(true);
$partnerReferenceNo = $requestData['partnerReferenceNo'] ?? '';
$validUpTo = $requestData['validUpTo'] ?? '';
$pointOfInitiation = $requestData['pointOfInitiation'] ?? '';
$urlParam = new UrlParamDto(
$requestData['urlParam'][0]['url'],
$requestData['urlParam'][0]['type'],
$requestData['urlParam'][0]['isDeepLink']
);
$amount = new TotalAmount(
$requestData['amount']['value'],
$requestData['amount']['currency']
);
$metadata = isset($requestData['additionalInfo']['metadata']) ? $requestData['additionalInfo']['metadata'] : null;
$supportDeepLinkCheckoutUrl = isset($requestData['additionalInfo']['supportDeepLinkCheckoutUrl']) ? $requestData['additionalInfo']['supportDeepLinkCheckoutUrl'] : null;
$additionalInfo = new PaymentJumpAppAdditionalInfoRequestDto(
$requestData['additionalInfo']['channel'],
$requestData['additionalInfo']['orderTitle'],
$metadata,
$supportDeepLinkCheckoutUrl
);
$requestBody = new PaymentJumpAppRequestDto(
$partnerReferenceNo,
$validUpTo,
$pointOfInitiation,
$urlParam,
$amount,
$additionalInfo
);
$ipAddress = $this->request->getHeaderLine('X-IP-ADDRESS');
$deviceId = $this->request->getHeaderLine('X-DEVICE-ID');
$response = $this->snap->doPaymentJumpApp($requestBody,$deviceId,$ipAddress);
if (is_array($response) || is_object($response)) {
$responseObject = (array)$response; // Ubah objek ke array jika perlu
} else {
throw new \Exception('Unexpected response type');
}
$responseCode = $responseObject['responseCode'];
$statusCode = substr($responseCode, 0, 3);
$this->response->setStatusCode((int)$statusCode);
return $this->response->setJSON($responseObject);
}
public function debitStatus()
{
$requestData = $this->request->getJSON(true);
$originalPartnerReferenceNo = $requestData['originalPartnerReferenceNo'] ?? '';
$originalReferenceNo = $requestData['originalReferenceNo'] ?? '';
$originalExternalId = $requestData['originalExternalId'] ?? '';
$serviceCode = $requestData['serviceCode'] ?? '';
$transactionDate = $requestData['transactionDate'] ?? '';
$amountValue = $requestData['amount']['value'] ?? '';
$amountCurrency = $requestData['amount']['currency'] ?? '';
$amount = new TotalAmount($amountValue, $amountCurrency);
$merchantId = $requestData['merchantId'] ?? '';
$subMerchantId = $requestData['subMerchantId'] ?? '';
$externalStoreId = $requestData['externalStoreId'] ?? '';
$deviceId = $requestData['additionalInfo']['deviceId'] ?? '';
$channel = $requestData['additionalInfo']['channel'] ?? '';
$additionalInfo = new CheckStatusAdditionalInfoRequestDto($deviceId, $channel);
$requestBody = new DirectDebitCheckStatusRequestDto(
$originalPartnerReferenceNo,
$originalReferenceNo,
$originalExternalId,
$serviceCode,
$transactionDate,
$amount,
$merchantId,
$subMerchantId,
$externalStoreId,
$additionalInfo
);
$response = $this->snap->doCheckStatus($requestBody);
if (is_array($response) || is_object($response)) {
$responseObject = (array)$response; // Ubah objek ke array jika perlu
} else {
throw new \Exception('Unexpected response type');
}
$responseCode = $responseObject['responseCode'];
$statusCode = substr($responseCode, 0, 3);
$this->response->setStatusCode((int)$statusCode);
return $this->response->setJSON($responseObject);
}
public function refund()
{
$requestData = $this->request->getJSON(true);
$additionalInfo = new RefundAdditionalInfoRequestDto(
$requestData['additionalInfo']['channel']
);
$originalPartnerReferenceNo = $requestData['originalPartnerReferenceNo'] ?? '';
$originalExternalId = $requestData['originalExternalId'] ?? '';
$refundAmount = new TotalAmount(
$requestData['refundAmount']['value'],
$requestData['refundAmount']['currency']
);
$reason = $requestData['reason'] ?? '';
$partnerRefundNo = $requestData['partnerRefundNo'] ?? '';
$ipAddress = $this->request->getHeaderLine('X-IP-ADDRESS');
$authCode = $requestData['authCode'];
$deviceId = $this->request->getHeaderLine('deviceId');
$requestBody = new RefundRequestDto(
$additionalInfo,
$originalPartnerReferenceNo,
$originalExternalId,
$refundAmount,
$reason,
$partnerRefundNo
);
$response = $this->snap->doRefund($requestBody, $authCode, $ipAddress, $deviceId);
if (is_array($response) || is_object($response)) {
$responseObject = (array)$response; // Ubah objek ke array jika perlu
} else {
throw new \Exception('Unexpected response type');
}
$responseCode = $responseObject['responseCode'];
$statusCode = substr($responseCode, 0, 3);
$this->response->setStatusCode((int)$statusCode);
return $this->response->setJSON($responseObject);
}
public function checkBalance()
{
$requestData = $this->request->getJSON(true);
$additionalInfo = new BalanceInquiryAdditionalInfoRequestDto(
$requestData['additionalInfo']['channel']
);
$requestBody = new BalanceInquiryRequestDto(
$additionalInfo
);
$ipAddress = $this->request->getHeaderLine('X-IP-ADDRESS');
$authCode = $requestData['authCode'];
$response = $this->snap->doBalanceInquiry($requestBody, $authCode, $ipAddress);
if (is_array($response) || is_object($response)) {
$responseObject = (array)$response; // Ubah objek ke array jika perlu
} else {
throw new \Exception('Unexpected response type');
}
$responseCode = $responseObject['responseCode'];
$statusCode = substr($responseCode, 0, 3);
$this->response->setStatusCode((int)$statusCode);
return $this->response->setJSON($responseObject);
}
try {
$result = $snap->createVa($createVaRequestDto);
// Process successful result
} catch (Exception $e) {
echo "Error: " . $e->getMessage() . PHP_EOL;
// Handle the error appropriately
}
bash
composer