現在、クラウド版 Garoonを社内に導入中の者です。
Garoon API を使用してデータを取得しようと考えているのですが、データのリプライが無く困っています。
ネットなど調べましたが、SOAP初心者の為、解決に至っておりません。
調べたところSOAP::Liteが使用できそうだったので、下記のように記述したのですがデータを取得できません。
ご存知の方、教えていただけないでしょうか?
=================================
use strict;
use SOAP::Lite + trace => 'debug';
my $wsdl = 'https://xxxxxx.cybozu.com/g/index.csp?WSDL';
my $proxy = 'https://static.cybozu.com/g/F5.2.35_4.11/api/2008/util_api.wsdl';
my $id = SOAP::Data->name('login_name' => 'xxxxxx');
my $pass = SOAP::Data->name('password' => 'xxxxxx');
my $service = SOAP::Lite->uri($wsdl)->proxy($proxy);
my $result = $service->UtilLogin($id, $pass);
if ($result->fault){
print $result->faultdetail;
}else{
$result->result;
}
debugで下記のように表示されているため、送信はできているのかと思うのですが…。
SOAP::Transport::HTTP::Client::send_receive: POST https://static.cybozu.com/g/F5.2.35_4.11/api/2008/util_api.wsdl HTTP/1.1
Accept: text/xml
Accept: multipart/*
Accept: application/soap
Content-Length: 550
Content-Type: text/xml; charset=utf-8
SOAPAction: "https://xxxxxx.cybozu.com/g/index.csp?WSDL#UtilLogin"
<?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:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">soap:Body<UtilLogin xmlns="https://xxxxxx.cybozu.com/g/index.csp?WSDL"><login_name xsi:type="xsd:string">xxxxxx</login_name><password xsi:type="xsd:string">xxxxxx</password></UtilLogin>/soap:Body/soap:Envelope
SOAP::Transport::HTTP::Client::send_receive: HTTP/1.1 200 OK
Cache-Control: max-age=315360000
Connection: close
:
:
:
4件のコメント
SOAPヘッダーにActionタグとTimestampタグが足りないのではないかと思います。
↓こちらを確認してみてください。
https://cybozudev.zendesk.com/hc/ja/articles/202228464-SOAP-API%E3%81%AE%E5%85%B1%E9%80%9A%E4%BB%95%E6%A7%98
Hiroyuki_K様、
回答ありがとうございます。
ActionタグとTimestampタグを追加してみましたが、結果は変わらずデータ取得できませんでした。
下記のメッセージをSOAP::Liteで送っているようなのですが、仕様に記載されている内容と少し違うようです。
<?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:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
soap:Header
<namesp1:Action soap:mustUnderstand="1" xmlns:namesp1="http://schemas.xmlsoap.org/ws/2003/03/addressing" xsi:type="xsd:string">UtilLogin/namesp1:Action
<namesp2:Timestamp soap:mustUnderstand="1" xmlns:namesp2="http://schemas.xmlsoap.org/ws/2002/07/utility">
<Created xsi:type="xsd:dateTime">2015-01-06T10:45:00Z</Created>
<Expires xsi:type="xsd:dateTime">2037-08-12T14:45:00Z</Expires>
/namesp2:Timestamp
/soap:Header
soap:Body
<UtilLogin xmlns="https://xxxx.cybozu.com/g/index.csp?WSDL">
<parameters>
<login_name xsi:type="xsd:string">xxxx</login_name>
<password xsi:type="xsd:string">xxxx</password>
</parameters>
</UtilLogin>
/soap:Body
/soap:Envelope
例えば、Actionタグの中身が下記に対して
<namesp1:Action soap:mustUnderstand="1" xmlns:namesp1="http://schemas.xmlsoap.org/ws/2003/03/addressing" xsi:type="xsd:string"
サンプルは
<Action SOAP-ENV:mustUnderstand="1" xmlns="http://schemas.xmlsoap.org/ws/2003/03/addressing">
です。他にも少しずつ違います。この違いでデータが取得できないのでしょうか?
こちらでもSOAP::Liteを使ってみました。
WSDLモードではないのですが、とりあえず動くことが確認できました。
Perlは使い慣れていないので、おかしなところがあるかもしれませんが、
よろしければご参考ください。
コード
実行結果
Kawamukai Naoki様、
丁寧な解説ありがとうございます。
無事データを取得することができました。
ヘッダーとリクエストはXMLで作成した方がわかりやすいですね。
これを基本に他のデータも取得してみたいと思います。
本当にありがとうございました!