我試圖查詢通過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