我们使用了现成的应用程序,该应用程序能够通过SOAP调用发送SMS消息,但是用户需要提供实际的SMS发送服务。
我编写了以下简单的Perl脚本(用于测试),该脚本可以工作(即成功接收到SMS消息),但是客户端始终抱怨SMS没有发送。我在想这是因为我没有发送SOAP响应。
我的问题是如何发送SOAP响应?
谢谢
Integer
EDIT1:
我已经根据您的回答修改了脚本,但是当我发出“返回”命令时,在/var/log/httpd/access.log中总是出现错误500。错误500只是:
#!/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);
}
我使用SOAP :: WSDL的wsdl2perl创建了perl模块。脚本现在看起来像:
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)"
答案 0 :(得分:2)
在以下URL上查看SOAP :: Server文档中的“示例”部分。
https://metacpan.org/pod/SOAP::Server
请注意,处理程序中的最后一条语句返回SOAP :: Data,但示例中似乎存在一个小错误:该方法应为new(),而不是name()。
本质上,您需要将响应构造为SOAP :: Data对象,然后将其返回()。希望您已经知道响应的结构,因为我不能帮助您!
答案 1 :(得分:0)
我需要更多地了解图书馆,才能提供一个“好的”答案,但是,请注意:
#!/usr/bin/perl use SOAP::Transport::HTTP;
SOAP::Transport::HTTP::CGI
->dispatch_to('C2FService')
->handle; BEGIN { package C2FService;
use vars qw(@ISA);
@ISA = qw(Exporter SOAP::Server::Parameters);
use SOAP::Lite;
sub c2f {
my $self = shift;
my $envelope = pop;
my $temp = $envelope->dataof("//c2f/temperature");
return SOAP::Data->name('convertedTemp' => (((9/5)*($temp->value)) + 32)); } }
看看return
,它以SOAP
开头,因此提供了(如果我没记错的话,是有效的信封。对于我来说,SOAP::Lite
以来已经有一段时间了,但是我确实记住使用https://www.soapui.org/可以大大帮助测试过程。