Skip to content

Tokenization - Drop In Payment Integration

This document describes the integration process of Tokenization Drop In integration model.

With the pre-built front-end UI components, PayerMax can dynamically display payment information input forms according to the different payment methods selected by users. At the same time, merchants can also customize the language, style and other features of the components.

For more information about the Drop In component model, please refer to Overview of Integration Modes.

1. Integration Preparation

2. Interaction Process

3. Interface List

Associative Interaction TimingCalling directionInterface TypeInterface PATH
1.3 Getting Drop in Initialization InformationMerchant -> PayerMaxBack-end Interface/applyDropinSession
1.6 Create and mount PayerMax componentsMerchant Client -> PayerMax Drop In JS SDKFront-end InterfacePMdropin.create
1.6 Create and mount PayerMax componentsMerchant Client -> PayerMax Drop In JS SDKFront-end InterfacePMdropin.mount
1.6 Create and mount PayerMax componentsMerchant Client -> PayerMax Drop In JS SDKFront-end InterfacePMdropin.on
2.2 Get paymentTokenMerchant Client -> PayerMax Drop In JS SDKFront-end InterfacePMdropin.emit
3.4 Creating a payment, calling the Drop In ordering interfaceMerchant -> PayerMaxBack-end Interface/orderAndPay
4.1 Asynchronous notification of payment resultsPayerMax -> 商户Back-end Interface/collectResultNotifyUrl
5.1 Check Payment TransactionsMerchant -> PayerMaxBack-end Interface/orderQuery

4. Environmental Information

  • Test environment request address:https:// pay-gate-uat.payermax.com/aggregate-pay/api/gateway/ <Interface PATH>

  • Integrated Environment:https:// pay-gate.payermax.com/aggregate-pay/api/gateway/ <Interface PATH>

5. Integration Steps

5.1 Getting Drop in Initialization Information

The merchant server through the /applyDropinSession API interface, initiates an HTTP POST request to obtain the client token clientKey and the session token sessionKey required for the initialization of the drop in.

/applyDropinSession API Example of an interface request:

js
curl --request POST \ 
    --url https://pay-gate-uat.payermax.com/aggregate-pay/api/gateway/applyDropinSession \ 
    --header 'Accept: application/json' \ 
    --header 'Content-Type: application/json' \ 
    --header 'sign: FPFVT3o227JrFRbqu19boZCpVVTF9KznxyRawUmxpfXilHV/0yK46haPhAjNu1hPUMy7Vw/ILXhfzffNm4Fj0a pWknlTY9OJxnSoQxS9BTFtc61tn5yV1q69x/kkBl82/qwg+XTJ4fOzy7Mar3VaC1E2PlDA6RkkKBUyNE6RYgsd B+Su7an4+4HVTNAnoe74WyvBgxTLMNg28igBTdqxaO3w/UBY6ObVp7vkqkQGdL1Y+HgmMYaAVwrM3+ALWGId0s J+YqTY4WJ+0xCRGhaSnybiIjZsQEYyID68WNUfuavDLDsEhaMm/HfQvf5p0R1Ltovp3wwJnEbQcjY458iX5A==' \
    --data '{
        "version": "1.4",
        "keyVersion": "1",
        "requestTime": "2025-05-14T16:30:27.174+08:00",
        "appId": "test516e8ab74578be8eecd8c4803fbe",
        "merchantNo": "TEST010117960578",
        "data": {
            "country": "MY", # Acquiring country
            "currency": "MYR", # Order currency
            "totalAmount":"50", # Order amount
            "tokenForFutureUse": true, # If true is passed, it means that the token payment request is requested, and the Token protocol will be displayed on the component
            "userId": "20220622_00086", # User ID, must be unique
            "componentList":["CARD"] # Specify the payment method available for this order
        }
}'

The actual payment methods available for this order can be specified via the request parameter componentList, the value of which must be a payment method that has been contracted by the merchant. Merchants can check their contracted payment methods via Merchant Platform(MMC) or consult PayerMax technical support.

/applyDropinSession API Example of an interface response:

json
{
  "msg": "success",
  "code": "APPLY_SUCCESS", 
  "data": {
    "sessionKey": "bf2c47b085e24c299e45dd56fd751a70",
    "clientKey": "bbd8d2639a7c4dfd8df7d005294390df" 
    }
}

5.2 Render the Drop in

  1. Introduce the CDN package on the relevant HTML page.
html
<script src="https://cdn.payermax.com/dropin/js/pmdropin.min.js"></script>
  1. Embed an iframes on the merchant page by going over the div tag.
html
<div class="frame-card">  
    <!-- 表单内容 -->
</div>
  1. Initialize PayerMax Frames。
js
// Initialize the card component, please refer to https://docs.payermax.com/doc-center/receipt/front-end-component/configuration-card.html
const card = PMdropin.create('card', {
    clientKey: "client public key", // data.clientKey obtained in step 1.1
    sessionKey: "session token", // data.sessionKey obtained in step 1.1
    sandbox: false, // default is false, that is, production environment
    hideSaveCard: false, //Whether to hide the save card information option, the default is false display
    hideCardBrands: false, //Whether to hide the upper left corner card brand logo, the default is false display
    hideRecommendAccount: true //Whether to hide the recommendation card on the component, the default is false display
});
// Mounting example
card.mount('.frame-card'); // Mount to the first matched dom element
// Component loading completion time
card.on('ready', () => {
// Remove custom loading
})
  1. Listen to form filling status and set payment button dynamically (optional). By listening to the events of the form, you can monitor the legitimacy of the information filled in by the user in real time, so as to dynamically set whether the Payment button can be clicked or not.
js
card.on('form-check', (res) => {
  // res.isFormValid is the form status. The value is false/true
  // true means the form passes the validation and can be paid, false means the validation doesn't pass and can't be paid, and the pay button can't be clicked.
  console.log('[dropin][form-check]:', res)
})
  1. Check the token payment agreement.

If the Token payment protocol is not checked, the normal payment process will be followed. After the payment is completed, the merchant's PaymentTokenID will not be returned. Only when the user checks the Token protocol and the payment is completed, the merchant's PaymentTokenID will be returned.

Download the complete Drop In Integration DEMO, replace sessionKey and clientKey, then you can run it locally and view the frontend component integration sample.

5.3 Create Payment

  1. Merchant client: the user clicks to initiate a payment, checks if the payment is available, and gets the paymentToken.
js
card.emit('setDisabled', true) // Freeze the form after clicking the payment button to prevent repeated payment submission
card.emit('canMakePayment')
card.emit('canMakePayment')
  .then(res => {
    if (res.code === 'APPLY_SUCCESS') {
      const paymentToken = res.data.paymentToken // Payment token, payment interface usage
     // Initiate payment interface
     // The merchant requests the backend interface to place an order,
     // The merchant constructs the request parameters with params, and needs to bring paymentToken.
     // res.data.agreementAccepted = true, indicating that the user has checked the token agreement,
     // res.data.agreementAccepted = false, indicating that the user has not checked the token agreement,
     // Only when res.data.agreementAccepted = true, the merchant can send data.paymentDetail.tokenForFutureUse = true when calling the orderAndPay interface, otherwise the order will fail
        _postapi('orderAndPay',params).then(res =>{
          const code = (res || {}).code
          //The merchant returns the payment result to the front end
          if (code == 'APPLY_SUCCESS') {     
            //Payment is successful, display the payment result
          } else {
            //Payment failed, display payment result
          }
    }
      card.emit('setDisabled', false) // Unfreeze the form after the payment interface is completed
    }
  })
  .catch(err => {
    card.emit('setDisabled', false) // Unfreeze the form after an exception occurs
  })

canMakePayment returns the following result:

json
{
    "code": "APPLY_SUCCESS",
    "message": "",
    "data": {
        "paymentToken": "xxxxxxx",
        "cardBinNo": "123456",
        "maskCardNumber": "123456****1234",
        "cardHolderFullName": "zhangsan",
        "cardOrg": "VISA",
        "cardType": "CREDIT",
        "cardIssuingCountry": "SA",
        "cardExpirationMonth": "12",
        "cardExpirationYear": "33",
        "agreementAccepted": true // true indicates that the merchant agrees to the token agreement
}
}
  1. Merchant server: calls the /orderAndPay API interface to initiate the HTTP POST request and create the payment.

Note:

After the payment is created, the merchant can specify the payment shutdown time in seconds for a single payment via the interface entry expireTime, the value of which must be greater than 1800 (30 minutes) and less than 86400 (24 hours). If the value passed in is less than 1800, the system will reset to the minimum value of 30min; if the value passed in is less than 86400, the system will reset to the maximum value of 86400. If the merchant doesn't specify it, the specific shutdown time will be different according to the payment method used.

/orderAndPay API Example of an interface request:

js
curl --request POST \
  --url 'https://pay-gate-uat.payermax.com/aggregate-pay/api/gateway/orderAndPay' \
  --header 'Accept: application/json' \
  --header 'Content-Type: application/json' \
  --header 'sign: FPFVT3o227JrFRbqu19boZCpVVTF9KznxyRawUmxpfXilHV/0yK46haPhAjNu1hPUMy7Vw/ILXhfzffNm4Fj0apWknlTY9OJxnSoQxS9BTFtc61tn5yV1q69x/kkBl82/qwg+XTJ4fOzy7Mar3VaC1E2PlDA6RkkKBUyNE6RYgsdB+Su7an4+4HVTNAnoe74WyvBgxTLMNg28igBTdqxaO3w/UBY6ObVp7vkqkQGdL1Y+HgmMYaAVwrM3+ALWGId0sJ+YqTY4WJ+0xCRGhaSnybiIjZsQEYyID68WNUfuavDLDsEhaMm/HfQvf5p0R1Ltovp3wwJnEbQcjY458iX5A==' \
  --data '{
    "requestTime": "2025-05-28T03:52:42.591-02:00",
    "keyVersion": "1",
    "appId": "tested7c863c439a9e29b4519867965a",
    "version": "1.4",
    "merchantNo": "TEST10116880289",
    "data": {
        "integrate": "Direct_Payment", # In front-end component mode, specify Direct_Payment
        "totalAmount": 39.99,
        "country": "SA",
        "expireTime": "3600",
        "paymentDetail": {
            # When paying, obtain the value through the canMakePayment event response of the emit interface of the JS SDK, which is not empty.
            "paymentToken": "TEST12637c2c2d942239d9a2661c4ad14f9", 
            "buyerInfo": {
                "clientIp": "176.16.34.144",
                "userAgent": "Chrome"
            },
            # When paying, obtain the response from the create interface of the JS SDK, non-empty
            "sessionKey": "test29632c3643768e3b65ef6a31c9ce", # Non-empty in front component mode
            "tokenForFutureUse": true 
            // TokenForFutureUse must pass true if two conditions are met:
            // 1. Apply Paymentession requires tokenForFutureUse=true
            // 2. The user must have selected the token protocol on the component
            // If the above two conditions are not met, but the interface passes tokenForFutureUse=true, the order will fail verification
        },
        "frontCallbackUrl": "https://front.your.com/pay/index.html",
        "subject": "River Game HK Limited",
        "outTradeNo": "ov1_da78b1f3c2f9443b966347fc89305fc9",
        "notifyUrl": "https://notify.your.com/pay/paymentWebHookPayerMaxServlet",
        "currency": "SAR",
        "userId": "1822613953000446",
        "terminalType": "WEB"
    }
}'

/orderAndPay API Example of an interface response:

json
{
    "msg": "Success.",
    "code": "APPLY_SUCCESS",
    "data": {
        "outTradeNo": "test_da78b1f3c2f9443b966347fc89305fc9",
        "tradeToken": "T2024052805951921811176",
        "status": "SUCCESS"
    }
}

5.4 Get Payment Results

For orders paid with tokens, after payment is completed, the paymentTokenID will be returned in the result notification. After the merchant obtains the paymentTokenID, it needs to be saved and the paymentTokenID belongs to which user and which payment method; this will facilitate the use of paymentTokenID to replace payment elements (card number and other information) to complete the payment in subsequent payments.

5.4.1 Adoption of notification of payment results

See Get Payment Result Integration - Adoption of Payment Result Notification.

Token payment notification example:

js
curl --request POST \
  --url https://pay-gate-uat.payermax.com/collectResultNotifyUrl \
  --header 'Accept: application/json' \
  --header 'Content-Type: application/json' \
  --header 'sign: FPFVT3o227JrFRbqu19boZCpVVTF9KznxyRawUmxpfXilHV/0yK46haPhAjNu1hPUMy7Vw/ILXhfzffNm4Fj0apWknlTY9OJxnSoQxS9BTFtc61tn5yV1q69x/kkBl82/qwg+XTJ4fOzy7Mar3VaC1E2PlDA6RkkKBUyNE6RYgsdB+Su7an4+4HVTNAnoe74WyvBgxTLMNg28igBTdqxaO3w/UBY6ObVp7vkqkQGdL1Y+HgmMYaAVwrM3+ALWGId0sJ+YqTY4WJ+0xCRGhaSnybiIjZsQEYyID68WNUfuavDLDsEhaMm/HfQvf5p0R1Ltovp3wwJnEbQcjY458iX5A==' \
  --data '{
    "appId": "ff4f0273d212386sdxxxxxxxxx",
    "code": "APPLY_SUCCESS",
    "data": {
        "country": "UN",
        "totalAmount": 9.99,
        "channelNo": "PPC8xxxx017516227301xxxx",
        "outTradeNo": "ORDxxxx51006xx",
        "completeTime": "2025-07-04T09:52:11.249Z",
        "currency": "USD",
        "tradeToken": "T20xxx704098xxxx349xx",
        "paymentDetails": [
            {
                "cardInfo": {
                    "cardOrg": "VISA",
                    "country": "NZ",
                    "cardIdentifierNo": "123456******1234",
                    "cardIdentifierName": "Z**************"
                },
                "paymentTokenID": "PMTOKEN20230424072005899168200035002", //This field is returned only when Token is paid
                "paymentMethodType": "CARD"
            }
        ],
        "thirdChannelNo": "151764",
        "status": "SUCCESS"
    },
    "keyVersion": "1",
    "merchantNo": "P01010118640464",
    "msg": "Success.",
    "notifyTime": "2025-07-04T09:52:11.280Z",
    "notifyType": "PAYMENT"
}'

Merchant response parameter example:

json
{
  "msg": "Success",
  "code": "SUCCESS"
}

5.4.2 Inquiry via Payment Orders

See Get Payment Result Integration - Inquiry via payment order.

Query input parameters:

js
curl --request POST \
  --url https://pay-gate-uat.payermax.com/aggregate-pay/api/gateway/orderQuery \
  --header 'Accept: application/json' \
  --header 'Content-Type: application/json' \
  --header 'sign: FPFVT3o227JrFRbqu19boZCpVVTF9KznxyRawUmxpfXilHV/0yK46haPhAjNu1hPUMy7Vw/ILXhfzffNm4Fj0apWknlTY9OJxnSoQxS9BTFtc61tn5yV1q69x/kkBl82/qwg+XTJ4fOzy7Mar3VaC1E2PlDA6RkkKBUyNE6RYgsdB+Su7an4+4HVTNAnoe74WyvBgxTLMNg28igBTdqxaO3w/UBY6ObVp7vkqkQGdL1Y+HgmMYaAVwrM3+ALWGId0sJ+YqTY4WJ+0xCRGhaSnybiIjZsQEYyID68WNUfuavDLDsEhaMm/HfQvf5p0R1Ltovp3wwJnEbQcjY458iX5A==' \
  --data '{
  "version": "1.4",
  "keyVersion": "1",
  "requestTime": "2022-01-17T07:51:15.597+00:00",
  "appId": "a0dddd1f622243cb9aa11234e808b5f8",
  "merchantNo": "02021382716699",
  "data": {
    "outTradeNo": "P164241068068119384" # Merchant order number
  }
}'

Response result:

json
{
  "msg": "Success.",
  "code": "APPLY_SUCCESS",
  "data": {
    "reference": "reference查询和回调返回",
    "country": "SA",
    "totalAmount": 10,
    "outTradeNo": "P164241068068119384",
    "currency": "SAR",
    "channelNo": "DMCP000000000177005",
    "thirdChannelNo": "4ikqJ6ktEqyRawE1dvqb9c",
    "paymentCode": "2312121212",
    "tradeToken": "T2024062702289232000001",
    "completeTime": "2023-10-20T03:28:23.092Z",
    "paymentDetails": [
      {
        "cardInfo": {
          "cardOrg": "VISA",
          "country": "SA",
          "cardIdentifierNo": "400555******0001",
          "cardIdentifierName": "**ngwei"
        },
        "paymentMethodType": "CARD",
        "paymentTokenID": "PMTOKEN20230424072005899168200035002", //This field is returned only when Token is paid
        "payAmount": 10,
        "exchangeRate": "1",
        "paymentMethod": "CARD",
        "payCurrency": "SAR"
      }
    ],
    "status": "SUCCESS",
    "resultMsg": ""
  }
}

5.5 Payment Using PaymentTokenID

Follow the above 4 steps, after the user completes the payment, PayerMax will return the PaymentTokenID to the merchant. The merchant needs to save the PaymentTokenID and record which user and payment method the paymentTokenID belongs to; When making subsequent payments, the merchant uses /orderAndPay API to pass the payment method, user ID and PaymentTokenID to PayerMax to complete the deduction, and no longer needs to send sensitive card information such as cardInfo.

5.5.1 Create Payment

Merchants integrate /orderAndPay API through API mode to complete order payment.

/orderAndPay API Interface request example:

js
curl --request POST \
  --url 'https://pay-gate-uat.payermax.com/aggregate-pay/api/gateway/orderAndPay' \
  --header 'Accept: application/json' \
  --header 'Content-Type: application/json' \
  --header 'sign: FPFVT3o227JrFRbqu19boZCpVVTF9KznxyRawUmxpfXilHV/0yK46haPhAjNu1hPUMy7Vw/ILXhfzffNm4Fj0apWknlTY9OJxnSoQxS9BTFtc61tn5yV1q69x/kkBl82/qwg+XTJ4fOzy7Mar3VaC1E2PlDA6RkkKBUyNE6RYgsdB+Su7an4+4HVTNAnoe74WyvBgxTLMNg28igBTdqxaO3w/UBY6ObVp7vkqkQGdL1Y+HgmMYaAVwrM3+ALWGId0sJ+YqTY4WJ+0xCRGhaSnybiIjZsQEYyID68WNUfuavDLDsEhaMm/HfQvf5p0R1Ltovp3wwJnEbQcjY458iX5A==' \
  --data '{
    "requestTime": "2025-05-28T03:52:42.591-02:00",
    "keyVersion": "1",
    "appId": "tested7c863c439a9e29b4519867965a",
    "version": "1.4",
    "merchantNo": "TEST10116880289",
    "data": {
        "integrate": "Direct_Payment", # In API mode, specify Direct_Payment
        "totalAmount": 39.99,
        "country": "SA",
        "expireTime": "3600",
        "paymentDetail": {
            "buyerInfo": {
                "clientIp": "176.16.34.144",
                "userAgent": "Chrome"
            },
            "paymentMethodType": "CARD",
            "paymentTokenID": "PMTOKEN20230424072005899168200035002" 
        },
        "frontCallbackUrl": "https://front.your.com/pay/index.html",
        "subject": "River Game HK Limited",
        "outTradeNo": "ov1_da78b1f3c2f9443b966347fc89305fc9",
        "notifyUrl": "https://notify.your.com/pay/paymentWebHookPayerMaxServlet",
        "currency": "SAR",
        "userId": "1822613953000446",
        "terminalType": "WEB"
    }
}'

Response result when No 3ds verification required:

json
{
    "msg": "Success.",
    "code": "APPLY_SUCCESS",
    "data": {
        "outTradeNo": "test_da78b1f3c2f9443b966347fc89305fc9",
        "tradeToken": "T2024052805951921811176",
        "status": "SUCCESS"
    }
}

Response result when 3ds verification required:

json
{
    "msg": "Success.",
    "code": "APPLY_SUCCESS",
    "data": {
        // If the payment is subject to 3ds verification, the 3ds verification address will be returned and the user needs to complete the verification
        "redirectUrl": "https://cashier-n.payermax.com/index.html#/cashier/home?merchantId=020213827212251&merchantAppId=3b242b56a8b64274bcc37dac281120e3&country=ID&tradeToken=TOKEN20220117091121294138752&language=en&token=IHjqkZ8%2F%2FFcnfDPxWTvJFOrulUAKfXFUkxHJSiTdlnjnX1G6AOuTiSl6%2BN05EzxTaJkcSsSyGh5a1q%2FACwWN0sDD%2FgwY5YdWu3ghDcH2wqm%2BJIcEh0qZqo%2BQFnXp65bvkLZnY7VO7HwZGzyrpMBlPhfRCQxwBbc6lJcSYuPf%2Fe8%3D&amount=10000¤cy=IDR&frontCallbackUrl=https%3A%2F%2Fwww.payermax.com",
        "outTradeNo": "test_da78b1f3c2f9443b966347fc89305fc9",
        "tradeToken": "T2024052805951921811176",
        "status": "PENDING"
    }
}

5.5.2 Get Payment Results

To obtain the payment result, please refer to Adoption of notification of payment results and Inquiry via Payment Orders in step 4.

6. PaymentTokenID Management

Merchants can query all PaymentTokenIDs bound to a user through the PaymentTokenID Query API interface. When a user wants to remove the bound PaymentTokenID, the merchant can remove the PaymentTokenID through the PaymentTokenID Unbinding API.

6.1 Query PaymentTokenID

Merchants can query all PaymentTokenIDs bound to a user based on the payment method, or specify a PaymentTokenID to query. The query result will return the corresponding masked card number and the status of the corresponding PaymentTokenID.

PaymentTokenID query API Interface request example:

json
{
    "version": "1.5",
    "keyVersion": "1",
    "requestTime": "{{requestTime}}",
    "appId": "6666c8b036a24579974497c2f9a33333",
    "merchantNo": "010213834784554",
    "data": {
        "userId": "songjiuhuaTest", // Required
        "tokenScope": "tokenAcq", // Required, fixed value tokenAcq
        "paymentMethodType": "CARD", // Optional
        "targetOrg": null, // Optional This field is optional when the value of paymentMethodType is not CARD.
        "cardOrg": "MASTERCARD", // Optional. This field is optional when the value of paymentMethodType is CARD.
        "paymentTokenID": "PMTOKEN20250626075108220812006000001" // Optional. If not filled, all paymentTokenIDs bound to the user will be returned.
    }
}

PaymentTokenID query API interface response example:

json
{
    "msg": "",
    "code": "APPLY_SUCCESS",
    "data": {
        "tokenList": [
            {
                "tokenScope": "tokenMit",
                "cardInfo": "538774******9957",
                "merchantInitiated": true,
                "paymentTokenStatus": "Activated",
                "userId": "songjiuhuaTest",
                "paymentTokenExpiry": "2099-12-31T23:59:59.000Z",
                "targetOrg": "",
                "ifCVV": "N",
                "paymentTokenID": "PMTOKEN20250523093224475590582000114",
                "accountDisplay": "",
                "paymentMethodType": "CARD",
                "brand": "MASTERCARD"
            },
            {
                "tokenScope": "tokenMit",
                "cardInfo": "538774******1234",
                "merchantInitiated": true,
                "paymentTokenStatus": "Activated",
                "userId": "songjiuhuaTest",
                "paymentTokenExpiry": "2099-12-31T23:59:59.000Z",
                "targetOrg": "",
                "ifCVV": "N",
                "paymentTokenID": "PMTOKEN20250523092615726590582000110",
                "accountDisplay": "",
                "paymentMethodType": "CARD",
                "brand": "MASTERCARD"
            }
        ]
    }
}

6.2 Unbinding PaymentTokenID

When the user wants to remove the bound PaymentTokenID, the merchant can remove the PaymentTokenID through this interface. After removing the PaymentTokenID, the merchant will no longer be able to use the PaymentTokenID to initiate payment.

PaymentTokenID unbinding API Interface request example:

json
{
  "version": "1.2",
  "keyVersion": "1",
  "requestTime": "2022-01-22T10:00:00.500+08:00",
  "appId": "46153e2b787241ae8b01857bb087d1bd",
  "merchantNo": "010229810189301",
  "data": {
    "userId": "songjiuhuaTest",
    "paymentTokenID": "PMTOKEN20250523093224475590582000114",
    "removeReason": "user want to remove it"
  }
}

PaymentTokenID unbinding API Interface response example:

json
{
  "code": "APPLY_SUCCESS",
  "msg": "Success",
  "data": {
    "paymentTokenID": "PMTOKEN20250523093224475590582000114",
    "userId": "songjiuhuaTest",
    "paymentTokenStatus": "Deleted"
  }
}

7. Test Go Live

After the merchant has completed the above integration steps, he/she can initiate the actual payment request for preliminary testing and validation, please refer to Integration Testing - Start a test for the specific steps.

After the test is passed and before the final release, the merchant must contact PayerMax technical support to submit the order information for the test so that PayerMax can check the request logs and data to confirm that you have correctly integrated the relevant capabilities, as described in Integration Testing - Initiate Acceptance.

After passing the acceptance test, the merchant can configure integration information for production environments and prepare for the opening of the volume.

In addition, under Acquiring Product Integration, there are integration documents for the various payment methods supported by PayerMax, which contain instructions for testing each payment method.

8. Troubleshooting

For response errors during testing or acceptance, you can refer to Troubleshooting - Error Code. Meanwhile, in FAQs, we summarize and list all kinds of common problems and how to deal with them.

You can also contact PayerMax technical support team directly for any questions during integration, testing and acceptance.

Was this page helpful?

Thank you for your help in improving PayerMax Product Docs!

Last updated:

Released under the MIT License.