2

私は次のコードを使用します:

<?php
include ('class.doLogin.php');  
// xml content
$xmlDocument = '<SOAP-ENV:Body>
        <mns1:doLogin xmlns:mns1="http://sphinx.dat.de/services/Authentication">
            <request>
                <customerLogin>1323863</customerLogin>
                <customerNumber>teltfran</customerNumber>
                <customerSignature>akEwRUF3TUNWeXFwazRLZlNzS3p5VE5NL3BQaXJpc1FiWW1OM0lEdGlCdjBNVmJ2RCtCSC9ma0laSEIxR3RWdQ0Kc1VHeVY3VnFTRCtiRVI1aXRhbFFoVTBaVGFNPQ0KPU1VUjg=</customerSignature>
                <interfacePartnerNumber>1323863</interfacePartnerNumber>
                <interfacePartnerSignature>jA0EAwMCoHVabOFMT5lgySuK+MYbVQs2qPAgq/QI3TpiuR3raZMh710KRctv2aPd31LmjBiWaM0WDQl0</interfacePartnerSignature>
            </request>
        </mns1:doLogin>
    </SOAP-ENV:Body>';

ini_set("soap.wsdl_cache_enabled", "0");
$client = new SoapClient(
            "http://www.dat.de:80/DATECodeSelection/services/Authentication?wsdl",
            array(
                'trace' => 1,
                'exceptions' => 1,
                'soap_version' => SOAP_1_1,
                'encoding' => 'ISO-8859-1',
                'features' => SOAP_SINGLE_ELEMENT_ARRAYS
            )
);



$xmlvar = new SoapVar(
            '<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:wsp="http://www.w3.org/ns/ws-policy" xmlns:wsp1_2="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://sphinx.dat.de/services/Authentication" xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >'.$xmlDocument.'</SOAP-ENV:Envelope>',
            XSD_ANYXML
);

$doLogin = new doLogin();
$doLogin->request[0] = new doLoginRequest();
$doLogin->request[0]->customerLogin = "1323863";
$doLogin->request[1]->customerNumber = "teltfran";
$doLogin->request[2]->customerSignature = "akEwRUF3TUNWeXFwazRLZlNzS3p5VE5NL3BQaXJpc1FiWW1OM0lEdGlCdjBNVmJ2RCtCSC9ma0laSEIxR3RWdQ0Kc1VHeVY3VnFTRCtiRVI1aXRhbFFoVTBaVGFNPQ0KPU1VUjg";
$doLogin->request[3]->interfacePartnerNumber = "1323863";
$doLogin->request[4]->interfacePartnerSignature = "jA0EAwMCoHVabOFMT5lgySuK+MYbVQs2qPAgq/QI3TpiuR3raZMh710KRctv2aPd31LmjBiWaM0WDQl0";



try {
    $params->xmlDocument = (object)$xmlvar;
    //$save_result = $client->doLogin($params);
    $client->doLogin($doLogin);
    echo "<pre>\n\n";
    echo "Result :\n";
    echo "</pre>";
} catch (SoapFault $e) {
    echo "SOAP Fault: ".$e->getMessage()."<br />\n";
}

?>

class.doLogin.php のコード

<?php
class doLoginRequest{
    public $customerLogin;
    public $customerNumber;
    public $customerSignature;
    public $interfacePartnerNumber;
    public $interfacePartnerSignature;
}

class doLogin{
    /* array<doLoginRequest> */
   public $request;


}
?>

しかし、エラーが発生します: SOAP エラー: SOAP-ERROR: エンコーディング: オブジェクトに 'customerLogin' プロパティがありません - どこに問題がありますか? どうすればエラーを修正できますか? 可能であれば、どこが間違っているか教えてください。

ありがとう

4

1 に答える 1

0

サンプルコードを使用して行ったテストに基づいて、承認が失敗したことを示す AuthorizationException も取得します。

これにより、使用しているログインの詳細が原因であると思われます。そうでない場合、リクエストが不正な形式である場合、まったく異なるエラーが発生します。たとえば、次のようになります。

SOAP-ERROR: Encoding: object has no 'request' property

また

SOAP-ERROR: Encoding: object has no 'customerLogin' property

ただし、すべての必須フィールドを提供する場合、つまり

$client = new SoapClient('http://www.dat.de:80/DATECodeSelection/services/Authentication?wsdl');

$tmp = new stdClass();
$tmp->request = new stdClass();
$tmp->request->customerLogin = 1323863;
$tmp->request->customerNumber = 'teltfran';
$tmp->request->customerSignature = 'akEwRUF3TUNWeXFwazRLZlNzS3p5VE5NL3BQaXJpc1FiWW1OM0lEdGlCdjBNVmJ2RCtCSC9ma0laSEIxR3RWdQ0Kc1VHeVY3VnFTRCtiRVI1aXRhbFFoVTBaVGFNPQ0KPU1VUjg';
$tmp->request->interfacePartnerNumber = 1323863;
$tmp->request->interfacePartnerSignature = 'jA0EAwMCoHVabOFMT5lgySuK+MYbVQs2qPAgq/QI3TpiuR3raZMh710KRctv2aPd31LmjBiWaM0WDQl0';

try {
    var_dump($client->doLogin($tmp));
} catch (SoapFault $e) {
    var_dump($e);
}

AuthorizationFailed 例外が発生するだけです。de.dat.sphinx.global.exception.AuthorizationException: Authorization failed

www.dat.de で資格情報が正しいことを確認する価値があるかもしれません。

于 2013-10-15T08:23:23.737 に答える