Мы используем готовое приложение, которое способно отправлять SMS-сообщения через вызовы SOAP, но пользователю необходимо предоставить реальную услугу отправки SMS-сообщений.
Я написал следующий простой скрипт на Perl (для тестирования), который работает (т.е. SMS-сообщение успешно получено), но клиент всегда жалуется, что SMS-сообщение не отправлено.Я думаю, это потому, что я не отправляю SOAP-ответ.
Мой вопрос: как мне отправить SOAP-ответ?
Спасибо
#!/usr/bin/perl
use strict;
use warnings;
use SOAP::Transport::HTTP;
use Data::Dumper;
use lib '/tmp/';
SOAP::Transport::HTTP::CGI
-> dispatch_to('Vendor::Telephony')
-> handle();
package Vendor::Telephony;
sub SMS {
my $name = shift;
my $data = shift;
my $message = $data->{'SMSMessage'};
my $number = $data->{'SMSNumber'};
open(SMS, " | sendmail -r alerts\@example.com $number\@sms.provider.com 2> /dev/null");
print SMS $message;
close(SMS);
}
EDIT1: Я изменил свой сценарий на основе вашего ответа, но всегда получаю ошибку 500 в /var/log/httpd/access.log при выдаче 'return'.Ошибка 500 просто:
172.23.34.18 - - [14/Apr/2019:09:24:16 +0800] "POST /cgi-bin/soap.cgi
HTTP/1.1" 500 1806 "-" "Mozilla/4.0 (compatible; MSIE 6.0; MS Web
Services Client Protocol 4.0.30319.42000)"
Я использовал wsdl2perl SOAP :: WSDL для создания модулей perl.Сценарий теперь выглядит так:
#!/usr/bin/perl
use SOAP::Transport::HTTP;
use lib '/tmp/lib';
use Data::Dumper;
SOAP::Transport::HTTP::CGI
->dispatch_to('Vendor::Telephony')
->handle;
BEGIN {
package Vendor::Telephony;
use vars qw(@ISA);
use MyElements::SMSResponse;
@ISA = qw(Exporter SOAP::Server::Parameters);
use SOAP::Lite;
sub SMS {
my ($self, $body, $header) = @_;
my $message = $body->{'SMSMessage'};
my $number = $body->{'SMSNumber'};
open(SMS, " | sendmail -r alerts\@example.com $number\@sms.provider.com 2> /dev/null");
print SMS $message;
close(SMS);
return MyElements::SMSResponse->new({Status => 0});
}
}