作为SUBMIT_SM_RESP的一部分返回的消息ID与在DELIVER_SM交付收据中返回的消息ID不匹配是正确的吗?通过阅读SMPP 3.4 spec 1.2,我认为可以了,因为该规范在附录B中注明了交货收据: 最初由SMSC分配给消息的消息ID 已提交。但是我发现例如在SUBMIT_SM_RESP中返回的十六进制为c81f136b00116d53000000000b68c86e01481101而DELIVER_SM中返回的小数为14420265882147188051并且没有多少位摆弄表明两者或部分之间没有任何关联。我最初以为这是一个错误,但是后来在晦涩的文档Technical realization of the Short Message Service (SMS) Point-to-Point (PP) (GSM 03.40)中找到了 §9.2.1短消息标识符不在实体和 因此给定的消息在MS和SC处可能具有不同的SMI 侧面然后 §9.3.1...因此,SC / GMSC接口上的消息标识符不是 与访问的MSC / MS接口相同因此,我是否正确理解消息ID对于关联SMS的提交和传递没有用? 最佳答案 简短答案不,这是不正确的。您看到这种不匹配的原因是由于您所连接的SMSC中的某些实现错误。请继续阅读以获取详细说明。长答案GSM 03.40的摘录是正确的,但这并不意味着您得出结论。以下流程将有助于对此进行解释。想象一下以下连接(表示SMPP连接):ESME#1 SMSC#1 ESME#2以下是一些将要发生的事件:ESME#1将带有提交回执请求的Submit_sm发送到SMSC#1。SMSC#1发回一个带有message_id = 1000(由SMSC#1生成)的submit_sm_resp。SMSC#1通过delivery_sm将消息转发到ESME#2。ESME#2发回一个带有message_id = 2000(由ESME#2生成)的deliver_sm_resp。注意:尽管SMPP 3.4规范没有提及这一点,但是许多实现都将message_id放在支持收货的地方。SMSC#1接收deliver_sm_resp。现在,必须记住将ESME#2的message_id = 2000匹配到message_id = 1000。稍后在ESME#2上,将带有message_id = 2000的送达回执的Submit_sm发送回SMSC#1。SMSC#1将ESME#2的message_id = 2000映射到它的message_id = 2000。SMSC#1为message_id = 1000创建一个delivery_sm。如果SMSC#1忘记记住正确映射message_id,则它将错误的message_id发送到ESME#1。这会造成各种混乱(就像您的情况一样)。关于sms - SMS提交和传递的消息ID不相同,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18512444/ 10-10 20:04