## DDPay 支付网关接口对接文档 > 文档名称:DDPay Payment Gateway > 版本:1.1.0(文末“Document Version”标注为 1.1.2;文件命名为 v1.1.3) > 最后更新:2026-03-20 > 版权:© 2025 DDPay ## 目录 - 1. 概述(Overview) - 2. 认证与安全(Authentication & Security) - 3. 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) - 4. 返回码(Response Codes) - 5. 附录 - 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**,流程如下: 1. 收集请求参数(**不包含**签名字段本身) 2. 按参数 key 名进行字典序排序(ASCII 顺序) 3. 将所有 `key=value` 使用字符 `&` 连接(中间用 `&` 分隔) 4. 在末尾追加:`&key=YOUR_API_SECRET` 5. 对得到的字符串执行 `MD5` 6. 将 MD5 哈希结果转为小写 7. 将该哈希值填入签名字段 重要注意: - **空值或 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 Bank - `br` : Bank Rakyat - `alb` : Alliance Bank - `mbb` : Maybank2U - `bi` : Bank Islam - `bm` : Bank Muamalat - `afb` : Affin Bank - `rhb` : RHB Bank - `ocbc` : OCBC Bank - `scb` : Standard Chartered - `hlb` : Hong Leong Bank - `uob` : UOB Bank - `cimb` : CIMB Clicks - `amb` : AmBank - `bsn` : Bank Simpanan Nasional - `hsbc` : HSBC Bank - `cob` : Bank of China ### 5.2 出金银行列表(MYR) > 与入金 MYR 银行列表一致 - `pbb` : Public Bank - `br` : Bank Rakyat - `alb` : Alliance Bank - `mbb` : Maybank2U - `bi` : Bank Islam - `bm` : Bank Muamalat - `afb` : Affin Bank - `rhb` : RHB Bank - `ocbc` : OCBC Bank - `scb` : Standard Chartered - `hlb` : Hong Leong Bank - `uob` : UOB Bank - `cimb` : CIMB Clicks - `amb` : AmBank - `bsn` : Bank Simpanan Nasional - `hsbc` : HSBC Bank - `cob` : Bank of China - `tng` : Touch & Go ### 5.3 入金银行列表(THB) - `105` : BANK OF THAILAND - `106` : BANGKOK BANK PUBLIC COMPANY LTD. - `107` : KASIKORNBANK PUBLIC COMPANY LIMITED - `108` : KRUNG THAI BANK PUBLIC COMPANY LTD. - `109` : TMB THANACHART BANK PUBLIC COMPANY LIMITED - `110` : SIAM COMMERCIAL BANK PUBLIC COMPANY LTD. - `111` : CITIBANK, N.A. - `112` : STANDARD CHARTERED BANK (THAI) PUBLIC COMPANY LIMITED - `113` : CIMB THAI BANK PUBLIC COMPANY LIMITED - `114` : UNITED OVERSEAS BANK (THAI) PUBLIC COMPANY LIMITED - `115` : BANK OF AYUDHYA PUBLIC COMPANY LTD. - `116` : GOVERNMENT SAVINGS BANK - `117` : THE GOVERNMENT HOUSING BANK - `118` : BANK FOR AGRICULTURE AND AGRICULTURAL COOPERATIVES - `119` : BANK OF CHINA (THAI) PUBLIC COMPANY LIMITED - `120` : ISLAMIC BANK OF THAILAND - `121` : KIATNAKIN PHATRA BANK PUBLIC COMPANY LIMITED - `122` : INDUSTRIAL AND COMMERCIAL BANK OF CHINA (THAI) PUBLIC COMPANY LIMITED - `123` : LAND AND HOUSES BANK PUBLIC COMPANY LIMITED - `158` : TISCO BANK PUBLIC COMPANY LIMITED - `357` : RHB BANK BERHAD - `358` : INDIAN OVERSEA BANK - `359` : ANZ BANK (THAI) PUBLIC COMPANY LIMITED