- For credit card transactions, consumers maintain the right to initiate a dispute within 180 days of the charge date. When a dispute is filed, a dispute fee of $20 will be assessed per transaction.
- Upon receiving a dispute notification, you have two options for response
- First: you may accept the dispute by submitting a response to the issuing bank affirming that you do not contest the refunded amount.
- Second, you may counter the dispute by completing a guided submission process that prompts you to provide relevant evidence and supporting documentation for your case.
- Should you elect to counter a dispute, an additional dispute countered fee of $20 will be applied. In the event that the issuing bank does not accept your counter materials and rules in favor of the consumer, both the dispute countered fee will be deducted and the consumer’s payment will be refunded to them.
- Regarding fee refunds, Haipay will return the dispute countered fee if you successfully win the dispute. However, unless explicitly stated otherwise in your Haipay contract, the initial dispute fee is non-refundable under all circumstances.
- PCI Compliance: Direct violation of PCI DSS requirements
- Security Risks: WebView and iframe may not provide sufficient security isolation
- Man-in-the-Middle Attacks: Malicious applications may intercept or tamper with payment data
- Phishing Risks: Cannot ensure users are entering sensitive information in a trusted environment
Region Restrictions
Please check the unsupported regions list to confirm your target market availability.
Transaction Limits
| Transaction Type | Limit (USD) |
|---|
| Collection | 0.99-1000 |
Collection API
Collection Apply
Description:
- Create a collection order
URL:
USD: /usd/collect/apply
Description: Use the appId corresponding to USD. After successful payment, the user’s USD balance increases.
Parameters:
| Parameter | Required | Type | Description |
|---|
| appId | Yes | Long | Business ID (obtained from the dashboard; use the one corresponding to the currency in the URL) |
| orderId | Yes | String | Merchant order number (must be unique, max 48 characters) |
| name | No | String | User name; real name recommended. Format: firstName and lastName separated by space. Example: John Doe |
| phone | Yes | String | Real phone number (format reference: phone number format) |
| email | No | String | Real email address |
| amount | Yes | String | Transaction amount (2 decimal places; no punctuation such as ”,“) |
| payType | Yes | String | [Payment type](/docs/en/V20260628/api/version2/creditcard-mit#Payment methods) |
| inBankCode | Yes | String | [Payment code](/docs/en/V20260628/api/version2/creditcard-mit#Payment methods) |
| clientIp | No | String | Client IP address |
| callBackUrl | Yes | String | Redirect URL after successful payment |
| callBackFailUrl | Yes | String | Redirect URL after failed payment |
| notifyUrl | No | String | Callback URL |
| subject | Yes | String | Payment remark |
| body | No | String | Remark details |
| partnerUserId | Yes | String | Unique user identifier (e.g. userId) for risk control. Must be real and valid. Format: digits, letters, or common symbols -~!@#$%&*()_. |
| sign | Yes | String | Signature |
Request Example
{
"appId": 1054,
"orderId": "M233323000059",
"amount": "300",
"phone": "09230219312",
"email": "23423@qq.com",
"name": "test",
"inBankCode": "USA",
"payType": "BANK_TRANSFER",
"partnerUserId": "149597870",
"sign": "af0gAHkUOyYHu9owQp8NJ4mPEeUW4vuJcjdxqLIzrVw8AvpLSjD1DXupReSG/CyuSkFRyiIvCp5u703AuGGmfgD2gKDH3Ywau41bAbG2jnHJ8mtjiSJ5iWUzanyd4Kr7d1+rETbzUl7/BkW3t0X8UUFdqpxwG8DPUjAwUKfplWDHV7koG51Ozexd80DCsmW6eWdouAZ1uNXGLYmV3ftE3BmfNRtuv1C5bfTJWrTEIOxbF6g2uYOFZTlIgrQgd7/2PsAYwQQXNz8Q8CYl4OxqCv4pXJxaLWPbR5tqZu9og5kn32C9aHW/NlU1y39vzz+4ef81yPAqUV9oHlSMSPrMmw=="
}
Response Example
{
"status": "1",
"error": "00000000",
"msg": "",
"data": {
"orderId": "M233323000059",
"orderNo": "6023071013539074",
"payUrl": "",
"clientToken": "",
"sign": "YEoA8Y2JzQFGVzwJSqmemm1Kfv/bfyIfCqv2dp7RNzT5B72AQvdD+nt2nR4sL1HWscvmNHyVt5ovAi7MMhy3ziih/sMph+wPx4YjH3W1h5DyBvSlWvaKfKrK5ViomZ0pPYWydwRHnnRnicxToHK9S6qtSy7Q73O0hdz4hJ9p41Th3ycBl2Q9SeqSZYSY1ohcPDhdyRf2y0prb8rHgpBKzxZ5BKX/1bsE9OmsSEHAEYT8OGgko6aNe8XPAhr4G48cpWTftvnGQuzh0O65nuZRI/PF+Axt2zJCVbFHDDSREI9NlAT82ebDqhlVdxQzKE67D1nxgjb3dPmDUYHOBpmwxQ=="
}
}
Response data parameters
| Parameter | Type | Description |
|---|
| orderId | String | Merchant order number (must be unique) |
| orderNo | String | Platform order number |
| payUrl | String | Payment URL |
| bankCode | String | Payment code |
| clientToken | String | Client token for use in the Front-End Component (see Front-End Component) |
| sign | String | Signature |
Collection Query
Description:
URL:
USD: /usd/collect/query
Parameters:
| Parameter | Required | Type | Description |
|---|
| appId | Yes | Long | Business ID (obtained from the dashboard; use the one corresponding to the currency in the URL) |
| orderId | Yes | String | Merchant order number |
| orderNo | No | String | Platform order number (faster response) |
| sign | Yes | String | Signature |
Request Example
{
"appId": 1054,
"orderId": "M22222000028",
"sign": "EmyJGm3ELzG4FsOd0Krs9ncbSjo4oTGuXWML+7djYla3+VAwd9wS17z38p/7U2ZAjroO04XrE7YXcB1o76Dtyipj3h3bJzs7FYma1QNkMUdt9hh7m8U6hMsMQX7vIWHtXNwz4pbTSC75+kQWXaCew7KoE6LXECdJU8AISgNgeki2TK9R0pCfshr0Z2SZBPeuT6OvIH5LdmqgdZhuqnffGU2qnXk4KMkO848e6/WALLBR+LE1wyKHfPnYVcuKSMVYxkvKyyIL5JIPEgW0o5bh4RCbaUn3NZtyYwrU1uQ3ZDFRThm9j6XAQP+LBlmq3nOePqBtp/VDVarRaV+7FbQg3A=="
}
Response Example
{
"status": "1",
"error": "00000000",
"msg": "",
"data": {
"orderId": "M22222000028",
"orderNo": "6023042811314347",
"amount": "50.00",
"actualAmount": "0.00",
"fee": "0.00",
"status": 1,
"sign": "fP433ygWVDLVGxYkVnIJj7riGq0U3vyVX+MbBAImxfGLZkZcEAHVEoVYuULZSmXAAXKRSyd67WlDNm+24pougM54ofAoH4HMtCL2tfCoBReFyz3z02AGKkrKE2xWhSpWoqfQoBvzwuN5iGMMu0s9Q1YvqiwJ8WDVIENnmiIyD8qDJN7caHTW2US14/faG+69AvnuIgJ/nu7/jogOlgEYdZdVYU7gcRDE+d47KjlFGswQkJ/h/uzV7cWtUqrtOO7ZnZ3/z33Xx8awokX36QoYcPSWAU0h+Ij9O9402HNhm1eTbYcLU0uI/z8xCAtyAI/tTyiFijpiNlxUKQj+zKsILw=="
}
}
Response data parameters
| Parameter | Type | Description |
|---|
| orderId | String | Merchant order number (must be unique) |
| orderNo | String | Platform order number |
| amount | String | Transaction amount |
| actualAmount | String | Actual amount received |
| fee | String | Fee |
| status | Integer | Status (0: not started, 1: paying, 2: success (final), 3: failed (final), -1: exception pending confirmation) |
| payTime | String | Payment success time (available when status=2), local time, format: yyyy-MM-dd HH:mm:ss |
| errorMsg | String | Payment failure reason (available when status=3) |
| sign | String | Signature |
Refund Apply
Description:
- Initiate a refund for the original credit card transaction. Note that the synchronously returned refund status should be confirmed via the query API.
URL:
USD: /usd/refund/apply
Parameters:
| Parameter | Required | Type | Description |
|---|
| appId | Yes | Long | Business ID (obtained from the dashboard; use the one corresponding to the currency in the URL) |
| orderId | Yes | String | Merchant refund order number (new merchant order number; cannot reuse the original collection order number) |
| orderNo | Yes | String | Platform order number (Platform order number from original collection) |
| refundAmount | No | String | Optional; if omitted, full refund is applied |
| sign | Yes | String | Signature |
Response data parameters
| Parameter | Type | Description |
|---|
| appId | String | Business ID |
| orderNo | String | Platform order number (Platform order number from original collection) |
| orderId | String | Merchant refund order number |
| refundNo | String | Platform refund number for this request |
| status | String | Refund status: 1 = success, 0 = processing, 2 = failed. Normally returns processing initially; use query API to check status. |
| errorMsg | String | Error message (may not always be present) |
| sign | String | Signature |
Refund Query
Description:
- Query the result of a refund request.
URL:
USD: /usd/refund/refundQuery
Parameters:
| Parameter | Required | Type | Description |
|---|
| appId | Yes | Long | Business ID (obtained from the dashboard; use the one corresponding to the currency in the URL) |
| orderId | No | String | Merchant refund order number |
| refundNo | No | String | Platform refund number (returned from refund apply; prefer this field for queries if available) |
| sign | Yes | String | Signature |
Response data parameters
| Parameter | Type | Description |
|---|
| appId | String | Business ID |
| orderNo | String | Platform order number (Platform order number from original collection) |
| orderId | String | Merchant order number |
| refundNo | String | Platform refund number |
| status | String | Refund status: 1 = success, 0 = processing, 2 = failed. Use this status as the final result. |
| errorMsg | String | Error message (may not always be present) |
| refundAmount | String | Refund amount |
| sign | String | Signature |
5.Payment methods
| Currency | Payment Type (payType) | Payment Code (inBankCode) | Limit | Status | Description |
|---|
| USD | BANK_TRANSFER | CREDIT_CARD | 0.99-1000 | Available | VISA |
| USD | BANK_TRANSFER | CREDIT_CARD | 0.99-1000 | Available | MasterCard |
| USD | BANK_TRANSFER | CREDIT_CARD | 0.99-1000 | Available | JCB |
| USD | EWALLET | GOOGLE_PAY | 0.99-1000 | Available | Google Pay |
| USD | EWALLET | APPLE_PAY | 0.99-1000 | Available | Apple Pay |
6. Test Card Numbers
For test card numbers, see Test Card Numbers, covering successful payments, declines, and dispute scenarios.
Last modified on July 9, 2026