---
title: Pre-Auth & Capture - Payment API Credit Card
slug: nicepay-api-non-snap-pre-auth-and-capture-payment-api-credit-card
description: Informasi tentang API Non-SNAP Payment - Payment - Pre-Auth & Capture - API Credit Card yang terdapat pada sistem NICEPAY
image: https://archbee-image-uploads.s3.amazonaws.com/ZHvSjR5ZrsoxwKbJa3xmo/VSARdliCypOl6FBnJzVfo_rdrx9d8diaz-pgm07xfz2-test-1-1.png
icon: {"faIcon":"fa-solid fa-book"}
docTags: 
createdAt: 2022-12-01T07:59:45.000Z
---

# Tentang Pre-Auth & Capture - Payment API Credit Card

***

Setelah Anda melakukan pendaftaran transaksi Kartu Kredit dengan tipe fitur Pre-Auth & Capture pada [Pre-Auth & Capture - Registration API Credit Card](docId\:VJ5k6iZOTkdPnRfMabAJ8), Anda dapat melanjutkan langkah selanjutnya ke proses pembayaran pada transaksi tersebut melalui API Payment ini.&#x20;

:::hint{type="success"}
Pelajari mengenai fitur pembayaran Kartu Kredit dengan `RecurringToken` di halaman [Fitur Kartu Kredit](docId\:cgLxG10p9zmVtuX_-b7ga) atau kunjungi penjelasan teknis API mengenai Pre-Auth Capture di halaman [Pre-Auth & Capture - Payment API Credit Card](docId\:zFDKm9bwMDI5FRoKfInDK).
:::



# Pre-Auth - Payment API Credit Card (Hold Fund)

***



| **API Endpoint**   | `/nicepay/direct/v2/payment`                                 |
| ------------------ | ------------------------------------------------------------ |
| **Request Method** | <font color="#3b9f0f">**POST**</font>****                    |
| **Description**    | Pre-Auth (Hold Fund)                                         |
| **Merchant Token** | SHA256(`timeStamp`+`iMid`+`referenceNo`+`amt`+`merchantKey`) |
| **Request Format** | `application/json`                                           |



## Request Parameter for Pre-Auth - Payment API Credit Card (Hold Fund)

***



Untuk dapat melakukan fitur Pre-Auth dari transaksi yang Pelanggan Anda akan lakukan, Anda diperlukan untuk mengisi parameter `tXid` dari hasil *response&#x20;*&#x70;ada [Pre-Auth & Capture - Registration API Credit Card](docId\:VJ5k6iZOTkdPnRfMabAJ8) yang Anda sudah lakukan sebelumnya.&#x20;

| **Parameter**                                                | **Tipe** | **Ukuran&#x20;** | **Deskripsi**                          | **Contoh / Catatan**                                             |
| ------------------------------------------------------------ | -------- | ---------------- | -------------------------------------- | ---------------------------------------------------------------- |
| `timeStamp`<br /><font color="#2166ae">Required</font>       | N        | 14               | Request Timestamp (`YYYYMMDDHH24MISS`) | 20230522130518                                                   |
| `tXid`<br /><font color="#2166ae">Required</font>            | AN       | 30               | &#xD;Transaction ID	                   | IONPAYTEST01202305161007570327                                   |
| `referenceNo`<br /><font color="#2166ae">Required</font>     | ANS      | 40               | Merchant Order Number                  | This Is The Description Of The Payment                           |
| `merchantToken`<br /><font color="#2166ae">Required</font>   | AN       | 255              | Merchant Token                         | ff139e49606387091cd9baeadff3161aff6afd9406e1f481e0fdb8b46d1ae5ae |
| `cardNo`<br /><font color="#2166ae">Required</font>          | N        | 20               | Credit Card Number                     | 443426\*\*\*\*\*\*0008                                           |
| `cardExpYymm`<br /><font color="#2166ae">Required</font>     | A        | 4                | Card Expiry (`YYMM`)                   | 3901                                                             |
| `cardHolderNm`<br /><font color="#2166ae">Required</font>    | AN       | 45               | Card Holder Name                       | John Doe<br /><br />**Only alphabet allowed**                    |
| `cardHolderEmail`<br /><font color="#2166ae">Required</font> | ANS      | 100              | Card Holder Email                      | johndoe\@gmail.com                                               |
| `cardCvv`<br /><font color="#2166ae">Required</font>         | N        | 6                | Card CVV                               | 100                                                              |
| `callBackUrl`<br /><font color="#2166ae">Required</font>     | ANS      | 255              | Payment Result URL                     | https\://www\.merchant.com/callbackUrl/                          |

Anda juga memerlukan parameter `cardNo`, `cardExpYymm`, `cardHolderNm`, `cardHolderEmail` & `cardCvv` yang Anda bisa dapatkan dari Pelanggan Anda agar tagihan transaksinya dapat diproses.&#x20;



## Response Parameter for Pre-Auth - Payment API Credit Card (Hold Fund)

***



Berikut ini adalah *response&#x20;*&#x70;arameter dari hasil *request&#x20;*&#x50;re-Auth Payment *(Hold Fund)*.

| **Parameter**  | **Tipe** | **Ukuran** | **Deskripsi**                                                | **Contoh / Catatan**                                                               |
| -------------- | -------- | ---------- | ------------------------------------------------------------ | ---------------------------------------------------------------------------------- |
| `timeStamp`    | N        | 14         | Response Date<br />(`YYYYMMDDHH24MISS`)                      | 20230516135959                                                                     |
| `resultCd`     | N        | 4          | [Result Code](docId\:gvAdBBr0SQ92N1zHplSFM)                  | 0000                                                                               |
| `resultMsg`    | AN       | 255        | Result Message: [Error Code](docId\:yEh1VA9k2y6sL1kQF2aWD)   | SUCCESS                                                                            |
| `tXid`         | AN       | 30         | Transaction ID                                               | IONPAYTEST01202305161007570327                                                     |
| `referenceNo`  | ANS      | 40         | Merchant Order Number                                        | MerchantReferenceNumber001                                                         |
| `payMethod`    | N        | 2          | [Payment Method Code](docId\:g7inRV70XcSA9lP7bpmok)          | 01<br /><br />When Success                                                         |
| `amount`       | N        | 12         | Payment Amount                                               | 10000<br /><br />When Success                                                      |
| `currency`     | AN       | 3          | Currency                                                     | IDR<br /><br />When Success                                                        |
| `goodsNm`      | AN       | 100        | Goods Name                                                   | Merchant Goods 1<br /><br />When Success                                           |
| `billingNm`    | AN       | 100        | Buyer Name                                                   | John Doe<br /><br />When Success                                                   |
| `transDt`      | N        | 8          | Transaction Date<br />(`YYYYMMDD`)                           | 20230522<br /><br />When Success                                                   |
| `transTm`      | N        | 6          | Transaction Time<br />(`HH24MISS`)                           | 135959<br /><br />When Success                                                     |
| `description`  | AN       | 100        | Description                                                  | This Is The Description Of The Payment <br /><br />When Success                    |
| `authNo`       | N        | 10         | Approval Number                                              | 123456<br /><br />When Success                                                     |
| `issuBankCd`   | A        | 4          | [Issuing Bank Code](docId:1U7QOax_wrzXMoCG-Mqad)             | CENA<br /><br />When Success                                                       |
| `acquBankCd`   | A        | 4          | [Acquiring Bank Code](docId:1U7QOax_wrzXMoCG-Mqad)           | BNIA<br /><br />When Success                                                       |
| `cardNo`       | AN       | 20         | Card Number <br />(Masked)                                   | 443426\*\*\*\*\*\*0008<br /><br />When Success<br />&#xD;                          |
| `cardExpYymm`  | N        | 4          | Card Expiry<br />(`YYMM`)                                    | 3901<br /><br />When Success                                                       |
| `instmntMon`   | N        | 2          | Installment Month                                            | 1<br /><br />When Success                                                          |
| `instmnType`   | N        | 2          | [Installment Type Code](docId:7CIX-U_4z295XgtNVEsbO)         | 1<br /><br />When Success                                                          |
| `preauthToken` | AN       |            | Pre-Auth Token                                               | 5c6ba40e61c45d9fa37e763ea1f86b9d6ac5f1f7ed279e4d4531191c83279320<br />When Success |
| `ccTransType`  | AN       | 2          | [Credit Card Transaction Type](docId:8m3-7Smhm_jhdrE5pCRzp)  | 3<br /><br />When Success                                                          |
| `vat`          | N        | 12         | Value Added Tax<br />(VAT)                                   | 0<br /><br />When Success                                                          |
| `fee`          | N        | 12         | Service Fee                                                  | 0<br /><br />When Success                                                          |
| `notaxAmt`     | N        | 12         | Tax Free Amount                                              | 0<br /><br />When Success                                                          |
| `acquBankNm`   | A        | 255        | Acquiring Bank Name                                          | CIMB                                                                               |
| `issuBankNm`   | A        | 255        | Issuing Bank Name                                            | BCA                                                                                |

Apabila proses ini berhasil maka dana yang sudah dibayarkan akan di-*hold&#x20;*&#x73;ecara otomatis dan Anda pun akan mendapatkan `preauthToken` yang diperlukan untuk melakukan proses Capture nantinya.

:::hint{type="warning"}
Mohon untuk segera melakukan proses Capture setelah proses Pre-Auth sudah diselesaikan sebelum dana transaksinya kedaluwarsa dan akan dianggap *void&#x20;*(dana transaksi akan dikembalikan ke *cardholder*)**
**
Tenggat waktu kedaluwarsa pada transaksi jenis Pre-Auth biasanya memakan waktu sampai 7 hari.
:::





## Sample Parameter for Pre-Auth - Payment API Credit Card (Hold Fund)

***

### Request Parameter

:::CodeblockTabs
cURL

```curl
curl --location 'https://dev.nicepay.co.id/nicepay/direct/v2/payment' \
--header 'X-FORWARDED-FOR: 1.2.3' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--header 'Cookie: JSESSIONID=3FE76F9694B783056D2B7303A357C20B.pg_was1' \
--data-urlencode 'timeStamp=20251001101049' \
--data-urlencode 'tXid=TESTMPGS0501202510011026450166' \
--data-urlencode 'referenceNo=ordNo20251001101069' \
--data-urlencode 'merchantToken=de7774d7e288057b706f70317f94b3c893724222cdce9922371dca6228531816' \
--data-urlencode 'cardNo=5123450000000008' \
--data-urlencode 'cardExpYymm=3106' \
--data-urlencode 'cardCvv=100' \
--data-urlencode 'cardHolderNm=Nicepay Test' \
--data-urlencode 'callBackUrl=https://dev.nicepay.co.id/IONPAY_CLIENT/paymentResult.jsp?order_id=TESTMPGS0501202510011026450166'
```

Node.js

```nodejs
let secondVersion = new SecondApiVersion(config);

let parameterPayment = {
  amt: "10000",
  referenceNo: "ordNo20251001101069",
  tXid: "TESTMPGS0501202510011026450166",
  cardNo: "5123450000000008",
  callBackUrl: "https://dev.nicepay.co.id/IONPAY_CLIENT/paymentResult.jsp?order_id=RECURRTEST01202509301555563979",
  cardExpYymm: "3106",
  cardCvv: "100",
  cardHolderNm: "Nicepay Test",
  preauthToken: "",  // Leave empty for hold fund
  cardHolderEmail: "test@email.com",
};

let response = secondVersion.requestPayment(parameterPayment);
```

```java
NICEPay config = NICEPay.builder()
        .isProduction(false) // Set to true for production
        .build();

Card requestData = Card.builder()
        .timeStamp("20250922143200")                           // Current timestamp (yyyyMMddHHmmss)
        .tXid("TESTMPGS0501202510011026450166")              // Transaction ID from registration
        .iMid("TESTMPGS05")                                   // Your NICEPay iMid
        .referenceNo("ordNo20251001101069")                  // Unique order reference
        .amt("10000")                                          // Payment amount
        .merchantToken(timeStamp, iMid, reffNo, amount, MERCHANT_KEY) // Secure token generation
        .cardNo("5123450000000008")                           // Test card number
        .cardExpYymm("3601")                                  // Card expiry date (YYMM)
        .cardCvv("100")                                       // 3-digit CVV
        .cardHolderNm("NICEPAY TEST")                         // Cardholder name
        .callBackUrl("https://dev.nicepay.co.id/IONPAY_CLIENT/paymentResult.jsp") // Callback URL
        .recurringToken("")                                   // Leave empty if not recurring token
        .preauthToken("")                                     // Leave empty for hold fund
        .build();

String responseHtml = V2CardService.callV2CardPaymentRequest(requestData, config);

```

```python
bodyPayment = (
    builderPayment.BuildPayment()
    .setTimestamp(datetime.now().strftime("%Y%m%d%H%M%S"))  # Current timestamp (yyyyMMddHHmmss)
    .setTxid("TESTMPGS0501202510011026450166")            # Transaction ID from registration
    .setReferenceNo("ordNo20251001101069")                 # Unique order reference
    .setCashtag("")                                         # Leave empty if not using cashtag
    .setCardNo("5123450000000008")                          # Test card number
    .setCardExpYymm("3901")                                 # Card expiry date (YYMM)
    .setCardCvv("100")                                      # 3-digit CVV
    .setRecurringToken("")                                  # Leave empty if not recurring
    .setPreAuthToken("")                                    # Leave empty for hold fund request
    .setAmt("10000")                                         # Payment amount
    .build()
)

environment = (
    builderEnvironment.BuildEnvironment()
    .isCloud(False)   # Set to True if using NICEPay Cloud
    .isProduction(False)  # Set to True for production
    .build()
)

response = ServiceNicepay.servicePayment(
    DataGenerator.getPaymentBody(bodyPayment.dataPayment()),
    environment
)
```

Vanilla JS

```javascript
const paymentData = {
  cardNo: "5123450000000008",              // Test card number
  cardExpYymm: "3601",                     // Card expiry in YYMM format
  cardCvv: "100",                          // 3-digit CVV
  cardHolderEmail: "customer@example.com", // Cardholder email
  cardHolderNm: "Nicepay Test",                // Cardholder name
  callBackUrl: "https://your-domain.com/callback", // Callback URL after payment
  tXid: "TESTMPGS0501202510011026450166", // Transaction ID from registration
  merchantToken: "bc2ee7790486a7ee4a5313d4c1d4088a38456b89204e308ae38e0beee3849d0b", // Secure token
  preauthToken: "", // Leave empty for hold fund
};

const response = await Nicepay.paymentTransaction(paymentData);

```

Laravel

```php
$url = HttpUtil::getNicepayDomain($this->useProd, $this->useCloud) . $this->payment_endpoint;

// Request body parameters
$txid = "TESTMPGS0501202510011026450166";
$timestamp = Carbon::now()->format("YmdHis"); // Current timestamp (yyyyMMddHHmmss)
$reference_no = "ordNo20251001101069";
$amt = "10000";

// Generate secure merchant token
$merchant_token = $this->generateMerchantToken(
    $timestamp,
    $this->imid,
    $reference_no,
    $amt,
    $this->mer_key
);

$param = [
    "timeStamp"       => $timestamp, // Current timestamp
    "tXid"            => $txid,      // Transaction ID from registration
    "merchantToken"   => $merchant_token, // Secure hash token
    "cardNo"          => "5123450000000008", // Test card number
    "cardExpYymm"     => "3901",     // Card expiry date (YYMM)
    "cardCvv"         => "100",      // 3-digit CVV
    "callBackUrl"     => "https://www.nicepay.co.id/IONPAY_CLIENT/paymentResult.jsp", // Callback URL
    "recurringToken" => "", //Leave empty if not recurring
    "preauthToken" => "", // Leave empty for hold fund request
];

$response = HttpUtil::redirectWithQueryParams($url, $param);

```

PHP Native

```php
$config = NICEPay::builder()
    ->setIsProduction(true) // Set to false for sandbox/testing
    ->build();

$parameter = Card::builder()
    ->timeStamp($timestamp) // Current timestamp (yyyyMMddHHmmss)
    ->iMid("TESTMPGS05") // Your NICEPay iMid
    ->tXid("TESTMPGS0501202510011026450166") // Transaction ID from registration
    ->referenceNo("ordNo20251001101069") // Unique order reference
    ->merchantToken(
        $timestamp,
        $iMid,
        $newCCTrx->getReferenceNo(),
        $newCCTrx->getAmt(),
        $this->merchantKey
    ) // Generate secure token
    ->cardNo(TestConst::$CARD_NO) // Test card number from constants
    ->cardExpYymm(TestConst::$CARD_EXP_YYMM) // Card expiry date (YYMM)
    ->cardCvv(TestConst::$CARD_CVV) // 3-digit CVV
    ->cardHolderNm("Nicepay test") // Cardholder name
    ->callBackUrl("https://dev.nicepay.co.id/IONPAY_CLIENT/paymentResult.jsp?") // Callback URL after payment
    ->recurringToken("")
    ->preauthToken("") // Leave empty for hold fund request 
    ->build();

$cardService = new V2CardService($config);
$response = $cardService->payment($parameter);

```

```kotlin
var config: NICEPay? = NICEPay.Builder()
    .isProduction(true) // Set to false for sandbox/testing
    .build()

val request: DirectV2RequestPaymentCard = DirectV2RequestPaymentCard.Builder()
    .timeStamp("20250922143200") // Current timestamp (yyyyMMddHHmmss)
    .tXid("TESTMPGS0501202510011026450166") // Transaction ID from registration
    .iMid("TESTMPGS05") // Your NICEPay iMid
    .merchantKey(MERCHANT_KEY) // Secret merchant key
    .referenceNo("ordNo20251001101069") // Unique order reference number
    .amt("10000") // Payment amount
    .callBakUrl("https://www.nicepay.co.id/IONPAY_CLIENT/paymentResult.jsp") // Callback URL after payment
    .cardNo("5123450000000008") // Test card number
    .cardCvv("123") // 3-digit CVV (sample)
    .cardExpYymm("3601") // Card expiry date (YYMM)
    .preauthToken("") // Left empty for hold fund
    .build()

val response = paymentService.registration(request, config)!!
```
:::

### Response Parameter

:::CodeblockTabs
Sample Response

```html
<head>
    <style>
        body {
            min-width: 100%;
            height: auto;
            min-height: 500px;
            overflow: none;
            border: none;

            .wrapper {
                position: absolute;
                top: 0;
                left: 0;
                background-color: transparent;
                display: flex;
                justify-content: center;
                align-items: center;
                height: 100%;
                width: 100%;
                z-index: 10
            }

            .loader {
                color: #6ac9ca;
                font-size: 10px;
                width: 1em;
                height: 1em;
                border-radius: 50%;
                position: relative;
                text-indent: -9999em;
                animation: 1.3s linear infinite mulShdSpin;
                transform: translateZ(0)
            }

            @keyframes mulShdSpin {

                0%,
                100% {
                    box-shadow: 0 -3em 0 .2em, 2em -2em 0 0, 3em 0 0 -1em, 2em 2em 0 -1em, 0 3em 0 -1em, -2em 2em 0 -1em, -3em 0 0 -1em, -2em -2em 0 0
                }

                12.5% {
                    box-shadow: 0 -3em 0 0, 2em -2em 0 .2em, 3em 0 0 0, 2em 2em 0 -1em, 0 3em 0 -1em, -2em 2em 0 -1em, -3em 0 0 -1em, -2em -2em 0 -1em
                }

                25% {
                    box-shadow: 0 -3em 0 -.5em, 2em -2em 0 0, 3em 0 0 .2em, 2em 2em 0 0, 0 3em 0 -1em, -2em 2em 0 -1em, -3em 0 0 -1em, -2em -2em 0 -1em
                }

                37.5% {
                    box-shadow: 0 -3em 0 -1em, 2em -2em 0 -1em, 3em 0 0 0, 2em 2em 0 .2em, 0 3em 0 0, -2em 2em 0 -1em, -3em 0 0 -1em, -2em -2em 0 -1em
                }

                50% {
                    box-shadow: 0 -3em 0 -1em, 2em -2em 0 -1em, 3em 0 0 -1em, 2em 2em 0 0, 0 3em 0 .2em, -2em 2em 0 0, -3em 0 0 -1em, -2em -2em 0 -1em
                }

                62.5% {
                    box-shadow: 0 -3em 0 -1em, 2em -2em 0 -1em, 3em 0 0 -1em, 2em 2em 0 -1em, 0 3em 0 0, -2em 2em 0 .2em, -3em 0 0 0, -2em -2em 0 -1em
                }

                75% {
                    box-shadow: 0 -3em 0 -1em, 2em -2em 0 -1em, 3em 0 0 -1em, 2em 2em 0 -1em, 0 3em 0 -1em, -2em 2em 0 0, -3em 0 0 .2em, -2em -2em 0 0
                }

                87.5% {
                    box-shadow: 0 -3em 0 0, 2em -2em 0 -1em, 3em 0 0 -1em, 2em 2em 0 -1em, 0 3em 0 -1em, -2em 2em 0 0, -3em 0 0 0, -2em -2em 0 .2em
                }
            }
    </style>
</head>

<body onload='javascript:getBrowserInfo();'>
    <div class='wrapper' id='loader'><span class='loader'></span></div>
    <div style='visibility:hidden'>
        <div id="initiate3dsSimpleRedirect" xmlns="http://www.w3.org/1999/html"> <iframe id="methodFrame"
                name="methodFrame" height="100" width="200"> </iframe>
            <form id="initiate3dsSimpleRedirectForm" method="POST"
                action="https://mtf.gateway.mastercard.com/acs/mastercard/v2/method" target="methodFrame"> <input type="hidden" name="threeDSMethodData" value="eyJ0aHJlZURTTWV0aG9kTm90aWZpY2F0aW9uVVJMIjoiaHR0cHM6Ly9tdGYuZ2F0ZXdheS5tYXN0ZXJjYXJkLmNvbS9jYWxsYmFja0ludGVyZmFjZS9nYXRld2F5L2Q2ZWRlMjU4N2VjNmVmY2Y4ODc4YWIxZjBhMWViMTc0YTkwZDA5N2E0YWJhZDVhOTQzNzM5ZmVmMTdjNzZhZDUiLCJ0aHJlZURTU2VydmVyVHJhbnNJRCI6IjZkYjBhY2I4LTdjMDYtNDc5Yy04MTNmLTQ4YTA4NWYzNjU0ZSJ9" />
            </form>
            <script id="initiate-authentication-script">
                var e=document.getElementById("initiate3dsSimpleRedirectForm"); if (e) { e.submit(); if (e.parentNode !== null) { e.parentNode.removeChild(e); } } 
            </script>
        </div>
    </div>
    <form name="mpgsAuthFrm" id="mpgsAuthFrm" method="post" action='https://dev.nicepay.co.id/nicepay/api/mpgsAuth.do'>
        <input type='hidden' name='tXid' value='TESTMPGS0501202510011026450166'>
        <input type='hidden' name='cardNo' value='5123450000000008'>
        <input type='hidden' name='cardExpYymm' value='3106'>
        <input type='hidden' name='cardCvv' value='100'>
        <input type='hidden' name='callbackUrl' value='https://dev.nicepay.co.id/IONPAY_CLIENT/paymentResult.jsp?order_id=TESTMPGS0501202510011026450166'>
        <input type='hidden' name='registered' value='true'>
        <input type='hidden' name='directV1' value='false'>
        <input type='hidden' name='authResult' value='false'>
        <input type='hidden' name='browser' value=''>
        <input type='hidden' name='browserJavaEnabled' value='false'>
        <input type='hidden' name='browserJavascriptEnabled' value='2'>
        <input type='hidden' name='browserLanguage' value=''>
        <input type='hidden' name='browserScreenColorDepth' value=''>
        <input type='hidden' name='browserScreenHeight' value='0'>
        <input type='hidden' name='browserScreenWidth' value='0'>
        <input type='hidden' name='browserTimeZone' value='0'>
    </form>
    <script>
        function getBrowserInfo() {
			document.mpgsAuthFrm.browser.value = navigator.userAgent;
			document.mpgsAuthFrm.browserJavaEnabled.value = window.navigator.javaEnabled() === true ? 'true' : 'false';
			document.mpgsAuthFrm.browserJavascriptEnabled.value = "1"; 
			document.mpgsAuthFrm.browserLanguage.value = navigator.language; 
			document.mpgsAuthFrm.browserScreenColorDepth.value = screen.colorDepth; 
			document.mpgsAuthFrm.browserScreenHeight.value = screen.height; 
			document.mpgsAuthFrm.browserScreenWidth.value = screen.width; 
			document.mpgsAuthFrm.browserTimeZone.value = new Date().getTimezoneOffset(); 
			document.mpgsAuthFrm.submit(); 
		}
    </script>
</body>
```
:::



# Capture - Payment API Credit Card

***



| **API URL**        | `/nicepay/direct/v2/payment`                                 |
| ------------------ | ------------------------------------------------------------ |
| **Request Method** | <font color="#3b9f0f">**POST**</font>****                    |
| **Description**    | Capture Process from Pre-Auth                                |
| **Merchant Token** | SHA256(`timeStamp`+`iMid`+`referenceNo`+`amt`+`merchantKey`) |
| **Request Format** | `application/json`                                           |



## Request Parameter for Capture - Payment API Credit Card

***

Setelah Anda mendapatkan `preauthToken` pada transaksi yang sudah dibayarkan oleh Pelanggan Anda dan diproses **API Pre-Auth Payment (Hold),**&#x20;

Langkah selanjutnya adalah melakukan proses *Capture&#x20;*&#x70;ada dana yang telah di-*hold*. Namun, untuk melakukan proses itu, Anda diperlukan untuk registrasi kembali dengan transaksi yang baru pada [Pre-Auth & Capture - Registration API Credit Card](docId\:VJ5k6iZOTkdPnRfMabAJ8) dengan *amount* yang Anda *capture* harus berjumlah *kurang atau sama* dari *amount* yang telah di-*hold* pada proses *Pre-Auth* sebelumnya.

Apabila Anda sudah sukses mendaftarkan transaksi kembali, Anda baru dapat menggunakan API Capture in&#x69;*.*

:::hint{type="info"}
Proses Capture dapat dilakukan berulang kali selama jumlah ****amount**** yang sudah melalui *Pre-Auth* masih ada untuk di-*capture* beserta dengan transaksi Pre-Auth masih belum kedaluwarsa atau **belum** dianggap ***void**.*
:::

Berikut ini adalah daftar parameter untuk melakukan integrasi proses pembayaran Kartu Kredit menggunakan **PreauthToken&#x20;**&#x74;anpa `cardNo`, `cardExpYymm` maupun `cardCvv`.

| **Parameter**                                                                             | **Tipe** | **Ukuran&#x20;** | **Deskripsi**                          | **Contoh / Catatan**                                             |
| ----------------------------------------------------------------------------------------- | -------- | ---------------- | -------------------------------------- | ---------------------------------------------------------------- |
| `timeStamp`<br /><font color="#2166ae">Required</font>                                    | N        | 14               | Request Timestamp (`YYYYMMDDHH24MISS`) | 20230516135959                                                   |
| `tXid`<br /><font color="#2166ae">Required</font>                                         | AN       | 30               | &#xD;Transaction ID	                   | IONPAYTEST01202305161007570327                                   |
| `referenceNo`<br /><font color="#2166ae">Required</font>                                  | ANS      | 40               | Merchant Order Number                  | MerchantReferenceNumber001                                       |
| `merchantToken`<br /><font color="#2166ae">Required</font>                                | AN       | 255              | Merchant Token                         | ff139e49606387091cd9baeadff3161aff6afd9406e1f481e0fdb8b46d1ae5ae |
| `cardHolderNm`<br /><font color="#2166ae">Required</font>                                 | AN       | 45               | Card Holder Name                       | John Doe<br /><br />**Only alphabet allowed**                    |
| `cardCvv`<br />                                                                           | N        | 6                | Card CVV                               | 100                                                              |
| `callBackUrl`<br /><font color="#2166ae">Required</font>                                  | ANS      | 255              | Payment Result URL                     | https\://www\.nicepay.co.id/IONPAY\_CLIENT/paymentResult.jsp     |
| `preauthToken`<br /><font color="#2166ae">Required For Capture Process in Pre-Auth</font> | AN       | 64               | Pre-Auth Token	                        | 5976c263fe6116503645057bb00be809c3a6f9c1e355efa12ef2cda2be03d5eb |

:::hint{type="info"}
`tXid` tidak akan sama dengan *request (pre-auth - hold).&#x20;*&#x50;roses *Capture* akan memastikan bahwa nilai `amount` yang di-*capture* tidak melebihi dana yang sudah Anda Pre-Auth.
:::



## Response Parameter for Capture - Payment API Credit Card

***



| **Parameter** | **Tipe** | **Ukuran** | **Deskripsi**                                               | **Contoh / Catatan**                                            |
| ------------- | -------- | ---------- | ----------------------------------------------------------- | --------------------------------------------------------------- |
| `timeStamp`   | N        | 14         | Response Date<br />(`YYYYMMDDHH24MISS`)                     | 20230516135959                                                  |
| `resultCd`    | N        | 4          | [Result Code](docId\:gvAdBBr0SQ92N1zHplSFM)                 | 0000                                                            |
| `resultMsg`   | AN       | 255        | Result Message: [Error Code](docId\:yEh1VA9k2y6sL1kQF2aWD)  | SUCCESS                                                         |
| `tXid`        | AN       | 30         | Transaction ID                                              | IONPAYTEST01202305161007570327                                  |
| `referenceNo` | ANS      | 40         | Merchant Order Number                                       | MerchantReferenceNumber001                                      |
| `payMethod`   | N        | 2          | [Payment Method Code](docId\:g7inRV70XcSA9lP7bpmok)         | 01<br /><br />When Success                                      |
| `amount`      | N        | 12         | Payment Amount                                              | 10000<br /><br />When Success                                   |
| `currency`    | AN       | 3          | Currency                                                    | IDR<br /><br />When Success                                     |
| `goodsNm`     | AN       | 100        | Goods Name                                                  | Merchant Goods 1<br /><br />When Success                        |
| `billingNm`   | AN       | 100        | Buyer Name                                                  | John Doe<br /><br />When Success                                |
| `transDt`     | N        | 8          | Transaction Date<br />(`YYYYMMDD`)                          | 20230522<br /><br />When Success                                |
| `transTm`     | N        | 6          | Transaction Time<br />(`HH24MISS`)                          | 224343<br /><br />When Success                                  |
| `description` | AN       | 100        | Description                                                 | This Is The Description Of The Payment <br /><br />When Success |
| `authNo`      | N        | 10         | Approval Number                                             | 123456<br /><br />When Success                                  |
| `issuBankCd`  | A        | 4          | [Issuing Bank Code](docId:1U7QOax_wrzXMoCG-Mqad)            | CENA<br /><br />When Success                                    |
| `acquBankCd`  | A        | 4          | [Acquiring Bank Code](docId:1U7QOax_wrzXMoCG-Mqad)          | BNIA<br /><br />When Success                                    |
| `cardNo`      | AN       | 20         | Card Number <br />(Masked)                                  | 51234500\*\*\*\*0008<br /><br />When Success<br />&#xD;         |
| `cardExpYymm` | N        | 4          | Card Expiry<br />(`YYMM`)                                   | 3901<br /><br />When Success                                    |
| `instmntMon`  | N        | 2          | Installment Month                                           | 1<br /><br />When Success                                       |
| `instmnType`  | N        | 2          | [Installment Type Code](docId:7CIX-U_4z295XgtNVEsbO)        | 1<br /><br />When Success                                       |
| `ccTransType` | AN       | 2          | [Credit Card Transaction Type](docId:8m3-7Smhm_jhdrE5pCRzp) | 3<br /><br />When Success                                       |
| `vat`         | N        | 12         | Value Added Tax<br />(VAT)                                  | 0<br /><br />When Success                                       |
| `fee`         | N        | 12         | Service Fee                                                 | 0<br /><br />When Success                                       |
| `notaxAmt`    | N        | 12         | Tax Free Amount                                             | 0<br /><br />When Success                                       |
| `acquBankNm`  | A        | 255        | Acquiring Bank Name                                         | CIMB                                                            |
| `issuBankNm`  | A        | 255        | Issuing Bank Name                                           | BCA                                                             |

:::hint{type="info"}
`tXid` tidak akan sama seperti *request hold&#x20;*&#x73;aat *capture*, dan `amt` tidak melebihi dana yang ditahan.
:::





## Sample Parameter for Capture - Payment API Credit Card

***

### Request Parameter

:::CodeblockTabs
cURL

```curl
curl --location 'https://dev.nicepay.co.id/nicepay/direct/v2/payment' \
--header 'X-FORWARDED-FOR: 1.2.3' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'timeStamp=20251001171036' \
--data-urlencode 'tXid=TESTMPGS0501202510011716431018' \
--data-urlencode 'referenceNo=ordNo20251001171009' \
--data-urlencode 'merchantToken=e9cc3a18732249cd1d51062c5377e5bddb31dae9a232f1c16249a17d376699ff' \
--data-urlencode 'cardHolderNm=Nicepay Test' \
--data-urlencode 'preauthToken=a513eff039c80a8c617fe57dbb401c52dbfd683b5d48fb3df61312f5a6665f35' \
--data-urlencode 'callBackUrl=https://dev.nicepay.co.id/IONPAY_CLIENT/paymentResult.jsp?order_id=TESTMPGS0501202510011716431018'
```

Node.js

```nodejs
let secondVersion = new SecondApiVersion(config);

let parameterPayment = {
  amt: "100",
  referenceNo: "ordNo20251001171009",
  tXid: "TESTMPGS0501202510011716431018",
  callBackUrl: "https://dev.nicepay.co.id/IONPAY_CLIENT/paymentResult.jsp?order_id=RECURRTEST01202509301555563979",
  cardHolderNm: "Nicepay Test",
  preauthToken: "a513eff039c80a8c617fe57dbb401c52dbfd683b5d48fb3df61312f5a6665f35",  // Preauth token
  cardHolderEmail: "test@email.com",
};

let response = secondVersion.requestPayment(parameterPayment);
```

```java
NICEPay config = NICEPay.builder()
        .isProduction(false) // Set to true for production
        .build();

Card requestData = Card.builder()
        .timeStamp("20250922143200")                           // Current timestamp (yyyyMMddHHmmss)
        .tXid("TESTMPGS0501202510011716431018")              // Transaction ID from registration
        .iMid("TESTMPGS05")                                   // Your NICEPay iMid
        .referenceNo("ordNo20251001171009")                  // Unique order reference
        .amt("100")                                          // Payment amount
        .merchantToken(timeStamp, iMid, reffNo, amount, MERCHANT_KEY) // Secure token generation
        .cardHolderNm("NICEPAY TEST")                         // Cardholder name
        .callBackUrl("https://dev.nicepay.co.id/IONPAY_CLIENT/paymentResult.jsp") // Callback URL
        .recurringToken("")                                   // Leave empty if not recurring token
        .preauthToken("a513eff039c80a8c617fe57dbb401c52dbfd683b5d48fb3df61312f5a6665f35") // Preauth TOken
        .build();

String responseHtml = V2CardService.callV2CardPaymentRequest(requestData, config);

```

```python
bodyPayment = (
    builderPayment.BuildPayment()
    .setTimestamp(datetime.now().strftime("%Y%m%d%H%M%S"))  # Current timestamp (yyyyMMddHHmmss)
    .setTxid("TESTMPGS0501202510011716431018")            # Transaction ID from registration
    .setReferenceNo("ordNo20251001171009")                 # Unique order reference
    .setCashtag("")                                         # Leave empty if not using cashtag
    .setRecurringToken("")                                  # Leave empty if not recurring
    .setPreAuthToken("a513eff039c80a8c617fe57dbb401c52dbfd683b5d48fb3df61312f5a6665f35")  # Preauth Token
    .setAmt("10000")                                         # Payment amount
    .build()
)

environment = (
    builderEnvironment.BuildEnvironment()
    .isCloud(False)   # Set to True if using NICEPay Cloud
    .isProduction(False)  # Set to True for production
    .build()
)

response = ServiceNicepay.servicePayment(
    DataGenerator.getPaymentBody(bodyPayment.dataPayment()),
    environment
)
```

Vanilla JS

```javascript
const paymentData = {
  cardHolderEmail: "customer@example.com", // Cardholder email
  cardHolderNm: "Nicepay Test",                // Cardholder name
  callBackUrl: "https://your-domain.com/callback", // Callback URL after payment
  tXid: "TESTMPGS0501202510011716431018", // Transaction ID from registration
  merchantToken: "bc2ee7790486a7ee4a5313d4c1d4088a38456b89204e308ae38e0beee3849d0b", // Secure token
  preauthToken: "a513eff039c80a8c617fe57dbb401c52dbfd683b5d48fb3df61312f5a6665f35", // Preauth token
};

const response = await Nicepay.paymentTransaction(paymentData);

```

Laravel

```php
$url = HttpUtil::getNicepayDomain($this->useProd, $this->useCloud) . $this->payment_endpoint;

// Request body parameters
$txid = "TESTMPGS0501202510011716431018";
$timestamp = Carbon::now()->format("YmdHis"); // Current timestamp (yyyyMMddHHmmss)
$reference_no = "ordNo20251001171009";
$amt = "100";

// Generate secure merchant token
$merchant_token = $this->generateMerchantToken(
    $timestamp,
    $this->imid,
    $reference_no,
    $amt,
    $this->mer_key
);

$param = [
    "timeStamp"       => $timestamp, // Current timestamp
    "tXid"            => $txid,      // Transaction ID from registration
    "merchantToken"   => $merchant_token, // Secure hash token
    "callBackUrl"     => "https://www.nicepay.co.id/IONPAY_CLIENT/paymentResult.jsp", // Callback URL
    "recurringToken" => "", //Leave empty if not recurring
    "preauthToken" => "a513eff039c80a8c617fe57dbb401c52dbfd683b5d48fb3df61312f5a6665f35", // Preauth Token
];

$response = HttpUtil::redirectWithQueryParams($url, $param);

```

PHP Native

```php
$config = NICEPay::builder()
    ->setIsProduction(true) // Set to false for sandbox/testing
    ->build();

$parameter = Card::builder()
    ->timeStamp($timestamp) // Current timestamp (yyyyMMddHHmmss)
    ->iMid("TESTMPGS05") // Your NICEPay iMid
    ->tXid("TESTMPGS0501202510011716431018") // Transaction ID from registration
    ->referenceNo("ordNo20251001171009") // Unique order reference
    ->merchantToken(
        $timestamp,
        $iMid,
        $newCCTrx->getReferenceNo(),
        $newCCTrx->getAmt(),
        $this->merchantKey
    ) // Generate secure token
    ->cardNo(TestConst::$CARD_NO) // Test card number from constants
    ->cardExpYymm(TestConst::$CARD_EXP_YYMM) // Card expiry date (YYMM)
    ->cardCvv(TestConst::$CARD_CVV) // 3-digit CVV
    ->cardHolderNm("Nicepay test") // Cardholder name
    ->callBackUrl("https://dev.nicepay.co.id/IONPAY_CLIENT/paymentResult.jsp?") // Callback URL after payment
    ->recurringToken("")
    ->preauthToken("a513eff039c80a8c617fe57dbb401c52dbfd683b5d48fb3df61312f5a6665f35") // Preauth token
    ->build();

$cardService = new V2CardService($config);
$response = $cardService->payment($parameter);

```

```kotlin
var config: NICEPay? = NICEPay.Builder()
    .isProduction(true) // Set to false for sandbox/testing
    .build()

val request: DirectV2RequestPaymentCard = DirectV2RequestPaymentCard.Builder()
    .timeStamp("20250922143200") // Current timestamp (yyyyMMddHHmmss)
    .tXid("TESTMPGS0501202510011716431018") // Transaction ID from registration
    .iMid("TESTMPGS05") // Your NICEPay iMid
    .merchantKey(MERCHANT_KEY) // Secret merchant key
    .referenceNo("ordNo20251001171009") // Unique order reference number
    .amt("10000") // Payment amount
    .callBakUrl("https://www.nicepay.co.id/IONPAY_CLIENT/paymentResult.jsp") // Callback URL after payment
    .preauthToken("a513eff039c80a8c617fe57dbb401c52dbfd683b5d48fb3df61312f5a6665f35") // Preauth token
    .build()

val response = paymentService.registration(request, config)!!
```
:::

### Response Parameter

:::CodeblockTabs
Sample Response

```html
<!-- <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 5.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> -->

<!DOCTYPE html>
<html>
<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />

<script type="text/javascript" src="/nicepay/js/bootstrap.js"></script>
<link rel="stylesheet" type="text/css" href="/nicepay/css/bootstrap.css" />
<link rel="stylesheet" type="text/css" href="/nicepay/css/bootstrap_backup.css" />
<link rel="stylesheet" type="text/css" href="/nicepay/css/bootstrap.min.css" />
<link rel="stylesheet" type="text/css" href="/nicepay/css/form.css" />
<link rel="stylesheet" type="text/css" href="/nicepay/css/bootstrap-responsive.css" />
<link rel="stylesheet" type="text/css" href="/nicepay/css/basic.css" />

<link rel="shortcut icon" href="https://www.nicepay.co.id/favicon.ico" type="image/x-icon" />
<link rel="icon" href="https://www.nicepay.co.id/favicon.ico" type="image/x-icon" />

<script type="text/javascript" src="/nicepay/js/jquery.js"></script>
<script type="text/javascript" src="/nicepay/js/jquery.min.js"></script>
<script type="text/javascript" src="/nicepay/js/common.js"></script>


</head>

<body >
	










<html>
<head>
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script type = "text/javascript">
	function setAcsInfo(){
		if ('01' != '05') {
			document.tranMgr.action = $("#callbackUrl").val();
		} else if ('01' == '05' && '' != null && '' == 'OVOE') {
			document.tranMgr.action = $("#callbackUrl").val();
		}
		
		if (document.tranMgr.cardBrand.value == null || document.tranMgr.cardBrand.value == "")
			document.tranMgr.cardBrand.setAttribute("disabled", true);
		
		document.tranMgr.submit();
	}

</script>
</head>
<style>
body {
    min-width: 100%;
    height:auto;
	min-height: 500px;
	overflow: none;
	border: none;
}
    .wrapper {
      position: absolute;
      top: 0;
      left: 0;
      background-color: transparent;
      display: flex;
      justify-content: center;
      align-items: center;
      height: 100%;
      width: 100%;
      z-index: 10;
    }
    .loader {
      color: #79CDBD;
      font-size: 10px;
      width: 1em;
      height: 1em;
      border-radius: 50%;
      position: relative;
      text-indent: -9999em;
      animation: mulShdSpin 1.3s infinite linear;
      transform: translateZ(0);
    }

    @keyframes mulShdSpin {
      0%,
      100% {
        box-shadow: 0 -3em 0 0.2em,
        2em -2em 0 0em, 3em 0 0 -1em,
        2em 2em 0 -1em, 0 3em 0 -1em,
        -2em 2em 0 -1em, -3em 0 0 -1em,
        -2em -2em 0 0;
      }
      12.5% {
        box-shadow: 0 -3em 0 0, 2em -2em 0 0.2em,
        3em 0 0 0, 2em 2em 0 -1em, 0 3em 0 -1em,
        -2em 2em 0 -1em, -3em 0 0 -1em,
        -2em -2em 0 -1em;
      }
      25% {
        box-shadow: 0 -3em 0 -0.5em,
        2em -2em 0 0, 3em 0 0 0.2em,
        2em 2em 0 0, 0 3em 0 -1em,
        -2em 2em 0 -1em, -3em 0 0 -1em,
        -2em -2em 0 -1em;
      }
      37.5% {
        box-shadow: 0 -3em 0 -1em, 2em -2em 0 -1em,
        3em 0em 0 0, 2em 2em 0 0.2em, 0 3em 0 0em,
        -2em 2em 0 -1em, -3em 0em 0 -1em, -2em -2em 0 -1em;
      }
      50% {
        box-shadow: 0 -3em 0 -1em, 2em -2em 0 -1em,
        3em 0 0 -1em, 2em 2em 0 0em, 0 3em 0 0.2em,
        -2em 2em 0 0, -3em 0em 0 -1em, -2em -2em 0 -1em;
      }
      62.5% {
        box-shadow: 0 -3em 0 -1em, 2em -2em 0 -1em,
        3em 0 0 -1em, 2em 2em 0 -1em, 0 3em 0 0,
        -2em 2em 0 0.2em, -3em 0 0 0, -2em -2em 0 -1em;
      }
      75% {
        box-shadow: 0em -3em 0 -1em, 2em -2em 0 -1em,
        3em 0em 0 -1em, 2em 2em 0 -1em, 0 3em 0 -1em,
        -2em 2em 0 0, -3em 0em 0 0.2em, -2em -2em 0 0;
      }
      87.5% {
        box-shadow: 0em -3em 0 0, 2em -2em 0 -1em,
        3em 0 0 -1em, 2em 2em 0 -1em, 0 3em 0 -1em,
        -2em 2em 0 0, -3em 0em 0 0, -2em -2em 0 0.2em;
      }
    }
</style>
<body onLoad="javascript:setAcsInfo();">
<div class="wrapper" id="loader">
	<span class="loader"></span>
</div>


	
	
		<form name="tranMgr" method="post" action="">
			<input type="hidden" id="callbackUrl"  value="https://dev.nicepay.co.id/IONPAY_CLIENT/paymentResult.jsp?order_id=TESTMPGS0501202510011716431018">
			<input type="hidden" name="resultCd"  value="0000">
			<input type="hidden" name="resultMsg" value="SUCCESS">
			<input type="hidden" name="tXid" value="TESTMPGS0501202510011716431018">
			<input type="hidden" name="referenceNo" value="ordNo20251001171009">
			<input type="hidden" name="payMethod" value="01">
			<input type="hidden" name="amt" value="100">
			<input type="hidden" name="transDt" value="20251001">
			<input type="hidden" name="transTm" value="171643">
			<input type="hidden" name="description" value="">
			<input type="hidden" name="authNo" value="259296">
			<input type="hidden" name="issuBankCd" value="BTPN">
			<input type="hidden" name="acquBankCd" value="BNIA">
			<input type="hidden" name="cardNo" value="51234500****0008">
			<input type="hidden" name="receiptCode" value="">
			<input type="hidden" name="mitraCd" value="">
			<input type="hidden" name="recurringToken" value="">
			<input type="hidden" name="preauthToken" value="">
			
			<input type="hidden" name="currency" value="IDR">
			<input type="hidden" name="goodsNm" value="Goods">
			<input type="hidden" name="billingNm" value="Nicepay test TESTMPGS05">
			<input type="hidden" name="ccTransType" value="4">
			<input type="hidden" name="mRefNo" value="">
			
			<input type="hidden" name="instmntType" value="1">
			<input type="hidden" name="instmntMon" value="1">
			
			<input type="hidden" name="cardExpYymm" value="3901">
			
			<input type="hidden" name="issuBankNm" value="BTPN">
			<input type="hidden" name="acquBankNm" value="CIMB">
			
			<input type="hidden" name="timeStamp" value="20251001171714">
			<input type="hidden" name="merchantToken" value="5a96b2ec2e748454714d78ccee174ed74b095fad2612eb9370e9a15e516cddec">
			<input type="hidden" name="cardBrand" value="">
			
			
			
		</form>
	

	
</body>
</html>
</body>

</html>
```
:::



# CallBack Handling for Pre-Auth & Capture - Payment API Credit Card

***

:::hint{type="success"}
Saat *Callback&#x20;*&#x74;elah diterima `callbackUrl` Anda, kami sangat menganjurkan Merchant untuk melakukan verifikasi Status menggunakan [Status Inquiry - API Credit Card](docId\:voJ9rhAQRLcF-_74cYrFi).
:::

:::hint{type="warning"}
`CallBack Handling` sangat penting untuk membantu meminimalisir tindakan *Fraud,&#x20;*&#x6B;ami sangat merekomendasikan Merchant untuk melakukan verifikasi menggunakan `CallBack Handling`.
:::

:::CodeblockTabs
URL CallBack

```json
"callbackUrl" : "https://www.merchant.com/callbackUrl/"
```

Response CallBack

```json
{
    "resultCd":"0000",
    "resultMsg":"SUCCESS",
    "tXid":"IONPAYTEST01202212141112221428",
    "referenceNo":"",
    "payMethod":"01",
    "amt":"10000",
    "transDt":"20221212",
    "transTm":"121212",
    "description":"Testing Credit Card Transaction",
    "authNo":"080623",
    "issuBankCd":"OTHR"
    "acquBankCd":"BMRI",
    "cardNo":"453211*****1111",
    "goodsNm":"Test Transaction Nicepay"
    "billingNm":"John Doe",
    "currency":"IDR",
    "timeStamp":"20221212121212",
    "merchantToken":"2035d2295d9578fffb40137186f0203474142ae3e57992d4847826c5fcaffce6",
    "cardExpYymm":"2712",
    "instmntMon":"1",
    "instmntType":"1",
    "ccTransType":"1"
}
```
:::

