OnlinePay API
V2
V1
V2
V1
  1. Notify
  • Introduction
    • Introduction
    • How to Start
    • Country Code
    • Country Info
    • Currency Code
    • Error Code
    • Transfer Order Info Type
    • Transfer Order File Type
    • Per Bank
    • Spei Bank
    • Vietnam Bank
    • V2 Signature Specification
  • Payin
    • SEPA
      • SEPA Master Account API
      • SEPA Virtual Account API
      • SEPA Upload Kyc Files API
      • SEPA Submit EDD Files API
    • Credit Card API
      POST
    • Alipay API
      POST
    • GCash API
      POST
    • WeChat API
      POST
    • PIX API
      POST
    • Crypto API
      POST
    • Union Pay API
      POST
    • SPEI API
      POST
    • Per Transfer API
      POST
    • Cash App API
      POST
    • Google Pay API
      POST
    • Apple Pay API
      POST
    • MONO API
      POST
    • Vietnam Bank API
      POST
    • CheckOut API
      POST
    • CheckOut Payment API
      POST
    • OnRamps API
      GET
  • Payout
    • PER Transfer Payout API
    • Checkout Payout API
    • Card Payout API
    • Bank Account Payout API
    • PIX Payout API
    • PER Transfer Payout API
    • SPEI Payout API
    • CashApp Payout API
    • Checkout Payout API
    • Query Payout Order API
    • Supplement Payee Info API
  • Recharge
    • SEPA
      • Account
      • Virtual Account
  • Refund
    • Refund API
  • Card
    • Create Cardholder API
    • Create Card API
    • Active Card API
    • Freeze Card API
    • UnFreeze Card API
    • Cancel Card API
    • TopUp Card API
    • Card Withdraw API
    • Query Card Balance API
    • Query Card Info API
    • Query Card Transaction API
    • Add VPA Scene API
  • Query
    • Query Payout Order API
    • Query Order API
    • QueryOrderList API
    • QueryBalance API
    • QueryOrderAmount API
  • Notify
    • SEPA EDD KYC Notify Webhook API
    • Pay Notify WebHook API
      POST
    • Refund Notify WebHook API
      POST
    • Card Notify WebHook API
      POST
    • Chargeback Notify WebHook API
      POST
  • File
    • UploadFile API
  • Schemas
    • ApiResponse
    • V2EncryptedEnvelope
    • CreateAccountRequest
    • UserArray
    • V2EncryptedNotification
    • QueryPayOutV2Request
    • PayoutCheckStandV2Request
    • CheckStandV2Request
    • PayoutCheckStandV2Response
    • CreateAccountResponse
    • QueryPayOutV2Response
    • ProductParams
    • PaymentNotification
    • PaymentNotificationPayload
    • Category
    • RefundNotificationPayload
    • CreateAccountInfo
    • Pet
    • OrderQueryV2Data
    • PayoutQueryResult
    • CheckStandV2Response
    • PayoutCheckStandV2Data
    • Tag
    • ChargebackNotificationPayload
    • RechargeRequest
    • CheckStandV2Data
    • OrderQueryV2Request
    • OrderQueryV2Response
    • Order
    • RechargeResponse
    • User
    • RechargeAccountInfo
  1. Notify

SEPA EDD KYC Notify Webhook API

OnlinePay V2 SEPA EDD KYC asynchronous notification API documentation.

Overview#

When a SEPA payment requires the merchant to submit KYC information, and the required KYC information is not provided in the payment request or existing user KYC records, OnlinePay will send an asynchronous notification to the eddNotifyUrl submitted in the payment request.
The V2 notification uses RSA+AES hybrid encryption to protect data security.

Encryption Flow#

1.
OnlinePay generates a random AES key
2.
Business data + signature is encrypted with AES key → encryptedData
3.
AES key is encrypted with RSA (platform private key) → encryptedKey
4.
Merchant decrypts encryptedKey with OnlinePay public key to get AES key
5.
Merchant decrypts encryptedData with AES key to get plaintext

Signing Flow#

RSA256: signType = "RSA256", sign = RSA-SHA256(sorted key=value pairs, platform private key), verify with OnlinePay public key

Signing String Construction#

Sort all fields alphabetically by key, exclude sign and signType, skip null or empty values, then join as key1=value1&key2=value2&....

Retry Mechanism#

If OnlinePay does not receive HTTP 200 from the merchant, it will retry according to OnlinePay notification retry rules.
Base URLs:

Authentication#

Notify#

POST SEPA EDD KYC Notify Webhook API#

POST your eddNotifyUrl
NOTE
This endpoint is implemented by the merchant. OnlinePay will POST the notification to the eddNotifyUrl submitted in the payment request.

Notification Trigger#

OnlinePay sends this notification when all conditions below are met:
1.
The SEPA payment field configuration requires KYC fields, such as iban, bicSwift, idFiles, bankStatementFiles, or kycReportFiles.
2.
The required KYC information is not provided in the payment request.
3.
OnlinePay does not already have complete KYC information for the same merNo + userId.
4.
The payment request contains a valid eddNotifyUrl.

Notification Method#

Request Method: POST
Data Format: application/json; charset=UTF-8
Character Encoding: UTF-8

Notification URL Configuration#

The notification URL is obtained from the payment request parameter:
1.
Priority 1: eddNotifyUrl submitted during payment
If eddNotifyUrl is not submitted, no EDD KYC notification will be sent.

What You Receive#

{
  "encryptedData": "U2FsdGVkX1+ghi789...=",
  "encryptedKey": "aZLW7pFrNgc+kJxsT2...="
}

Step 1: Decrypt#

// 1. RSA decrypt encryptedKey with OnlinePay Public Key → get AES key
// 2. AES decrypt encryptedData with AES key → get plaintext JSON below

Step 2: Decrypted Fields#

ParameterTypeRequiredDescription
tradeNoStringYesPlatform transaction order number
merOrderNoStringYesMerchant order number
codeStringYesNotification type code, fixed value 3
messageStringYesNotification message, fixed value Please upload your identity information
signTypeStringYesSignature type, fixed value RSA256
signStringYesSignature value for verifying notification authenticity

Decrypted JSON Example#

{
  "tradeNo": "T202309011234567890",
  "merOrderNo": "MER20230901001",
  "code": "3",
  "message": "Please upload your identity information",
  "signType": "RSA256",
  "sign": "d4e5f6g7h8..."
}

Step 3: Verify Signature#

1.
Sort all fields by key, exclude sign and signType, skip null or empty values
2.
Join as key1=value1&key2=value2
3.
Verify by RSA256: RSA-SHA256-Verify(signString, sign, OnlinePay_PublicKey)

Example#

Fields: tradeNo, merOrderNo, code, message
Sign string: code=3&merOrderNo=MER20230901001&message=Please upload your identity information&tradeNo=T202309011234567890

Step 4: Respond#

Return HTTP 200 to acknowledge receipt. If other status codes are returned, the system will consider the notification failed.

Security Recommendations#

1.
Must verify signature: Always verify the sign parameter after receiving notifications to ensure authenticity
2.
Idempotency handling: The same EDD KYC notification may be sent multiple times, merchants need to handle idempotency
3.
Timely response: Recommend responding within 5 seconds to avoid timeout retries
4.
Log recording: Recommend logging all received notifications and processing results for troubleshooting
Body 请求参数
{
  "encryptedData": "U2FsdGVkX1+ghi789...=",
  "encryptedKey": "aZLW7pFrNgc+kJxsT2...="
}

请求参数#

名称位置类型必选说明
bodybodyV2EncryptedEnvelope是V2 encrypted notification envelope

返回结果#

状态码状态码含义说明数据模型
200OKReturn HTTP 200 to acknowledge receiptNone

数据模型#

V2EncryptedEnvelope#

{
  "encryptedData": "string",
  "encryptedKey": "string"
}
V2 encrypted notification envelope.
Decrypt:
1.
RSA-decrypt encryptedKey with OnlinePay Public Key to get AES key
2.
AES-decrypt encryptedData with AES key to get JSON plaintext
Verify Signature:
Sort all fields by key, exclude sign and signType, skip null or empty values, join as key1=value1&key2=value2.

属性#

名称类型必选约束中文名说明
encryptedDatastringtruenoneAES-encrypted JSON payload (Base64)
encryptedKeystringtruenoneRSA-encrypted AES key (Base64). Decrypt with OnlinePay Public Key.

EddKycNotifyPlaintext#

{
  "tradeNo": "T202309011234567890",
  "merOrderNo": "MER20230901001",
  "code": "3",
  "message": "Please upload your identity information",
  "signType": "RSA256",
  "sign": "d4e5f6g7h8..."
}

属性#

名称类型必选约束中文名说明
tradeNostringtruenonePlatform transaction order number
merOrderNostringtruenoneMerchant order number
codestringtruenoneNotification type code, fixed value 3
messagestringtruenoneNotification message, fixed value Please upload your identity information
signTypestringtruenoneSignature type, fixed value RSA256
signstringtruenoneSignature value for verifying notification authenticity
Modified at 2026-06-16 10:38:13
Previous
QueryOrderAmount API
Next
Pay Notify WebHook API
Built with