我正在向我的 FIX 服务器发送一条新的订单消息(消息类型为“D”),并且它从服务器上的“预验证”中被踢回,响应为所述消息正文长度与实际消息不匹配。
在文本编辑器中,声明的正文长度似乎与消息长度匹配(在正文长度标记值和校验和之前的分隔符之间测量)
以下是我发送的消息(敏感数据替换为相同数量的“x”字符):
8=FIX.4.4^9=183^35=D^34=2^49=xxxxxxxxxxx^52=20130927-19:57:35.771^56=xxx^1=xxxxxxxx^11=123^21=1^38=10^40=1^52=20130927-19:57:35.770^54=1^55=MSFT^59=1^60=20130927-19:57:35.771^100=xxxx^553=xxxxxxxxxx^10=234^
这是我立即返回的业务拒绝消息(类型“j”):
8=FIX.4.4^9=126^35=j^49=xxx^56=xxxxxxxxxxx^34=3^52=20130927-16:09:05.888^43=N^372=D^58=PreValidate Failed body lengh problem^380=4^379=2^45=0^10=007^
(错字是他们的,不是我的)
这是用于构建消息的代码:
message = fix.Message()
header = message.getHeader()
header.setField(fix.BeginString('FIX.4.4'))
header.setField(fix.SenderCompID('xxxxxxxxxxx'))
header.setField(fix.TargetCompID('xxx'))
header.setField(fix.MsgType('D'))
message.setField(fix.Account(DEMO_Account_Number))
message.setField(fix.HandlInst('1')) #only valid value is '1'
message.setField(fix.OrderQty(int(Test_Order_Qty)))
message.setField(fix.OrdType('1')) #1=Market, 2=Limit, 3=Stop,4=StopLimit, P=TrailingStop, T=TTO
message.setField(fix.SendingTime(1))
message.setField(fix.Side('1')) #1=Buy, 2=Sell, 5=Sell Short, and 6=Sell Short Exempt.
message.setField(fix.Symbol('MSFT'))
message.setField(fix.TimeInForce('1')) # 0 = Day , 1 = GTC.................
message.setField(fix.TransactTime(1))
message.setField(fix.ExDestination('xxxx'))
message.setField(fix.Username(UserName))
fix.Session_sendToTarget(message)
这里可能出了什么问题?为什么服务器将其踢回?
谢谢。