| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Perl: Системное программирование > Вопрос по модулю Net::SMPP |
| Автор: gammaray 12.8.2006, 14:16 |
| Всем привет! Есть здесь люди, которые знакомы с модулем Net::SMPP для Perl? Есть пара вопросов по этому модулю... Вообщем нужно написать программу SMPP-клиент, который будет слать смс, проверять их доставку, выводить статистику в файл и т.д. Так я подкючаюсь к SMSC(понятно, что все параметры подключения выдуманы): ($smpp,$err) = Net::SMPP->new_transmitter( "192.168.100.100", port=>"9999 9", system_id =>"System_Id", password => "System_Password", system_type=>"System_Type" ) or die; print"Connect-transmitter. Status=",$err->{status},"*\n"; Подключение проходит нормально! Дальше отсылаю тестовую смс(параметры опять выдуманы): $resp = $smpp_t->submit_sm( source_addr_ton => 0x01, source_addr_npi => 0x00, source_addr => "9999 9", dest_addr_ton => 0x01, dest_addr_npi => 0x01, destination_addr => "1234 5678 9", data_coding => 0x04, short_message=> "tstmsg", esm_class => 0x00, ); Смс успешно доходит! Так вот.. Суть проблемы в следубщем: как проверить с помощью Net::SMPP доставку этого сообщения? Пишу, как описано в документации к Net:SMMP на CPAN http://search.cpan.org/~sampo/Net-SMPP-1.10/SMPP.pm $resp_pdu = $smpp->query_sm(message_id => $msg_id) or die; die "Response indicated error: " . $resp_pdu->explain_status() if $resp_pdu->status; При таком кодепрограмма вылетает на самой первой строке с сообщением Can"t call method "query_sm" on an undefined value! Смотрел в Watch, что находится в message_id => $msg_id... Там массив с 2 элементами: тип scalar со значением message_id и 2 элемент null! Я уже не знаю, как делать! Все методы перепробовал! А к тому же при тесте программы всё время приходится слать смс, а это денег стоит! Кто-нибудь проверял доставку сообщения? Как это сделать? Очень нужна помощь! Заранее спасибо! |
| Автор: gammaray 13.8.2006, 01:22 |
| Всё, спасибо, предыдущая проблема отпала! Но зато теперь такая встала... Вот отрывок теста моей программы... #!/usr/bin/perl use Net::SMPP; sender(); print "Press <Enter> to continue..."; <STDIN>; sub sender { ($smpp_tr,$err) = Net::SMPP->new_transmitter( "server.ru", port=>"2222", system_id =>'login', password => 'password', ) or die; print"Connect-transmitter. Status=",$err->{status},"*\n"; $resp = $smpp_tr->submit_sm( source_addr_ton => 0x01, source_addr_npi => 0x00, source_addr => '99999', dest_addr_ton => 0x01, dest_addr_npi => 0x01, destination_addr => '123456789', data_coding => 0x04, short_message=> 'tstmsg ', esm_class => 0x00, ) or die; $msg_id = $resp->{message_id}; $resp = $smpp_tr->query_sm(message_id => $msg_id) or die; die "Response indicated error: " . $resp->explain_status() if $resp->status; $resp = $smpp_tr->unbind(); } Всё работает верно вплоть до строки проверки досатвки $resp = $smpp_tr->query_sm(message_id => $msg_id) or die; На ней прога виснет! Сидел думал много часов, но ничего не помогало! Потом просто догадался снифером посмотреть, а что собственно программа шлёт? И вот на что наткнулся(запросы по протоколу SMPP по порядку): SMPP Bind_transmitter SMPP Bind_transmitter - resp: "OK" SMPP Submit_sm SMPP Submit_sm - resp: "OK" Здесь, как видно, всё ок! А вот дальше... SMPP Query_sm SMPP Generic_nack: "Invalid command ID"(!!!) Как такое возможно??? Ведь даже снифер показывает, что идёт запрос SMPP Query_sm! Может кто знает, в чём дело? Да кстати в запросе SMPP Query_sm в поле Operation(что и есть command ID) стоит Query_sm(0x00000003)! Кто-нибудь знает, у query_sm такой command_id или нет? |