我试图查询通过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是相同的。任何提示,为什么我得到这个错误?
此问题可能由ubmit_sm_resp和query_sm PDU中不同格式的消息标识符引起。例如,某些SMSC可能会使用十进制数进行响应,但quirey_sm需要十六进制数。我建议你通过设置“$ Net :: SMPP :: trace = 1”来添加日志来查看更多细节。 – 2013-04-27 09:31:11
感谢您的建议。我确实认为这可能是格式化message_id的问题。例如,submit_sm_rsp中返回的message_id类型为6b743a5d。 我连接到的SMSC我认为不回复十进制数。它用一个十六进制字符串或十六进制值来回答。 我正在将原样检索的message_id传递给query_sm PDU。 你的意思是我应该尝试将它转换为一个十六进制字符串,并将其传递给query_sm。我打开了SMPP跟踪,请求响应头和主体的流程正常无错。 – 2013-04-28 10:05:03
您应该首先检查您的SMSC提供商在** submit_sm_resp **和** query_sm **命令中预期的message_id格式。然后,您需要以适当的形式将query_sm命令转换为message_id。 也有可能,在编码message_id时,它是作为字符串而不是数字发送的。这种情况下,您需要使用pack()来正确编码message_id。 – 2013-05-08 13:41:27