HIPAYX
中文 / English

汇入通知接口

发送一份加密通知,告知收款账户、金额和币种。通知成功后进入“在途”,不代表资金已经实际到账。

POST/v1/inward-remittance-notifications
https://api-integration-gateway-my-7c92.hipayx.com/v1/inward-remittance-notifications

四步完成认证与加密

  1. 通过私有交接渠道获取 Client ID、API Token 和独立的 AES 加密密钥。真实凭证不在公开文档中展示。
  2. 将下表业务字段组成 JSON,用 AES-256-GCM 加密;每次由示例代码生成新的12字节随机 nonce。
  3. 通过 HTTPS POST 提交两个字段 nonce 和 ciphertext,并在请求头携带 Token 和 Client ID。
  4. 服务器先验证 Token,再用双方持有的同一密钥解密,校验字段并防重保存。共享密钥是秘密,不是公开密钥。
Authorization: Bearer YOUR_API_TOKEN
X-Client-Id: YOUR_CLIENT_ID
Content-Type: application/json
{"nonce":"BASE64_NONCE","ciphertext":"BASE64_CIPHERTEXT_AND_TAG"}

密钥为32个随机字节,使用标准带填充 Base64 编码交接。nonce 为12个随机字节。ciphertext 为密文后拼接16字节 GCM 校验标签,再进行标准 Base64 编码。同一密钥下严禁复用 nonce。不要把 Token 当作加密密钥,也不要使用短数字密码。

附加认证数据(AAD)固定为以下字符串,末尾替换为实际 Client ID。示例代码会自动处理:

hipayx-v1|POST|/v1/inward-remittance-notifications|YOUR_CLIENT_ID

只接受加密后的 JSON 信封,不接受明文业务字段。旧 JWE、公私钥加密方案已停用。

解密后的业务字段

所有字段必填;不允许额外字段。备注可以为空字符串。

字段类型说明
client_idstring分配给您的调用方编号,须与 X-Client-Id 一致。
notification_idstring每笔订单的独立编号;8–64 位字母、数字、下划线或连字符。重试不变,不得用于另一笔订单。
batch_idstring户名前六个英文字母大写 + YYMMDD + 001–999。
timestampinteger当前 Unix 秒级时间戳,允许与服务器相差五分钟;重试可更新。
recipient_namestring收款账户户名,1–140 个字符;目前批次规则要求至少六个英文字母。
recipient_accountstring收款账号,4–64 个字符;字母或数字开头,可含空格和连字符,保留前导零。
recipient_swiftstring大写的 8 或 11 位 SWIFT/BIC;仅校验格式,不代表核实银行或账户归属。
amountstring正数十进制字符串,整数最多15位、小数最多4位,例如 "12500.00";不含货币符号、逗号或科学计数。
currencystring大写 ISO 4217 币种,例如 USD、AUD、CNY。格式认可不等于支持该付款路线。
remarksstring备注,最多500字;无备注传空字符串,不得含控制字符或密码。

批次号与独立订单编号

EXAMPLE COMPANY → EXAMPL + 260917 + 001
EXAMPL260917001

取收款账户“户名”的前六个英文字母,忽略空格和标点并转为大写,不是账号前六位。日期格式 YYMMDD,流水号001–999,由发送方协调分配。同一天同一前缀用完999后不可回到001。业务日期的时区以及不足六个英文字母的户名处理方式,需要在接入时另行约定。

批次号是分组信息,不承担独立防重。防重依据是 Client ID + notification_id。同一编号与相同业务内容重试返回原回执;同一编号不同业务内容拒绝。重试保留批次号与独立编号,时间戳可以更新,重新加密时必须生成新 nonce。

响应与重试

{
  "receipt_id": "receiver-generated-uuid",
  "notification_id": "your-order-reference",
  "status": "in_transit",
  "duplicate": false,
  "received_at": 1789600000
}
202已保存,状态在途,不代表到账或香港入库完成。
200重复通知,返回原回执,不新增。
400密文、字段或时间戳无效。
401调用方凭证缺失、错误或已停用。
409独立编号内容冲突,或重复使用 nonce 加密不同内容。
413 / 415超过16 KiB,或不是 application/json。
429请求过快,请退避重试。
5xx / timeout结果不确定,使用相同独立编号和业务内容重试。

请求失败可从2秒起指数退避并加入随机延迟,间隔上限1分钟;持续失败应人工检查,不要无限重试。

已入账异步回调

收到通知后自动进入 in_transit。只有我方受信任的内部确认才可变更为 credited,并发送回调;对方不能通过通知接口自行标记已入账。

回调地址配置

合作方私下提供 HTTPS 回调地址,按 Client ID 配置;不放在每笔通知中。只允许公网443端口,不跟随跳转,不允许内网地址。目标公网 IP 经核对后固定,变化时需重新审核。

{
  "event_id": "stable-event-uuid",
  "event_type": "remittance.credited",
  "client_id": "YOUR_CLIENT_ID",
  "notification_id": "your-order-reference",
  "batch_id": "EXAMPL260917001",
  "receipt_id": "original-receipt-uuid",
  "status": "credited",
  "credited_at": 1789600000,
  "confirmation_reference": "ledger-reference"
}
X-HIPAYX-Event-Id: stable-event-uuid
X-HIPAYX-Timestamp: current-unix-seconds
X-HIPAYX-Signature: v1=HEX_HMAC_SHA256

HMAC-SHA256(webhook_secret, timestamp + "." + raw_body)

回调通过 HTTPS 发送签名 JSON,不包含收款账号;回调签名密钥与 Token、AES 密钥分开。按原始报文字节验签,恒定时间比较,拒绝超过5分钟的时间戳,并按 event_id 防重。持久保存后返回2xx。

非2xx或网络失败最多尝试12次,间隔从30秒指数增加、上限1小时。事件编号与正文不变,每次更新签名时间戳。超过次数保留待人工处理;未配置地址则保持待发送,不会丢弃。

代码与上线边界

下载 Python 示例

pip install cryptography httpx

HIPAYX_CLIENT_ID
HIPAYX_API_KEY
HIPAYX_ENCRYPTION_KEY
HIPAYX_API_URL

python client_example.py

通过安全环境变量或密钥管理器传入凭证;HIPAYX_ENCRYPTION_KEY 为私下交接的 Base64 密钥。示例使用虚拟业务数据,不会转账。密钥不可写入浏览器代码、公开仓库或 URL。

当前马来西亚服务接收并保存密文,尚未对接香港主系统。实际合作方回调地址仍需配置和联调;没有自动核实银行到账或改余额。

support@hipayx.com