logo

报文交互规范

报文结构及约定

1. 概述

本部分描述了基于ISO 20022标准的清算网络系统报文结构和约束。报文结构包含报文头、报文体以及基于RSA加密算法的数字签名。该设计旨在确保报文的安全性、完整性和可靠性。
通讯方式
HTTPS + JSON
字符集
UTF-8
加密方式
RSA 加密

2. 报文结构

2.1 报文头(Message Header)

报文头包含以下字段:
  1. MessageId(报文ID): 唯一标识报文的字符串。
  1. CreationDateTime(创建时间戳): 报文创建的日期和时间,遵循ISO 8601格式(如:2023-06-02T10:30:00Z)。
  1. Sender(发送方): 发送方的唯一标识符。
  1. Receiver(接收方): 接收方的唯一标识符。
  1. MessageType(报文类型): 描述报文处理类型的字符串。

2.2 报文体(Message Body)

报文体包含业务数据。结构可根据不同的报文类型进行定制。例如,付款指令报文体可能包含以下字段:
  1. TransactionId(交易ID): 唯一标识交易的字符串。
  1. Debtor(付款方): 付款方的唯一标识符。
  1. Creditor(收款方): 收款方的唯一标识符。
  1. Amount(金额): 交易金额,包括货币代码和金额值。
  1. PaymentDate(付款日期): 预期付款的日期,遵循ISO 8601格式。

2.3 数字签名(Digital Signature)

使用RSA加密算法对报文头和报文体进行签名。签名由发送方的私钥生成,并使用发送方的公钥进行验证。签名确保报文在传输过程中不被篡改,并证实发送方的身份。

3. 报文约束

  1. 所有字段必须使用UTF-8字符编码。
  1. 报文头和报文体中的所有字段都必须按照ISO 20022标准的数据类型和格式进行定义。
  1. 报文头和报文体字段之间使用预先定义的分隔符进行分隔,例如竖线('|')或逗号(',')。
  1. RSA签名长度应为2048位。
  1. 报文签名使用Base64编码以便于传输。

4.示例报文

报文头(示例)

json
MsgHeader = { MessageId: 202306021050001 CreationDateTime: 2023-06-02T10:50:00Z Sender: BANKA Receiver: BANKB MessageType: PAYMENT_INSTRUCTION }
字段
含义
MessageId
报文标识号
CreationDateTime
报文发起时间
Sender
报文发送方
Receiver
报文接收方
MessageType
报文类型代码

报文体(示例)

json
MsgBody = { TransactionId: TX00012345 Debtor: ACME_CORP Creditor: BETA_INC Amount: USD|1000.00 PaymentDate: 2023-06-05 }

数字签名

采用 RSA 加密算法生成数字签名。将报文头和报文体的 JSON 字符串连接后,对其进行 SHA-256 哈希计算,再使用发送方的私钥进行签名。接收方使用发送方的公钥对签名进行验证。
示例:
java
SignB64Str = MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDfmlc2EgrdhvakQAy6XzWVatzN
以下是一个示例报文,包含报文头、报文体和数字签名:
在此示例中,报文头和报文体字段之间使用竖线('|')作为分隔符,数字签名位于报文体之后。
请注意,此示例仅用于说明目的,实际报文格式应根据ISO 20022标准中具体业务领域的要求进行调整。
java
MsgHeaderB64Str = BASE64URL(UTF8(MsgHeader)) MsgBodyB64Str = BASE64URL(UTF8(MsgBody)) REQUEST BODY = MsgHeaderB64Str + "|" + MsgBodyB64Str + "|" + SignB64Str