2013-04-26 65 views
3

我试图查询通过perl Net发送的SMS状态:使用query_sm的SMPP模块。Perl Net :: SMPP query_sm PDU错误“消息ID无效”0x0C ESME_RINVMSGID

我填充我SUBMIT_SM PDU如下:

$resp_pdu1 = $smpp->submit_sm(
destination_addr => '12345678910', 
short_message => 'test message', 
source_addr_ton => 0x05, 
source_addr_npi => 0x00, 
source_addr => 'testing', 
dest_addr_ton => 0x02, 
dest_addr_npi => 0x01, 
data_coding => 0x00, 
esm_class => 0x00, 
) or die; 

我传递消息ID在submit_sm_rsp PDU返回如下我query_sm PDU:

$msg_id = $resp_pdu1->{message_id}; 
print $msg_id;print "\n"; 
$resp_pdu2 = $smpp->query_sm(
message_id => $msg_id, 
source_addr_ton => 0x05, 
source_addr_npi => 0x00, 
source_addr => 'testing', 
) or die; 

我的Perl脚本运行没有任何错误和该消息由MS接收,在绑定和解除绑定到SMSC时没有错误。检查SMPP数据包的wireshark转储在query_sm_rsp中显示“消息ID无效”,错误代码为0x0C。我已经检查过了,并且我传递给query_sm PDU的submit_sm_rsp返回的message_id是相同的。任何提示,为什么我得到这个错误?

+0

此问题可能由ubmit_sm_resp和query_sm PDU中不同格式的消息标识符引起。例如,某些SMSC可能会使用十进制数进行响应,但quirey_sm需要十六进制数。我建议你通过设置“$ Net :: SMPP :: trace = 1”来添加日志来查看更多细节。 – 2013-04-27 09:31:11

+0

感谢您的建议。我确实认为这可能是格式化message_id的问题。例如,submit_sm_rsp中返回的message_id类型为6b743a5d。 我连接到的SMSC我认为不回复十进制数。它用一个十六进制字符串或十六进制值来回答。 我正在将原样检索的message_id传递给query_sm PDU。 你的意思是我应该尝试将它转换为一个十六进制字符串,并将其传递给query_sm。我打开了SMPP跟踪,请求响应头和主体的流程正常无错。 – 2013-04-28 10:05:03

+0

您应该首先检查您的SMSC提供商在** submit_sm_resp **和** query_sm **命令中预期的message_id格式。然后,您需要以适当的形式将query_sm命令转换为message_id。 也有可能,在编码message_id时,它是作为字符串而不是数字发送的。这种情况下,您需要使用pack()来正确编码message_id。 – 2013-05-08 13:41:27

回答

1

SMSC在哪个SMPP模式下工作? 我的猜测是 - 如果SMSC没有在&转发模式下运行,那么它在发送消息后可能无法保持消息的状态。 在这种情况下,即使将消息发送给MS,也可能在查询SMSC时发生错误。

+0

我怀疑是这样。 SMSC在查询发送的SMS时确实返回错误。 SMPP版本是3.3 – 2013-09-11 08:33:08