私はDelcampe APIに基づいてsoap-clientを書きます。単純なメソッドはうまくいきますが、複雑なデータを必要とする関数は、 "アイテムのデータを送信する必要があります!"というエラーメッセージを表示します。 PHPの例hereに基づいて、データはハッシュまたはハッシュリファレンスのどちらかでなければならないと思っていましたが、どちらも私に以前言及したエラーを与えます。Perl:delcampe APIにどのようなデータを供給すればよいですか?
サンプルスクリプト私が使用します。
use 5.010;
use SOAP::Lite;
use SOAP::WSDL;
use strict;
use warnings;
use Data::Dumper;
my $API_key = 'xyz';
my $service = SOAP::Lite->service('http://api.delcampe.net/soap.php?wsdl');
my $return = $service->authenticateUser($API_key);
if ($return->{status}) {
my $key = $return->{data};
my %data = (description => 'updated description');
my $response = $service->updateItem($key, 123456, \%data);
if ($response->{status}) {
say Dumper $response->{data};
} else {
say $response->{errorMsg};
}
} else {
say "no: " . $return->{status};
}
ので、データ構造のどのような私が代わりに%data
の使用すべきか、どのように私が要求として生成されるSOAPエンベロープを、デバッグするだろうか?あまりにuse SOAP::Lite qw(trace);
igotのSOAPエンベロープを有する(PHP例に基づいてコードが正常に動作し)
ADDITION
:
<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:soap-enc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://api.delcampe.net/soap.php">
<soap:Body>
<tns:updateItem>
<token xsi:type="xsd:string">secret_one</token>
<id_item xsi:type="xsd:int">123456</id_item>
<arrData xsi:nil="true" xsi:type="soap-enc:Array" />
</tns:updateItem>
</soap:Body>
</soap:Envelope>
上記から分かるように、送信されるデータのないビットが存在しません。私はstring、array、arrayrefのようなデータも試しました。多分SOAP::Lite
のバグでしょうか?
'%data'に' personal_reference'と 'title'キーを含めてみましたか? PHPの例では3つすべてが設定されており、ドキュメントはオプションであるかどうかを明確にしていません。 – cjm
@cjm、私はPHPでも説明だけを変更しようとしましたが、うまくいきました。 –
標準のHTTPデバッグ手法が適用されます。要求/応答のペアを比較するには、Wiresharkを使用します。 – daxim