12 KiB
12 KiB
DDPay 支付网关接口对接文档
文档名称:DDPay Payment Gateway
版本:1.1.0(文末“Document Version”标注为 1.1.2;文件命名为 v1.1.3)
最后更新:2026-03-20
版权:© 2025 DDPay
目录
-
- 概述(Overview)
-
- 认证与安全(Authentication & Security)
-
- API 接口(API Endpoints)
- 3.1 入金发起(Deposit Initiation)
- 3.2 出金发起(Payout Initiation)
- 3.3 入金状态查询(Deposit Status Inquiry)
- 3.4 出金状态查询(Payout Status Inquiry)
- 3.5 Webhook 回调(Webhook Notifications)
-
- 返回码(Response Codes)
-
- 附录
- 5.1 入金银行列表(MYR)
- 5.2 出金银行列表(MYR)
- 5.3 入金银行列表(THB)
1. 概述(Overview)
1.1 目的
本文件提供与 DDPay Payment Gateway API 集成的完整技术规范,涵盖:
- 请求/响应字段结构
- 认证机制
- 集成协议(包括签名与回调处理)
1.2 术语(Terminology)
| 术语 | 定义 |
|---|---|
| Merchant Account | 允许通过 DDPay 处理交易的已注册商户主体 |
| Client ID | 每个商户在平台注册时分配的唯一标识 |
| API Secret | 用于请求认证与签名校验的保密密钥 |
2. 认证与安全(Authentication & Security)
2.1 通信协议(Communication Protocol)
- 传输方式:
HTTPS POST请求 - Content-Type:
application/json - 字符编码:
UTF-8 - 响应格式:
JSON
要求:
- 所有 API 通信必须使用安全 HTTPS。
- 发起交易接口由平台提供同步响应;最终交易状态需要通过“状态查询接口”或“状态回调(Webhook)”确认。
2.2 请求签名(Request Signing)
DDPay 使用加密签名以保证请求的真实性与数据完整性。签名算法为 MD5,流程如下:
- 收集请求参数(不包含签名字段本身)
- 按参数 key 名进行字典序排序(ASCII 顺序)
- 将所有
key=value使用字符&连接(中间用&分隔) - 在末尾追加:
&key=YOUR_API_SECRET - 对得到的字符串执行
MD5 - 将 MD5 哈希结果转为小写
- 将该哈希值填入签名字段
重要注意:
- 空值或 null 参数值应排除在签名计算之外。
3. API 接口(API Endpoints)
生产环境的 Endpoint URL:请联系商户支持获取。
3.1 入金发起(Deposit Initiation)
目的:提交一笔新的支付入金请求
- HTTP Method:
POST - Endpoint URL:联系商户支持获取生产地址
请求参数(Request Parameters)
| 参数 | 描述 | 类型 | 必填 | 备注 |
|---|---|---|---|---|
client_id |
商户账号标识 | String | 是 | onboarding 提供 |
order_id |
交易唯一引用号 | String | 是 | 每笔交易必须唯一 |
payment_type |
支付方式选择 | String | 是 | 01=FPX,02=duitnow,03=ewallet;其他请咨询获取 |
transaction_amount |
支付金额 | Decimal | 是 | 币种:MYR |
payer_name |
付款账户持有人姓名 | String | 是 | 按银行登记信息 |
payer_bank[name] |
付款银行名称 | String | 是 | 请参考银行列表获取全称 |
callback_url |
异步通知地址 | String | 是 | 必须使用 HTTPS 协议 |
redirect_url |
用户返回地址 | String | 是 | 必须使用 HTTPS 协议 |
signature |
请求认证签名哈希 | String | 是 | 小写字母数字 MD5 |
响应参数(Response Parameters)
| 参数 | 描述 | 类型 | 条件/备注 |
|---|---|---|---|
status_code |
操作结果指示 | Integer | 非 0 表示失败 |
status_message |
可读状态说明 | String | 永远返回 |
details |
失败细节(如适用) | String | 仅失败时适用 |
client_id |
商户标识回显 | String | 成功时回显 |
order_id |
入金订单号回显 | String | 成功时回显,用于关联 |
transaction_amount |
支付金额确认 | Decimal | 成功时在配置币种下返回 |
transaction_status |
当前处理状态 | String | 成功时返回;参考“状态码” |
payment_url |
支付界面 URL | String | 成功时返回,跳转到该 URL 完成支付 |
timestamp |
响应生成时间 | DateTime | ISO 8601 |
signature |
响应校验签名哈希 | String | 成功时返回(使用同方法校验) |
3.2 出金发起(Payout Initiation)
目的:提交一笔新的出金请求
- HTTP Method:
POST - Endpoint URL:联系商户支持获取生产地址
请求参数(Request Parameters)
| 参数 | 描述 | 类型 | 必填 | 备注 |
|---|---|---|---|---|
client_id |
商户账号标识 | String | 是 | onboarding 提供 |
bill_number |
交易唯一引用号 | String | 是 | 每笔出金请求必须唯一 |
amount |
出金金额 | Decimal | 是 | 币种:配置币种 |
receiver_name |
收款账户持有人姓名 | String | 是 | 按银行登记信息 |
receiver_account |
收款账户号/手机号 | String | 是 | 按银行登记信息 |
bank[name] |
银行名称 | String | 是 | 请参考银行列表获取全称 |
bank_branch |
银行支行名称 | String | 是 | 若缺失则默认值为 N/A |
callback_url |
异步通知地址 | String | 是 | 必须使用 HTTPS 协议 |
signature |
请求认证签名哈希 | String | 是 | 小写字母数字 MD5 |
响应参数(Response Parameters)
| 参数 | 描述 | 类型 | 条件/备注 |
|---|---|---|---|
status_code |
操作结果指示 | Integer | 非 0 表示失败 |
status_message |
可读状态说明 | String | 永远返回 |
details |
失败细节(如适用) | String | 仅失败时适用 |
client_id |
商户标识回显 | String | 成功时回显 |
bill_number |
出金订单号回显 | String | 成功时回显,用于关联 |
transaction_amount |
出金金额确认 | Decimal | 成功时在配置币种下返回 |
transaction_fee |
出金手续费 | Decimal | 成功时在配置币种下返回 |
transaction_total |
出金总金额 | Decimal | 成功时在配置币种下返回 |
transaction_status |
当前处理状态 | String | 成功时返回;参考“状态码” |
timestamp |
响应生成时间 | DateTime | ISO 8601 |
signature |
响应校验签名哈希 | String | 成功时返回(使用同方法校验) |
remark |
出金备注 | String | 成功时回显(文档描述为 OK 状态下返回) |
3.3 入金状态查询(Deposit Status Inquiry)
目的:查询已提交入金的当前状态
- HTTP Method:
POST
请求参数(Request Parameters)
| 参数 | 描述 | 类型 | 必填 | 备注 |
|---|---|---|---|---|
client_id |
商户账号标识 | String | 是 | |
order_id |
入金订单号/交易引用 | String | 是 | 原始订单标识 |
query_time |
请求时间戳 | DateTime | 是 | 格式:YYYY-MM-DD HH:MM:SS |
signature |
请求认证签名哈希 | String | 是 |
响应参数(Response Parameters)
| 参数 | 描述 | 类型 | 条件/备注 |
|---|---|---|---|
status_code |
查询结果指示 | Integer | 永远返回 |
status_message |
查询结果说明 | String | 永远返回 |
client_id |
商户标识回显 | String | 成功时回显 |
order_id |
订单号回显 | String | 成功时回显 |
transaction_amount |
支付金额 | Decimal | 成功时在配置币种下返回 |
transaction_status |
当前处理状态 | String | 参考“状态码” |
timestamp |
响应时间 | DateTime | 仅返回 ISO 8601 |
signature |
响应校验签名哈希 | String | 成功时返回(使用同方法校验) |
3.4 出金状态查询(Payout Status Inquiry)
目的:查询已提交出金的当前状态
- HTTP Method:
POST
请求参数(Request Parameters)
| 参数 | 描述 | 类型 | 必填 | 备注 |
|---|---|---|---|---|
client_id |
商户账号标识 | String | 是 | |
bill_number |
出金引用号 | String | 是 | 原始出金标识 |
signature |
请求认证签名哈希 | String | 是 |
响应参数(Response Parameters)
| 参数 | 描述 | 类型 | 条件/备注 |
|---|---|---|---|
status_code |
查询结果指示 | Integer | 永远返回 |
status_message |
查询结果说明 | String | 永远返回 |
client_id |
商户标识回显 | String | 成功时回显 |
bill_number |
出金引用号回显 | String | 成功时回显 |
transaction_amount |
出金金额 | Decimal | 成功时在配置币种下返回 |
transaction_fee |
出金手续费 | Decimal | 成功时在配置币种下返回 |
transaction_total |
出金总金额 | Decimal | 成功时在配置币种下返回 |
transaction_status |
当前处理状态 | String | 参考“状态码” |
remark |
出金备注 | String | 成功时回显 |
timestamp |
响应时间 | DateTime | ISO 8601 |
signature |
响应校验签名哈希 | String | 成功时返回(使用同方法校验) |
3.5 Webhook 回调(Webhook Notifications)
目的:接收异步交易状态更新
说明:
- 平台通过
callback_url在交易状态变化时向你系统发送POST通知 - 通知发送范围:成功与失败交易都会发送
- 格式:通过
HTTPS POST发送JSON - 重试机制:如果未收到确认,最多重试 6 次
- 你需要的响应:返回纯文本
{"status":"ok"}并确保 HTTP 状态码为200
通知负载(Notification Payload)
| 参数 | 描述 | 类型 | 必填 | 备注 |
|---|---|---|---|---|
client_id |
商户标识 | String | 是 | |
order_id |
交易引用号 | String | 是 | |
transaction_status |
最终状态 | String | 是 | 参考状态码 |
timestamp |
通知时间 | DateTime | 是 | |
transaction_amount |
支付金额 | Decimal | 是 | 配置币种下返回 |
signature |
通知校验签名哈希 | String | 是 | 处理前必须校验签名 |
集成要求(Implementation Requirements)
- 在处理 webhook 之前先验证签名
- 收到后应立刻响应纯文本
{"status":"ok"}(HTTP 200) - 使用 HTTPS endpoint,并确保 SSL 证书有效
4. 返回码(Response Codes)
4.1 入金状态值(Deposit Status Values)
| 状态码 | 描述 | 最终状态 | 是否需要操作 | 处理建议 |
|---|---|---|---|---|
pending |
交易正在处理中 | 否 | 否 | 无需调用轮询接口或等待通知 |
completed |
交易成功 | 是 | 是 | 履约订单/服务(fulfill order/service) |
failed |
交易失败 | 是 | 是 | 通知客户,可选允许重试(allow retry) |
文档中
transaction_status建议参考本节状态码定义。
5. 附录(Appendices)
5.1 入金银行列表(MYR)
pbb: Public Bankbr: Bank Rakyatalb: Alliance Bankmbb: Maybank2Ubi: Bank Islambm: Bank Muamalatafb: Affin Bankrhb: RHB Bankocbc: OCBC Bankscb: Standard Charteredhlb: Hong Leong Bankuob: UOB Bankcimb: CIMB Clicksamb: AmBankbsn: Bank Simpanan Nasionalhsbc: HSBC Bankcob: Bank of China
5.2 出金银行列表(MYR)
与入金 MYR 银行列表一致
pbb: Public Bankbr: Bank Rakyatalb: Alliance Bankmbb: Maybank2Ubi: Bank Islambm: Bank Muamalatafb: Affin Bankrhb: RHB Bankocbc: OCBC Bankscb: Standard Charteredhlb: Hong Leong Bankuob: UOB Bankcimb: CIMB Clicksamb: AmBankbsn: Bank Simpanan Nasionalhsbc: HSBC Bankcob: Bank of Chinatng: Touch & Go
5.3 入金银行列表(THB)
105: BANK OF THAILAND106: BANGKOK BANK PUBLIC COMPANY LTD.107: KASIKORNBANK PUBLIC COMPANY LIMITED108: KRUNG THAI BANK PUBLIC COMPANY LTD.109: TMB THANACHART BANK PUBLIC COMPANY LIMITED110: SIAM COMMERCIAL BANK PUBLIC COMPANY LTD.111: CITIBANK, N.A.112: STANDARD CHARTERED BANK (THAI) PUBLIC COMPANY LIMITED113: CIMB THAI BANK PUBLIC COMPANY LIMITED114: UNITED OVERSEAS BANK (THAI) PUBLIC COMPANY LIMITED115: BANK OF AYUDHYA PUBLIC COMPANY LTD.116: GOVERNMENT SAVINGS BANK117: THE GOVERNMENT HOUSING BANK118: BANK FOR AGRICULTURE AND AGRICULTURAL COOPERATIVES119: BANK OF CHINA (THAI) PUBLIC COMPANY LIMITED120: ISLAMIC BANK OF THAILAND121: KIATNAKIN PHATRA BANK PUBLIC COMPANY LIMITED122: INDUSTRIAL AND COMMERCIAL BANK OF CHINA (THAI) PUBLIC COMPANY LIMITED123: LAND AND HOUSES BANK PUBLIC COMPANY LIMITED158: TISCO BANK PUBLIC COMPANY LIMITED357: RHB BANK BERHAD358: INDIAN OVERSEA BANK359: ANZ BANK (THAI) PUBLIC COMPANY LIMITED