报文结构及约定
1. 概述
本部分描述了基于ISO 20022标准的清算网络系统报文结构和约束。报文结构包含报文头、报文体以及基于RSA加密算法的数字签名。该设计旨在确保报文的安全性、完整性和可靠性。
通讯方式 | HTTPS + JSON |
字符集 | UTF-8 |
加密方式 | RSA 加密 |
2. 报文结构
2.1 报文头(Message Header)
报文头包含以下字段:
- MessageId(报文ID): 唯一标识报文的字符串。
- CreationDateTime(创建时间戳): 报文创建的日期和时间,遵循ISO 8601格式(如:2023-06-02T10:30:00Z)。
- Sender(发送方): 发送方的唯一标识符。
- Receiver(接收方): 接收方的唯一标识符。
- MessageType(报文类型): 描述报文处理类型的字符串。
2.2 报文体(Message Body)
报文体包含业务数据。结构可根据不同的报文类型进行定制。例如,付款指令报文体可能包含以下字段:
- TransactionId(交易ID): 唯一标识交易的字符串。
- Debtor(付款方): 付款方的唯一标识符。
- Creditor(收款方): 收款方的唯一标识符。
- Amount(金额): 交易金额,包括货币代码和金额值。
- PaymentDate(付款日期): 预期付款的日期,遵循ISO 8601格式。
2.3 数字签名(Digital Signature)
使用RSA加密算法对报文头和报文体进行签名。签名由发送方的私钥生成,并使用发送方的公钥进行验证。签名确保报文在传输过程中不被篡改,并证实发送方的身份。
3. 报文约束
- 所有字段必须使用UTF-8字符编码。
- 报文头和报文体中的所有字段都必须按照ISO 20022标准的数据类型和格式进行定义。
- 报文头和报文体字段之间使用预先定义的分隔符进行分隔,例如竖线('|')或逗号(',')。
- RSA签名长度应为2048位。
- 报文签名使用Base64编码以便于传输。
4.示例报文
报文头(示例)
jsonMsgHeader = { MessageId: 202306021050001 CreationDateTime: 2023-06-02T10:50:00Z Sender: BANKA Receiver: BANKB MessageType: PAYMENT_INSTRUCTION }
字段 | 含义 |
MessageId | 报文标识号 |
CreationDateTime | 报文发起时间 |
Sender | 报文发送方 |
Receiver | 报文接收方 |
MessageType | 报文类型代码 |
报文体(示例)
jsonMsgBody = { TransactionId: TX00012345 Debtor: ACME_CORP Creditor: BETA_INC Amount: USD|1000.00 PaymentDate: 2023-06-05 }
数字签名
采用 RSA 加密算法生成数字签名。将报文头和报文体的 JSON 字符串连接后,对其进行 SHA-256 哈希计算,再使用发送方的私钥进行签名。接收方使用发送方的公钥对签名进行验证。
示例:
javaSignB64Str = MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDfmlc2EgrdhvakQAy6XzWVatzN
以下是一个示例报文,包含报文头、报文体和数字签名:
在此示例中,报文头和报文体字段之间使用竖线('|')作为分隔符,数字签名位于报文体之后。
请注意,此示例仅用于说明目的,实际报文格式应根据ISO 20022标准中具体业务领域的要求进行调整。
javaMsgHeaderB64Str = BASE64URL(UTF8(MsgHeader)) MsgBodyB64Str = BASE64URL(UTF8(MsgBody)) REQUEST BODY = MsgHeaderB64Str + "|" + MsgBodyB64Str + "|" + SignB64Str