Getting Started
Aspire makes the integration process as easy as possible. Allows the Aspire payment page to appear on your web page/application after checkout, with a very easy integration process. Hand over your payment to Aspire Pop. Provide optional payments and confirmation of payments made by customers on your page. Only by you bring Aspire pop on your page.
Overview
- The user performs the checkout operation.
- The merchant server makes an API request to the Aspire payment backend to get the ASPIRE_REFERENCE.
- Aspire payment backend response to the API call with the ASPIRE_REFERENCE.
- The merchant server constructs the HTML page and sends it back to the browser.
- The user verifies the details and clicks the pay button. Merchant's javascript code calls checkout.process(ASPIRE_REFERENCE, options).
- Aspire payment backend processes the details and responds with the payment status. Then, Aspire JS calls the corresponding callback provided by the merchant's javascript code.
- Aspire payment backend notifies the merchant server about the payment status.
Integration Step
To connect with Aspire payment gateway API, There are few things should be known as below.
Merchant Code
Merchant Code is a project code that can be seen on Aspire payment gateway dashboard . This code is used as your project identifier in every transaction. Every projects that have been registered on merchant portal is have a merchant code. See on how to create merchant code here.
API Key
API (Application Programming Interface) is an authentication code to access Aspire API. API key use to prevent dangerous user or malware. As merchant code, API key can be found in every projects that have been registered on merchant portal as pairs.
Supported Browsers
Web
Browser | Version |
---|---|
Chrome | 26 and above |
Firefox | 29 and above |
Internet Explorer | 10 and above |
Safari | 6 and above |
Mobile
Browser | Version |
---|---|
Chrome | 32 and above |
Android | 4.4 and above |
Safari | 8 and above |
Library
You can use Aspire Library for integration and to start transaction using Aspire on your web or application. For further step you may see Aspire Library on the package repository at each library. Click the link below.
Backend Integration or Server Side
The backend integration goal is to acquire ASPIRE_REFERENCE
by providing payment information. We provide an HTTP API to do this.
Create Invoice
Create Invoice API is used to get Aspire's reference by sending requirement parameters to the API. Merchant will get Aspire's reference, payment URL as a response from API.
Basic Authentication
Basic Authentication that Aspire uses is signature, timestamp, and merchant code that are sent within request headers.
- Signature
The signature is the transaction identification code. Contains transaction parameters that have been hashed using the SHA256 hashing method. The hash parameter is merchant code, timestamp, then API key, and should be in order.
- Timestamp
The timestamp is a UNIX timestamp in milliseconds within our timezone (Jakarta). The UNIX timestamp is a way to track time as a running total of seconds.
- Merchant code
The merchant code is a project ID that has been created and registered at the Aspire payment gateway dashboard.
Endpoint
- HTTP Method:
POST
- Production:
https://api-prod.gateway.aspireapp.com/api/merchant/createInvoice
- Sandbox:
https://api-sandbox.gateway.aspireapp.com/api/merchant/createInvoice
Request Headers
To create a valid HTTP request, the merchant needs to use headers like in below:
Accept: application/json
Content-Type: application/json
x-duitku-signature: FORMAT SHA256(<YOUR_MERCHANT_CODE_HERE> + <TIMESTAMP_JAKARTA> + <YOUR_API_KEY_HERE>)
x-duitku-timestamp: <TIMESTAMP_JAKARTA>(Milliseconds)
x-duitku-merchantcode: <YOUR_MERCHANT_CODE_HERE>
Request Parameter
{
"paymentAmount": 40000,
"partnerId":"XXXXXXXX",
"merchantOrderId": "1648542419",
"productDetails": "Test Pay with Aspire",
"additionalParam": "",
"merchantUserInfo": "",
"customerVaName": "John Doe",
"email": "[email protected]",
"phoneNumber": "08123456789",
"itemDetails": [{
"name": "Test Item 1",
"price": 10000,
"quantity": 1
}, {
"name": "Test Item 2",
"price": 30000,
"quantity": 3
}],
"customerDetail": {
"firstName": "John",
"lastName": "Doe",
"email": "[email protected]",
"phoneNumber": "08123456789",
"billingAddress": {
"firstName": "John",
"lastName": "Doe",
"address": "Jl. Kembangan Raya",
"city": "Jakarta",
"postalCode": "11530",
"phone": "08123456789",
"countryCode": "ID"
},
"shippingAddress": {
"firstName": "John",
"lastName": "Doe",
"address": "Jl. Kembangan Raya",
"city": "Jakarta",
"postalCode": "11530",
"phone": "08123456789",
"countryCode": "ID"
}
},
"callbackUrl": "https:\/\/example.com\/api-pop\/backend\/callback.php",
"returnUrl": "https:\/\/example.com\/api-pop\/backend\/redirect.php",
"expiryPeriod": 10
}
<?php
$merchantCode = 'DXXXXX'; // from Aspire payment gateway dashboard
$merchantKey = 'XXXXXXXCX17XXXX5XX5XXXXXX0X3XXAF'; // from Aspire payment gateway dashboard
$partnerId = 'XXXXXXXX'; // From Aspire dashboard
$paymentAmount = 40000;
$merchantOrderId = time() . ''; // from merchant, unique
$productDetails = 'Test Pay with Aspire';
$email = '[email protected]'; // email customer merchant
$phoneNumber = '08123456789'; // customer merchant phone number (optional)
$additionalParam = ''; // optional
$merchantUserInfo = ''; // optional
$customerVaName = 'John Doe'; // Show customer name on the bank view
$callbackUrl = 'http://example.com/callback'; // URL untuk callback
$returnUrl = 'http://example.com/return'; // URL untuk redirect
$expiryPeriod = 10; // expire transaction time in minutes
$signature = hash('sha256', $merchantCode.$timestamp.$merchantKey);
//$paymentMethod = 'VC'; //use for directional payment
// Detail Customer
$firstName = "John";
$lastName = "Doe";
// Alamat
$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
);
$item1 = array(
'name' => 'Test Item 1',
'price' => 10000,
'quantity' => 1);
$item2 = array(
'name' => 'Test Item 2',
'price' => 30000,
'quantity' => 3);
$itemDetails = array(
$item1, $item2
);
/*For payment Credit Card
$creditCardDetail = array (
'acquirer' => '014',
'binWhitelist' => array (
'014',
'400000'
)
);*/
$params = array(
'partnerId' => $partnerId,
'paymentAmount' => $paymentAmount,
'merchantOrderId' => $merchantOrderId,
'productDetails' => $productDetails,
'additionalParam' => $additionalParam,
'merchantUserInfo' => $merchantUserInfo,
'customerVaName' => $customerVaName,
'email' => $email,
'phoneNumber' => $phoneNumber,
'itemDetails' => $itemDetails,
'customerDetail' => $customerDetail,
//'creditCardDetail' => $creditCardDetail,
'callbackUrl' => $callbackUrl,
'returnUrl' => $returnUrl,
'expiryPeriod' => $expiryPeriod
//'paymentMethod' => $paymentMethod
);
$params_string = json_encode($params);
//echo $params_string;
$url = 'https://api-sandbox.gateway.aspireapp.com/api/merchant/createinvoice'; // Sandbox
// $url = 'https://api-prod.gateway.aspireapp.com/api/merchant/createinvoice'; // Production
$ch = curl_init();
$timestamp = round(microtime(true) * 1000); //in milisecond
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $params_string);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Content-Length: ' . strlen($params_string),
'x-duitku-signature:' . $signature ,
'x-duitku-timestamp:' . $timestamp ,
'x-duitku-merchantcode:' . $merchantCode
)
);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
//execute post
$request = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if($httpCode == 200)
{
$result = json_decode($request, true);
//header('location: '. $result['paymentUrl']);
echo "paymentUrl :". $result['paymentUrl'] . "<br />";
echo "merchantCode :". $result['merchantCode'] . "<br />";
echo "reference :". $result['reference'] . "<br />";
echo "vaNumber :". $result['vaNumber'] . "<br />";
echo "amount :". $result['amount'] . "<br />";
echo "statusCode :". $result['statusCode'] . "<br />";
echo "statusMessage :". $result['statusMessage'] . "<br />";
}
else
{
echo $httpCode;
}
?>
curl --location --request POST 'https://api-sandbox.gateway.aspireapp.com/api/merchant/createInvoice' \
--header 'x-duitku-signature: sample string' \
--header 'x-duitku-timestamp: 1629219840000' \
--header 'x-duitku-merchantcode: D0001' \
--header 'Content-Type: application/json' \
--data-raw
{
"partnerId":"XXXXXXXX",
"paymentAmount":40000,
"merchantOrderId":"1579838431",
"productDetails":"Test Pay with Aspire",
"additionalParam":"",
"merchantUserInfo":"",
"customerVaName":"John Doe",
"email":"[email protected]",
"phoneNumber":"08123456789",
"itemDetails":[
{
"name":"Test Item 1",
"price":10000,
"quantity":1
},
{
"name":"Test Item 2",
"price":30000,
"quantity":3
}
],
"customerDetail":{
"firstName":"John",
"lastName":"Doe",
"email":"[email protected]",
"phoneNumber":"08123456789",
"billingAddress":{
"firstName":"John",
"lastName":"Doe",
"address":"Jl. Kembangan Raya",
"city":"Jakarta",
"postalCode":"11530",
"phone":"08123456789",
"countryCode":"ID"
},
"shippingAddress":{
"firstName":"John",
"lastName":"Doe",
"address":"Jl. Kembangan Raya",
"city":"Jakarta",
"postalCode":"11530",
"phone":"08123456789",
"countryCode":"ID"
}
},
"callbackUrl":"http:\/\/example.com\/callback",
"returnUrl":"http:\/\/example.com\/return",
"expiryPeriod":10
}
Parameter | Type | Required | Description | Example |
---|---|---|---|---|
partnerId | string | ✗ |
Partner ID is an identifier for your partner in our platforms feature, and you can obtain this ID from Aspire dashboard. Use the ID in the request if you want to make a collection on behalf of a partner. | XXXXXXXX |
paymentAmount | integer | ✓ |
Payment amount. | 150000 |
merchantOrderId | string(50) | ✓ |
Order ID from merchant. | abcde12345 |
productDetails | string(255) | ✓ |
Product detail. | Payment for Example Store |
string(255) | ✓ |
Your customer email. | [email protected] | |
additionalParam | string(255) | ✗ |
Additional parameter (optional). | |
merchantUserInfo | string(255) | ✗ |
Username or email customer (optional). | [email protected] |
customerVaName | string(20) | ✗ |
The name will appear on the bank's payment confirmation page. | John Doe |
phoneNumber | string(50) | ✗ |
Customer phone number (optional). | 08123456789 |
itemDetails | Object | ✗ |
Item Details (optional). | |
customerDetail | CustomerDetail | ✗ |
Customer Detail. | |
returnUrl | string(255) | ✓ |
URL for redirect when the transaction is finish or canceled. | http://www.example.com/return |
callbackUrl | string(255) | ✓ |
URL for transaction Callback. | http://www.example.com/callback |
expiryPeriod | integer | ✗ |
The validity period of the transaction before it expires. For details expiryPeriod can be found here. | 5, 10 or 60 (in minutes) |
paymentMethod | string | ✗ |
Payment Method is a payment gateway code. | VC |
creditCardDetail | creditCardDetail | ✗ |
A detail parameter for credit card payment method (optional). |
Aspire uses merchantCode
and apiKey
to allow access to the API. You can register a new merchantCode
at our Merchant Portal.
Response Parameters
{
"merchantCode": "DXXXX",
"reference": "DXXXXS875LXXXX32IJZ7",
"paymentUrl": "https://app-sandbox.gateway.aspireapp.com/redirect_checkout?reference=DXXXXS875LXXXX32IJZ7",
"statusCode": "00",
"statusMessage": "SUCCESS"
}
Parameter | Type | Description | Example |
---|---|---|---|
merchantCode | string | Merchant code from Aspire. | D0001 |
reference | string | Reference from Aspire (need to be saved on your system). | DXXXXS875LXXXX32IJZ7 |
paymentUrl | string | Payment URL if you want to use Aspire payment page. | https://app-sandbox.gateway.aspireapp.com/redirect_checkout?reference=DXXXXS875LXXXX32IJZ7 |
statusCode | string | Response status code. | 00 |
statusMessage | string | Response status. | Success |
JSON Object
Collection of JSON objects.
Item Details
"itemDetails": [{
"name": "Apel",
"quantity": 2,
"price": 50000
}]
Parameter | Type | Required | Description | Example |
---|---|---|---|---|
name | string(50) | ✓ |
Name of the item. | Apel |
quantity | integer | ✓ |
Quantity of the item bought. | 2 |
price | integer | ✓ |
Price of the item. Note: Don't add decimal. | 50000 |
Customer Detail
"customerDetail": {
"firstName": "John",
"lastName": "Doe",
"email": "[email protected]",
"phoneNumber": "081234567890",
"billingAddress": {
"firstName": "John",
"lastName": "Doe",
"address": "St Panjang",
"city": "Jakarta",
"postalCode": "41011",
"phone": "081234567890",
"countryCode": "ID"
},
"shippingAddress": {
"firstName": "John",
"lastName": "Doe",
"address": "St Panjang",
"city": "Jakarta",
"postalCode": "41011",
"phone": "081234567890",
"countryCode": "ID"
}
}
Parameter | Type | Required | Description | Example |
---|---|---|---|---|
firstName | string(50) | ✗ |
Customer first name. | John |
lastName | string(50) | ✗ |
Customer last name. | Doe |
string(50) | ✗ |
Customer email. | [email protected] | |
phoneNumber | string(50) | ✗ |
Customer phone number. | 081234567890 |
billingAddress | Address | ✗ |
Customer billing address. | |
shippingAddress | Address | ✗ |
Customer shipping address. |
Address
{
"firstName": "John",
"lastName": "Doe",
"address": "St Panjang",
"city": "Jakarta",
"postalCode": "41011",
"phone": "081234567890",
"countryCode": "ID"
}
Parameter | Type | Required | Description | Example |
---|---|---|---|---|
firstName | string(50) | ✗ |
Customer first name. | John |
lastName | string(50) | ✗ |
Customer last name. | Doe |
address | string(50) | ✗ |
Address for billing or shipping. | St Panjang |
city | string(50) | ✗ |
City description for the address. | Jakarta |
postalCode | string(50) | ✗ |
Postal code for the address. | 41011 |
phone | string(50) | ✗ |
Phone number for billing or shipping. | 081234567890 |
countryCode | string(50) | ✗ |
ISO 3166-1 alpha-3. | ID - for Indonesia |
Credit Card Detail
The following are additional parameters for transaction requests using the optional creditcard switcher channel.
"creditCardDetail": {
"acquirer":"014",
"binWhitelist":["014","022", "400000"]
}
Parameter | Type | Required | Description | Example |
---|---|---|---|---|
acquirer | string(3) | ✗ |
You can specify which bank Acquirer will be used for the transaction. • 014 for BCA. • 022 for CIMB. |
014 |
binWhitelist | array string(3) | ✗ |
Parameters to limit which card that allowed on the transaction. Using bank code(3 digits) or credit card bin number(6 digits). Maximum list is 15 bin(s). | 014, 022, 400000 |
Callback
<?php
$apiKey = 'YOUR_MERCHANT_KEY_HERE'; // Your API key
$merchantCode = isset($_POST['merchantCode']) ? $_POST['merchantCode'] : null;
$amount = isset($_POST['amount']) ? $_POST['amount'] : null;
$merchantOrderId = isset($_POST['merchantOrderId']) ? $_POST['merchantOrderId'] : null;
$productDetail = isset($_POST['productDetail']) ? $_POST['productDetail'] : null;
$additionalParam = isset($_POST['additionalParam']) ? $_POST['additionalParam'] : null;
$paymentCode = isset($_POST['paymentCode']) ? $_POST['paymentCode'] : null;
$resultCode = isset($_POST['resultCode']) ? $_POST['resultCode'] : null;
$merchantUserId = isset($_POST['merchantUserId']) ? $_POST['merchantUserId'] : null;
$reference = isset($_POST['reference']) ? $_POST['reference'] : null;
$signature = isset($_POST['signature']) ? $_POST['signature'] : null;
$publisherOrderId = isset($_POST['publisherOrderId']) ? $_POST['publisherOrderId'] : null;
$spUserHash = isset($_POST['spUserHash']) ? $_POST['spUserHash'] : null;
$settlementDate = isset($_POST['settlementDate']) ? $_POST['settlementDate'] : null;
$issuerCode = isset($_POST['issuerCode']) ? $_POST['issuerCode'] : null;
//log callback untuk debug
// file_put_contents('callback.txt', "* Callback *\r\n", FILE_APPEND | LOCK_EX);
if(!empty($merchantCode) && !empty($amount) && !empty($merchantOrderId) && !empty($signature))
{
$params = $merchantCode . $amount . $merchantOrderId . $apiKey;
$calcSignature = md5($params);
if($signature == $calcSignature)
{
//Callback is valid
//You might update your payment status here
// file_put_contents('callback.txt', "* Success *\r\n\r\n", FILE_APPEND | LOCK_EX);
}
else
{
// file_put_contents('callback.txt', "* Bad Signature *\r\n\r\n", FILE_APPEND | LOCK_EX);
throw new Exception('Bad Signature')
}
}
else
{
// file_put_contents('callback.txt', "* Bad Parameter *\r\n\r\n", FILE_APPEND | LOCK_EX);
throw new Exception('Bad Parameter')
}
?>
curl --location --request POST 'http:\/\/example.com\/callback' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'merchantOrderId=abcde12345' \
--data-urlencode 'amount=150000' \
--data-urlencode 'merchantCode=DXXXX' \
--data-urlencode 'productDetails=Pembayaran untuk Toko Contoh' \
--data-urlencode 'additionalParam=contoh param' \
--data-urlencode 'paymentCode=VA' \
--data-urlencode 'resultCode=00' \
--data-urlencode '[email protected]' \
--data-urlencode 'reference=DXXXXCX80TXXX5Q70QCI' \
--data-urlencode 'signature=506f88f1000dfb4a6541ff94d9b8d1e6'\
--data-urlencode 'publisherOrderId=MGUHWKJX3M1KMSQN5'\
--data-urlencode 'spUserHash=xxxyyyzzz'\
--data-urlencode 'settlementDate=2023-07-25'\
--data-urlencode 'issuerCode=93600523'
When the customer makes a payment. Aspire will send an HTTP POST that includes the results of paying a bill from a customer. To process the results of transactions made by customers, Merchants need to provide a page to receive the callback.
Parameters
Parameter | Description | Example |
---|---|---|
merchantCode | Merchant code from Aspire. | D0010 |
paymentAmount | Payment amount. | 150000 |
merchantOrderId | Order ID from merchant. | abcde12345 |
productDetail | Product detail. | Payment for Example Store |
additionalParam | Additional parameter (optional). | |
paymentCode | Payment method. | VC |
resultCode | Payment status. | 00 - Success 01 - Failed |
merchantUserId | User ID from merchant. | [email protected] |
reference | Reference from Aspire, save this to trace the transaction. | D0010E65V0MLAI4M2O4S |
signature | Signature. | Formula: MD5(merchantcode + amount + merchantOrderId + merchantKey) |
publisherOrderId | Unique transaction payment number from Aspire, save this to trace the transaction. | MGUHWKJX3M1KMSQN5 |
spUserHash | Will be sent to your callback if the payment method using ShopeePay(QRIS, App, and Account Link). If this string parameter contains alphabet and numeric, then it might been paid by Shopee itself. | xxxyyyzzz |
settlementDate | Settlement date estimation information. Format: YYYY-MM-DD |
2023-07-25 |
issuerCode | QRIS issuer code information.See issuer list here. *except for QRIS Link Aja payment method. | 93600523 |
Frontend Integration or View Side
General Review
The frontend integration goal is to show Aspire payment page within your site.
Include aspire_pg.js
into your page so Aspire checkout module is available.
You can start the payment process by calling checkout.process
with ASPIRE_REFERENCE
acquired from backend integration as the parameter.
Aspire JS module location
You can add script tag between your HTML head tag.
- Production:
<script src="https://app-prod.gateway.aspireapp.com/lib/js/aspire_pg.js"></script>
- Sandbox:
<script src="https://app-sandbox.gateway.aspireapp.com/lib/js/aspire_pg.js"></script>
Aspire JS
After you include Aspire JS script tag you can use object checkout
.
process(aspireReference, options)
checkout.process(result.reference, {
defaultLanguage: "id", //optional to set default language
successEvent: function(result){
// your code here
console.log('success');
console.log(result);
alert('Payment Success');
},
pendingEvent: function(result){
// your code here
console.log('pending');
console.log(result);
alert('Payment Pending');
},
errorEvent: function(result){
// your code here
console.log('error');
console.log(result);
alert('Payment Error');
},
closeEvent: function(result){
// your code here
console.log('customer closed the popup without finishing the payment');
console.log(result);
alert('customer closed the popup without finishing the payment');
}
});
Start Aspire payment page.
Parameter:
Name | Type | Description |
---|---|---|
aspireReference | string | Aspire reference get from backend integration. |
options.defaultLanguage | string (optional) | Language settings. en - english. id - indonesian language. |
options.successEvent | function (optional) | Payment success callback (00). |
options.pendingEvent | function (optional) | Payment pending callback (01). |
options.errorEvent | function (optional) | Payment error callback. |
options.closeEvent | function (optional) | Called if customer closed the payment popup without finishing the payment (02). |
JS Callback
Transaction Result
{
"resultCode": "00",
"merchantOrderId": "abcde12345",
"reference": "qwerty12345"
}
The object representing transaction result passed to Aspire callback.
Name | Type | Description |
---|---|---|
resultCode | string | Result code from Aspire. |
merchantOrderId | string | Order ID from merchant. |
reference | string | Reference from Aspire. |
Window Redirection
There is an alternative technique to load the pop UI page instead of calling aspire_pg.js
, this method call window redirection. Merchants can utilize the response value in paymentUrl
from the Create Pop Token request. Merchants don’t have to load aspire_pg.js
on their page, as the user is redirected to a page that is hosted by Aspire. For language configuration you may add &lang=en
query parameter on the paymentUrl
as below.
https://app-sandbox.gateway.aspireapp.com/redirect_checkout?reference=DXXXXS875LXXXX32IJZ7&lang=en
- id - Indonesian language
- en - English
Other than language configuration Aspire has rates convert configuration. You may add ¤cy=USD query parameter. Aspire supports 2 conversions, There are:
- USD - (America Dollar)
- EUR - (Euro)
*Those conversions only show as an estimation. The Rate could be changed at any time.
With this redirection merchants can load the pop page in full window mode view like this:
Redirect
After the transaction and billing request is formed, from the Aspire payment page(Window Redirection), user will be redirect to the address provided in the Create Invoice(returnUrl
) parameter after payment or via the return button.
And at the time of the redirect, Aspire will include several related billing parameters.
You'll need to create a landing page in this return URL address.
Example
GET: http://www.merchantweb.com/redirect.php?merchantOrderId=abcde12345&resultCode=00&reference=D0010E65V0MLAI4M2O4S
Parameters
Parameter | Description | Example |
---|---|---|
merchantOrderId | Order ID from merchant. | abcde12345 |
reference | Reference from Aspire. | D0010E65V0MLAI4M2O4S |
resultCode | Result code. | 00 |
Payment Method
Here are some payment methods available on Aspire payment gateway and you could use. You can put payment method(paymentMethod
) on parameter create invoice, as a step to set direct payment to specific payment.
Customers will be directed to wanted payment without necessary to pick a payment.
Payment Type | Payment Code | Description |
---|---|---|
Credit Card | VC |
(Visa / Master Card / JCB) |
Virtual Account | BC |
BCA Virtual Account |
M2 |
Mandiri Virtual Account | |
VA |
Maybank Virtual Account | |
I1 |
BNI Virtual Account | |
B1 |
CIMB Niaga Virtual Account | |
BT |
Permata Bank Virtual Account | |
A1 |
ATM Bersama | |
AG |
Bank Artha Graha | |
NC |
Bank Neo Commerce/BNC | |
BR |
BRIVA | |
Retail | FT |
Pegadaian/ALFA/Pos |
IR |
Indomaret | |
E-Wallet | OV |
OVO (Support Void) |
SA |
ShopeePay Apps (Support Void) | |
LF |
LinkAja Apps (Fixed Fee) | |
LA |
LinkAja Apps (Percentage Fee) | |
DA |
DANA | |
QRIS | SP |
ShopeePay |
LQ |
LinkAja | |
NQ |
Nobu | |
DQ |
Dana | |
GQ |
Gudang Voucher | |
Credit | DN |
Indodana Paylater |
AT |
ATOME |
Issuer List (QRIS)
Code | Issuer |
---|---|
93600999 | AHDI |
93600947 | Aladin Syariah |
93600567 | Allo Bank Indonesia |
93600531 | Amar |
93600822 | Astrapay |
93600116 | Bank Aceh Syariah |
93600037 | Bank Artha Graha Internasional |
93600133 | Bank BPD Bengkulu |
93600124 | Bank BPD Kalimantan Timur dan Kalimantan Utara |
93600161 | Bank Ganesha |
93600513 | Bank Ina Perdana |
93600113 | Bank Jateng |
93600123 | Bank Kalbar |
93600122 | Bank Kalsel |
93600441 | Bank KB Bukopin |
93600121 | Bank Lampung |
93600157 | Bank Maspion |
93600553 | Bank Mayora |
93600548 | Bank Multiarta Sentosa |
93600490 | Bank Neo Commerce |
93600128 | Bank NTB Syariah |
93600019 | Bank Panin |
93600132 | Bank Papua |
93600115 | Bank Pembangunan Daerah Jambi |
93600494 | Bank Raya |
93600119 | Bank Riau Kepri |
93600523 | Bank Sahabat Sampoerna |
93600152 | Bank Shinhan |
93600126 | Bank Sulsel |
93600120 | Bank Sumselbabel |
93600023 | Bank UOB Indonesia |
93600808 | Bayarind |
93600014 | BCA |
93600536 | BCA Syariah |
93600501 | BCAD |
93600815 | Bimasakti Multi Sinergi |
93600110 | BJB |
93600425 | BJB Syariah |
93600919 | BluePay |
93600009 | BNI |
93600129 | BPD Bali |
93600112 | BPD DIY |
93600130 | BPD NTT |
93600114 | BPD-JATIM |
93600002 | BRI |
93600422 | BRIS Pay |
93600200 | BTN |
93600076 | Bumi Arta |
93600031 | Citibank |
93600950 | Commonwealth |
93600915 | Dana |
93600011 | Danamon |
93600046 | DBS MAX QRIS |
93600111 | DKI |
93600899 | Doku |
93600998 | DSP |
93600827 | Fello |
93600777 | Finpay |
93600813 | GAJA |
93600914 | Go-Pay |
93600916 | Gudang Voucher |
93600484 | Hana bank |
93600789 | IMkas |
93600920 | Isaku |
93600542 | JAGO |
93600213 | Jenius |
93600812 | Kaspro |
93600911 | LinkAja |
93600008 | Mandiri Pay |
93600016 | Maybank |
93600426 | Mega |
93600821 | Midazpay |
93600485 | Motion Banking |
93600147 | Muamalat |
93600118 | Nagari |
93600814 | Netzme |
93600022 | Niaga |
93600503 | Nobu |
93600028 | OCBC |
93600811 | OTTOCASH |
93600912 | OVO |
93600820 | PAC Cash |
93600818 | Paydia |
93600917 | Paytrend |
93600013 | Permata |
93608161 | POS Indonesia |
93600167 | QNB Indonesia |
93600921 | Saldomu |
93600535 | Seabank |
93600918 | ShopeePay |
93600153 | Sinarmas |
93600816 | SPIN |
93600451 | Syariah Indonesia |
93600898 | T-Money |
93600828 | TrueMoney |
93600835 | Virgo |
93600830 | YODU |
93600817 | Yukk |
93600825 | Zipay |
Errors
HTTP Response
Error Code | Error Name | Description |
---|---|---|
400 | Bad Request | There is something wrong with the request that has been sent to the API. |
400 | Amount is different please try again later. | This error happen because you try to re-hit or try to re-create invoice in one moment with the same order Id but with different amount. |
401 | Unauthorized | Access being rejected because authorization. |
404 | Not Found | The page or API is not recognized. |
409 | The transaction is still in progress. | This error happen because you try to re-hit or try to re-create invoice in one moment with the same order Id. (While the firts request is still on process). |
500 | Internal Server Error | Error in the server when trying to process the request. |
API Response
Callback
Response Code | Response Name | Description |
---|---|---|
00 | Success | Transaction has been successfully paid. |
02 | Failed | Transaction has been failed. |
Redirect
Response Code | Response Name | Description |
---|---|---|
00 | Success | Transaction has been pay. |
01 | Process | Transaction has not been pay. |
02 | Canceled/Failed | Transaction canceled or not being paid. |
Testing
Here is a list of dummy transaction credentials that can be used to make a transaction in the sandbox environment.
Credit Card
3D Secure Transaction
Card Type | Credit Card Number | Valid Thru | CVV |
---|---|---|---|
VISA | 4000 0000 0000 0044 | 03/33 | 123 |
MASTERCARD | 5500 0000 0000 0004 | 03/33 | 123 |
Virtual Account
Demo transaction virtual account sandbox click-here.
E-Money
Shopee
For shopee testing you can download shopeeapp staging apk here.
QRIS
For Shopee QRIS use Shopeeapp as like shopee e-money. For Gudang Voucher can use within virtual account demo success.
Paylater
Indodana
Phone Number | PIN |
---|---|
081282325566 | 000000 |
Atome
Successful Scenario
Country Code | Mobile | OTP |
---|---|---|
ID | +62811000122 | 7524 |
Failure Scenario
Country Code | Mobile | OTP |
---|---|---|
ID | +62810000001500 | 1111 |
Pop API Demo
Pop API Demo click-here.
Sample Project
For a sample you can see at our Github link here.