こんにちは。
PHPでガルーンのSOAP APIを利用するウェブサイト(MediaWiki)を作っています。
WS-Securityでは問題なく動作していますが、Cookieを使用するとうまくいきません。
具体的にPHPのSoapClientの__setCookie()を使うと「Bad request」という例外が出てきました。
PHPコードはざっとこんな感じです。
class GaroonHooks {
public static function GaroonLogin( $user, $password ) {
$garoonSoapClient = new CybozuGaroonAPI( '', '' );
try {
$results = $garoonSoapClient->UtilLogin( $user, $password );
} catch ( SoapFault $fault ) {
$_SESSION['GAROON_LOGIN'] = false;
return;
}
$_SESSION['GAROON_LOGIN'] = true;
GaroonHooks::SaveCookieToSession( $results->cookie );
}
public static function GaroonRender( $parser, $frame, $args ) {
$garoonSoapClient = new CybozuGaroonAPI( '', '' );
GaroonHooks::SetCookieToClient( $garoonSoapClient );
try {
$userId = $garoonSoapClient->UtilGetLoginUserId();
} catch ( SoapFault $fault ) {
//return $fault;
}
return $userId;
}
private static function SaveCookieToSession( $cookie ) {
if ( isset( $_SESSION ) ) {
$cookie = preg_replace( '/CBSESSID=/', '', $cookie );
$cookie = preg_replace( '/ path=\//', '', $cookie );
$_SESSION['GAROON_CBSESSID'] = $cookie ;
}
}
private static function SetCookieToClient( &$garoonSoapClient ) {
if ( isset( $_SESSION ) && array_key_exists( 'GAROON_CBSESSID', $_SESSION ) ) {
$garoonSoapClient->__setCookie( 'CBSESSID', $_SESSION['GAROON_CBSESSID'] );
}
}
}
__getLastRequest()では下記のようなリクエストが出ています。
<?xml version=“1.0” encoding=“UTF-8”?>
<env:Envelope xmlns:env=“http://www.w3.org/2003/05/soap-envelope” xmlns:ns1=“http://wsdl.cybozu.co.jp/util_api/2008” xmlns:ns2=“dummyNameSpace”>
env:Header
<Action xmlns=“http://schemas.xmlsoap.org/ws/2003/03/addressing”>
UtilGetLoginUserId
</Action>
<Security xmlns:wsu=“http://schemas.xmlsoap.org/ws/2002/12/secext”>
<UsernameToken>
<Username></Username>
<Password></Password>
</UsernameToken>
</Security>
<Timestamp>
<Created>2014-10-20T06:17:50+00:00</Created>
<Expires>2014-10-22T06:17:50+00:00</Expires>
</Timestamp>
<Locale>
jp;
</Locale>
/env:Header
env:Body
ns1:UtilGetLoginUserId
<parameters/>
/ns1:UtilGetLoginUserId
/env:Body
/env:Envelope
不思議なことに__setCookie()しなければちゃんと「ログインできません」というレスポンスが返ってきます。
Cookieのセット方法が間違っているでしょうか。
よろしくお願いします。