序章
明らかに、ここにはドキュメントがありません。残念ながら、$soapClient->__getTypes()
多くは語られません。Web サービスでサポートされている使用可能な複合型のみが表示されますが、それらの間の関係は表示されません。によって返される入力と出力の型を持つすべての使用可能な操作のリストを持っていても$soapClient->__getFunctions()
、複雑な型の正確な性質を知らなくても、または何らかのドキュメントがなくても続行できるという保証はありません。しかし幸いなことに、これは WSDL ドキュメントを提供する SOAP ベースの Web サービスです。WSDL ドキュメントには、サポートされているすべての操作と複合型、およびそれらの関係が記述されています。したがって、WSDL ドキュメントを調べるだけで、サービスの使用方法を理解できます。
WSDL ドキュメントを調べるには、次の 2 つの方法があります。
- WSDL ドキュメントから成果物 (クライアント クラス) を生成し、成果物を調べる
- WSDL ドキュメントと XML スキーマ ドキュメントに目を通してください。
1.アーティファクト
アーティファクトは、Java や C# などの強力な型付き言語によって提供されるツールによって生成できます。https://qa-api.ukmail.com/Services/UKMAuthenticationServices/ページでは、svcutil.exe
ツールを使用して C# プログラミング言語のアーティファクトを生成することを提案しています。または、このツールを使用して Java プログラミング言語のアーティファクトを生成することもできますwsimport
。PHP プログラミング言語のアーティファクトを生成するための優れたツールがあるとは思えません。
2. WSDL ドキュメントと XML スキーマ
C# や Java に慣れていない場合は、WSDL ドキュメントと XML スキーマを調べることで、いつでも WSDL ドキュメントを調べることができます。XML スキーマは、WSDL ドキュメントに含めることも、外部ファイルからインポートすることもできます。WSDL ドキュメントは Web サービスで実行できる操作を記述しますが、XML スキーマは複合型とそれらの関係を記述します。
アクション
あなたが自分でそれを行う方法を知っているように、私は導入部を書きました. 以下に、その例を示したいと思います。WSDL ドキュメントを調べる目的で、私は両方の方法を使用しました。wsimport
最初にツールを使用してアーティファクトを生成し、次に大量の XML を読み取りました。
このサービスの WSDL ドキュメントは、import
ステートメントを使用していくつかのファイルに分割されています。したがって、すべての操作と複合型を見つけるには、次のimport
ステートメントに従う必要があります。
認証
認証サービスの WSDL ドキュメント ( location ) を見ると、別の WSDL ドキュメントをインポートしていることがわかります。
<wsdl:import namespace="http://tempuri.org/" location="https://qa-api.ukmail.com/Services/UKMAuthenticationServices/UKMAuthenticationService.svc?wsdl=wsdl1"/>
後者 ( location ) は、別のものをインポートします。
<wsdl:import namespace="http://www.UKMail.com/Services/Contracts/ServiceContracts" location="https://qa-api.ukmail.com/Services/UKMAuthenticationServices/UKMAuthenticationService.svc?wsdl=wsdl0"/>
最後のもの ( location ) は、関連するすべての XML スキーマをインポートします。
<wsdl:types>
<xsd:schema targetNamespace="http://www.UKMail.com/Services/Contracts/ServiceContracts/Imports">
<xsd:import schemaLocation="https://qa-api.ukmail.com/Services/UKMAuthenticationServices/UKMAuthenticationService.svc?xsd=xsd0" namespace="http://www.UKMail.com/Services/Contracts/ServiceContracts"/>
<xsd:import schemaLocation="https://qa-api.ukmail.com/Services/UKMAuthenticationServices/UKMAuthenticationService.svc?xsd=xsd1" namespace="http://schemas.microsoft.com/2003/10/Serialization/"/>
<xsd:import schemaLocation="https://qa-api.ukmail.com/Services/UKMAuthenticationServices/UKMAuthenticationService.svc?xsd=xsd2" namespace="http://www.UKMail.com/Services/Contracts/DataContracts"/>
<xsd:import schemaLocation="https://qa-api.ukmail.com/Services/UKMAuthenticationServices/UKMAuthenticationService.svc?xsd=xsd3" namespace="http://schemas.datacontract.org/2004/07/UKMWebAPICommon.WebResponses"/>
</xsd:schema>
</wsdl:types>
また、次の呼び出しで表示できる操作についても説明します$soapClient->__getFunctions()
。
Array
(
[0] => LoginResponse Login(Login $parameters)
[1] => LogoutResponse Logout(Logout $parameters)
)
ここで、操作が引数としてtypeをLogin()
受け入れ、 type の応答を返すことがわかります。WSDL ドキュメントでは次のようになります。$parameters
Login
LoginResponse
<wsdl:operation name="Login">
<wsdl:input wsaw:Action="http://www.UKMail.com/Services/IUKMAuthenticationService/Login" message="tns:IUKMAuthenticationService_Login_InputMessage"/>
<wsdl:output wsaw:Action="http://www.UKMail.com/Services/Contracts/ServiceContracts/IUKMAuthenticationService/LoginResponse" message="tns:IUKMAuthenticationService_Login_OutputMessage"/>
</wsdl:operation>
Login
は複合型です。これは、インポートされた XML スキーマ ドキュメントの 1 つ ( schemaLocation )で確認できます。
<xs:element name="Login">
<xs:complexType>
<xs:sequence>
<xs:element xmlns:q1="http://www.UKMail.com/Services/Contracts/DataContracts" minOccurs="0" name="loginWebRequest" nillable="true" type="q1:LoginWebRequest"/>
</xs:sequence>
</xs:complexType>
</xs:element>
これには、別のインポートされた XML スキーマで記述されている、loginWebRequest
呼び出された複合型でもあるという名前の要素があります。LoginWebRequest
<xs:complexType name="LoginWebRequest">
<xs:sequence>
<xs:element name="Password" nillable="true" type="xs:string"/>
<xs:element name="Username" nillable="true" type="xs:string"/>
</xs:sequence>
</xs:complexType>
LoginWebRequest
はより簡単です。2 つの単純な型Username
とPassword
type がありString
ます。
PHP では、複合型は のオブジェクトで表されますstdClass
。したがって、Login()
操作を呼び出すには、2 つのオブジェクトLogin
とを作成する必要がありLoginWebRequest
ます。
$LoginWebRequest = new stdClass();
$LoginWebRequest->Username = 'Username';
$LoginWebRequest->Password = 'p@$$w0rd';
$Login = new stdClass();
$Login->loginWebRequest = $LoginWebRequest;
$soapClient = new SoapClient('https://qa-api.ukmail.com/Services/UKMAuthenticationServices/UKMAuthenticationService.svc?wsdl');
$LoginResponse = $soapClient->Login($Login);
これにより、 type の結果が得られますLoginResponse
。
<xs:element name="LoginResponse">
<xs:complexType>
<xs:sequence>
<xs:element xmlns:q2="http://www.UKMail.com/Services/Contracts/DataContracts" minOccurs="0" name="LoginResult" nillable="true" type="q2:UKMLoginResponse"/>
</xs:sequence>
</xs:complexType>
</xs:element>
という名前の要素が含まれLoginResult
ており、タイプは次のUKMLoginResponse
とおりです。
<xs:complexType name="UKMLoginResponse">
<xs:complexContent mixed="false">
<xs:extension base="tns:UKMWebResponse">
<xs:sequence>
<xs:element minOccurs="0" name="Accounts" nillable="true" type="tns:ArrayOfAccountWebModel"/>
<xs:element name="AuthenticationToken" nillable="true" type="xs:string"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
UKMLoginResponse
Accounts
typeArrayOfAccountWebModel
とAuthenticationToken
typeの独自の 2 つの要素と、 type 、type 、および type の (ステートメントに注意してください)からString
継承された 3 つの要素があります。UKMWebResponse
extension
Errors
ArrayOfUKMWebError
Warnings
ArrayOfUKMWebWarning
Result
UKMResultState
<xs:complexType name="UKMWebResponse">
<xs:sequence>
<xs:element minOccurs="0" name="Errors" nillable="true" type="tns:ArrayOfUKMWebError"/>
<xs:element xmlns:q1="http://schemas.datacontract.org/2004/07/UKMWebAPICommon.WebResponses" name="Result" type="q1:UKMResultState"/>
<xs:element minOccurs="0" name="Warnings" nillable="true" type="tns:ArrayOfUKMWebWarning"/>
</xs:sequence>
</xs:complexType>
ツールによって生成されたアーティファクトでは、wsimport
次のようになります。
public class UKMLoginResponse extends UKMWebResponse { ... }
したがって、 から認証トークンを取得するにLoginResponse
は、次の手順を実行します。
$LoginResponse = $soapClient->Login($Login);
$AuthenticationToken = $LoginResponse->LoginResult->AuthenticationToken;
メソッドの呼び出し
上記と非常に似ているため、ここではあまり具体的に説明しません。
AddDomesticConsignment()
例として、メソッドを呼び出してみましょう。Consignment Service の WSDL ドキュメントとメソッドによって返される結果によると、 type の引数を 1 つ取り$soapClient->__getFunctions()
、typeの結果を返します。複合型を分析すると、それ自体が extendsを拡張するtypeという名前の要素があることがわかります。以下は、タイプのすべての要素のリストです。AddDomesticConsignment()
$parameters
AddDomesticConsignment
AddDomesticConsignmentResponse
AddDomesticConsignment
request
AddDomesticConsignmentWebRequest
AddConsignmentWebRequest
WebRequest
AddDomesticConsignmentWebRequest
// AddDomesticConsignmentWebRequest's own elements
boolean BookIn
decimal CODAmount
string ConfirmationEmail
string ConfirmationTelephone
boolean ExchangeOnDelivery
int ExtendedCover
boolean LongLength
PreDeliveryNotificationType PreDeliveryNotification
string SecureLocation1
string SecureLocation2
boolean SignatureOptional
// elements inhereted from AddConsignmentWebRequest
string AccountNumber
AddressWebModel Address
string AlternativeRef
string BusinessName
string CollectionJobNumber
boolean ConfirmationOfDelivery
string ContactName
string CustomersRef
string Email
int Items
int ServiceKey
string SpecialInstructions1
string SpecialInstructions2
string Telephone
decimal Weight
// elements inhereted from WebRequest
string Username
string AuthenticationToken
すべての要素が必須ではないことに注意してください。オプションのものには、XML スキーマでminOccurs
属性が設定されています。0
<xs:element minOccurs="0" name="PreDeliveryNotification" type="tns:PreDeliveryNotificationType"/>
したがって、最終的には次のようにメソッドを呼び出します。
$AddDomesticConsignmentWebRequest = new stdClass();
$AddDomesticConsignmentWebRequest->Username = 'Username';
// setting the Authentication Token from the previous step
$AddDomesticConsignmentWebRequest->AuthenticationToken = $AuthenticationToken;
// other properties are set here...
$AddDomesticConsignment = new stdClass();
$AddDomesticConsignment->request = $AddDomesticConsignmentWebRequest;
$soapClient = new SoapClient('https://qa-api.ukmail.com/Services/UKMConsignmentServices/UKMConsignmentService.svc?wsdl');
$AddDomesticConsignmentResponse = $soapClient->AddDomesticConsignment($AddDomesticConsignment);
XML スキーマ ドキュメントの定義に従ってAddDomesticConsignmentResponse
を解析しました。LoginResponse
まぁ、これに尽きると思います。自分で試したことはありませんが、理論的にはうまくいくはずです。お役に立てれば。
アップデート
ドキュメント追跡によると、委託は次のように簡単に行う必要があります。
// create the SOAP client
$soapClient = new SoapClient('http://web-service/?wsdl');
// call the `ConsignmentTrackingSearchV1` method and pass the search parameters
$ConsignmentTrackingSearchV1Response = $soapClient->ConsignmentTrackingSearchV1(
'mail.com', // Username
'123', // Password
'', // Token
'01161', // ConsignmentNumber
'false', // IsPartialConsignmentNumber
'', // CustomerReference
'false' // IsPartialCustomerReference
'', // DeliveryPostCode
'', // MailingID
100 // MaxResults
);
// parse the response
$ConsignmentTrackingSearchV1Result = $ConsignmentTrackingSearchV1Response->ConsignmentTrackingSearchV1Result;
$ResultState = $ConsignmentTrackingSearchV1Result->ResultState; // Successful
$ConsignmentResults = $ConsignmentTrackingSearchV1Result->ConsignmentResults;
// loop through the `ConsignmentResults`
foreach ($ConsignmentResults as $ConsignmentSearchResult) {
$ConsignmentNumber = $ConsignmentSearchResult->ConsignmentNumber;
$ConsignmentStatus = $ConsignmentSearchResult->ConsignmentStatus;
// other properties
}
それでおしまい!