0

-Action specified in EbxmlMessage does not exist のようなエラー文字列コードが表示されます

私が欠けているものを誰かが助けてくれますか。

$OTA_HotelAvailRQ = new stdClass;
$OTA_HotelAvailRQ->AvailRequestSegment = new stdClass;
$OTA_HotelAvailRQ->AvailRequestSegment->ReturnHostCommand = true;
$OTA_HotelAvailRQ->AvailRequestSegment->TimeStamp = '2015-11-12T11:22:06';
$OTA_HotelAvailRQ->AvailRequestSegment->Version = '2.2.1';

$client = new SoapClient("http://webservices.sabre.com/wsdl/tpfc/OTA_HotelAvailLLS2.2.1RQ.wsdl", [
      "trace"      => 1,        
      "exceptions" => 0,        
      "cache_wsdl" => 0
]);

$client->__setSoapHeaders(new SoapHeader('NAMESPACE','Auth', [
    'UserName'=>'',
    'Password'=>'',
    'SystemId'=> [
        '_'=>'DATA',
        'Param'=>'PARAM'
    ]
], false)); 

print_r( $client->OTA_HotelAvailRQ($OTA_HotelAvailRQ));
echo "<p>Request :".htmlspecialchars($client->__getLastRequest()) ."</p>";
echo "<p>Response:".htmlspecialchars($client->__getLastResponse())."</p>"; 
4

1 に答える 1

1

MessageHeader を使用しているアクションがわかりませんが、正しいものは OTA_HotelAvailRQ ではなく OTA_HotelAvail LLS RQです


編集:

ユーザー名は、新しいセッションを取得するために SessionCreate でのみ使用する必要があることから始めましょう。それ以降は、返された BinarySecurityToken を使用する必要があります。これは、セッションが期限切れになるか、SessionClose で閉じられるまで、同じ環境で有効です。変数 $bst にそれがあると想像してみましょう。

以下で行ったことはテストできるものではないため、何か問題がある可能性があります。さらに、私のphpの知識は非常に限られています(覚えておいてください):)

したがって、SOAP ヘッダーには、messageHeader と Security という 2 つの主要な要素が必要です。セキュリティは最も単純なものであり、それから始めましょう。

安全:

$auth = array(
    'BinarySecurityToken'=>$bst
);
$authHeader = new SoapHeader('http://schemas.xmlsoap.org/ws/2002/12/secext','Security',$auth,false);

メッセージヘッダー:

$partyId=array(
    'PartyId'=>''
);

$messageData=array(
    'Timestamp'=>date('Y-m-d')
);

$messageHeader=array(
    'ConversationId'=>'',
    'From'=>$partyId,
    'To'=>$partyId,
    'CPAId'=>'',
    'Service'=>'OTA_HotelAvailLLSRQ',
    'Action'=>'OTA_HotelAvailLLSRQ',
    'MessageData'=>$messageData
);

$messageHeaderHeader = new SoapHeader('http://www.ebxml.org/namespaces/messageHeader','MessageHeader',$messageHeader,false);

最後にそれらを結合して設定します:

$headers=array();
$headers[]=$authHeader;
$headers[]=$messageHeaderHeader;

$soap_client->__setSoapHeaders($headers);
于 2016-02-10T14:31:36.080 に答える