Skip to main content

Payer Info Notification

When the system first obtains payer information, it pushes an additional independent notification to the merchant's payment_cl_name_notify_url, carrying the payer's name, bank account number, and bank code.

This notification is independent from the Deposit Transaction Result Notification:

  • Deposit transaction result notification → Triggered when the order enters a successful state; pushed to notify_url
  • Payer info notification → Triggered when payer information is first obtained; pushed to payment_cl_name_notify_url

A single order may receive both notifications (independent push, independent signature, independent response).

Use Cases​

This notification is designed for reconciliation and risk control scenarios:

  • Merchants need to obtain the payer's identity (name, bank account, bank) before or right after the order succeeds, for their own reconciliation system
  • Risk control systems need to compare payer information against member-bound accounts

How to Enable​

When creating a deposit order, include the optional payment_cl_name_notify_url parameter:

{
"platform_id": "PF0002",
"service_id": "SVC0015",
"payment_cl_id": "DEVPM00014581",
"amount": "50000000",
"notify_url": "https://merchant.example.com/webhook/deposit",
"payment_cl_name_notify_url": "https://merchant.example.com/webhook/payer-info",
"request_time": "1595504136",
"sign_type": "HMAC-SHA256",
"sign": "..."
}

If not provided, this notification is disabled.

Request Information​

  • Request URL: The payment_cl_name_notify_url provided by the merchant when creating the deposit order
  • Request Method: POST
  • Content-Type: application/json;charset=utf-8

Request Parameters​

ParameterRequiredTypeDescription
payment_idYesStringSystem order number
payment_cl_idYesStringMerchant order number
payment_cl_nameYesStringPayer name
payment_cl_numberNoStringPayer bank account number
payment_cl_bank_nameNoStringPayer bank code (refer to the Vietnam Bank List)
sign_typeNoStringSignature algorithm identifier (included only for HMAC-SHA256 orders; see "Signature Algorithm" below)
signYesStringOrder signature

Field Rules​

  • payment_cl_name: Raw payer name value; no formatting applied.
  • payment_cl_number: Complete payer bank account number. If unavailable, this parameter is omitted from the body.
  • payment_cl_bank_name: Payer bank code. Values follow the bank_name codes in the Vietnam Bank List (e.g., VCB, MB, TCB). If the bank cannot be determined, this parameter is omitted from the body.

Signature Algorithm​

MD5 will be fully deprecated

MD5 signing will be fully deprecated in the future. Merchants integrating with this API are advised to switch to HMAC-SHA256.

The signature method is consistent with the Deposit Transaction Result Notification, determined per order by the sign_type specified at order creation
  • Order created with sign_type omitted / set to "MD5" → This notification uses MD5 signing; the body does NOT contain the sign_type field
  • Order created with sign_type = "HMAC-SHA256" → This notification uses HMAC-SHA256 signing; the body carries the sign_type: "HMAC-SHA256" field

Merchants should dispatch signature verification by whether the sign_type field is present:

  • sign_type field absent → Verify with MD5
  • sign_type = "HMAC-SHA256" → Verify with HMAC-SHA256

MD5 signature rules (MD5 orders):

  1. Take all non-empty fields from the body, excluding sign and sign_type
  2. Sort parameter names by ASCII code in ascending order
  3. Join as key=value pairs separated by & (no URL encoding)
  4. Append &{platform_service_sign_key} at the end
  5. Apply MD5 hash to the complete string
  6. Convert to a 32-character lowercase hexadecimal string

HMAC-SHA256 signature rules (HMAC-SHA256 orders):

Aligned with the Signature Specification — the body additionally contains sign_type: "HMAC-SHA256", and the signature is produced with HMAC-SHA256(param_str, platform_service_sign_key) as a 64-character lowercase hexadecimal string.

Request Examples​

MD5 order (body does NOT contain sign_type)​

{
"payment_id": "PM00000102",
"payment_cl_id": "97a968b4a9db497c8c03198e395a38c6",
"payment_cl_name": "TRAN TRUNG HIEU",
"payment_cl_number": "10066777777",
"payment_cl_bank_name": "MB",
"sign": "d2e4534fce8c1d1053bbf59fd8ae4464"
}

Name only (bank information unavailable):

{
"payment_id": "PM00000103",
"payment_cl_id": "a1c2d3e4f5g6h7i8",
"payment_cl_name": "NGUYEN VAN A",
"sign": "8a7b6c5d4e3f2g1h"
}

HMAC-SHA256 order (body carries sign_type)​

{
"payment_id": "PM00000102",
"payment_cl_id": "97a968b4a9db497c8c03198e395a38c6",
"payment_cl_name": "TRAN TRUNG HIEU",
"payment_cl_number": "10066777777",
"payment_cl_bank_name": "MB",
"sign_type": "HMAC-SHA256",
"sign": "e8a5c3f2d1b4a6e9c7f0d2b5a8e1c4f7d0b3a6e9c2f5d8b1a4e7c0f3d6b9a2e5"
}

Merchant Response​

{ "error_code": "0000" }
ParameterTypeDescription
error_codeStringReturning "0000" indicates the merchant has processed the notification

Notes​

  • This endpoint is implemented by the merchant; our system calls it when the payer information is first obtained.
  • Fully independent from notify_url: The trigger timing, push body, and signature of the two notifications are entirely separate. Merchants must implement handlers for each endpoint separately.
  • This notification is sent only once (no retry). Merchants must ensure the endpoint is reliable. If the endpoint responds with a non-2xx status, the information will not be resent.
  • All non-empty fields (except sign_type and sign) must participate in signing. Please iterate over all parameters in the request body to dynamically build the signature string; do NOT hardcode field names.
  • Use non-empty fields to compute the signature, and read returned fields dynamically — additional fields may be added in the future (e.g., payment time, bank branch).