QuickFixN中FIX50SP2版本LOGON实现及认证问题咨询
FIX50SP2客户端LOGON实现问题解答
问题1:LOGON消息选择FIX50SP2还是FIXT11?
FIXT1.1是传输层协议,专门负责会话管理(包括Logon、Logout这类管理消息);而FIX50SP2是应用层的业务消息规范。当对接FIX50SP2版本的协议时,LOGON消息需使用FIXT1.1的版本,会话建立后,业务消息(如订单、成交回报)再使用FIX50SP2的消息类型。
问题2:显式发送Logon还是在ToAdmin中处理认证?
不需要显式发送Logon消息,QuickFixN框架会在会话初始化时自动生成并发送该消息。你只需要在ToAdmin方法中拦截框架生成的Logon消息,添加Coinbase要求的认证逻辑即可——这和你当前代码的思路完全一致。
代码补充示例(基于你的现有逻辑)
你已经正确命中了Logon消息,接下来只需完成Coinbase要求的签名计算并添加对应字段即可,示例如下:
public void ToAdmin(QuickFix.Message message, SessionID sessionId) { string msgType = message.Header.GetString(Tags.MsgType); if (msgType == MsgType.LOGON) { // 从配置读取Coinbase认证信息 string apiKey = _settings.Get(sessionId).GetString("SenderCompID"); string secret = _settings.Get(sessionId).GetString("Secret"); string passphrase = _settings.Get(sessionId).GetString("Passphrase"); // 按Coinbase规则生成签名 string timestamp = DateTime.UtcNow.ToString("yyyyMMdd-HH:mm:ss"); string signData = timestamp + msgType + message.ToString(); string signature = ComputeHmacSha256(secret, signData); // 将认证字段添加到Logon消息中(需替换为Coinbase指定的Tag编号) message.SetField(new StringField(96, passphrase)); message.SetField(new StringField(554, apiKey)); message.SetField(new StringField(95, signature)); } } // 辅助方法:计算HMAC SHA256签名 private string ComputeHmacSha256(string secret, string data) { using (var hmac = new System.Security.Cryptography.HMACSHA256(Convert.FromBase64String(secret))) { byte[] hashBytes = hmac.ComputeHash(System.Text.Encoding.UTF8.GetBytes(data)); return Convert.ToBase64String(hashBytes); } }
注意:请根据Coinbase FIX文档替换示例中的Tag编号为实际要求的字段标识。
内容的提问来源于stack exchange,提问作者Dmitry Dyachkov
相关产品推荐
相关产品推荐

