2008-08-07 42 views

Trả lời

19

Tôi đã thành công lớn với wsdl2php. Nó sẽ tự động tạo các lớp bao bọc cho tất cả các đối tượng và các phương thức được sử dụng trong dịch vụ web của bạn.

+0

Bom cố gắng phân tích VMWares vimService wsdl – Tim

+0

Cập nhật: liên kết đã được thay đổi và hiện hoạt động, trỏ tới github, vì vậy người dùng đi qua không nên bỏ qua liên kết hoạt động vì nhận xét cũ (rất hữu ích, tại thời điểm) :) –

2

Vâng, các tính năng đó cụ thể cho công cụ bạn đang sử dụng để phát triển bằng các ngôn ngữ đó.

Bạn sẽ không có các công cụ đó nếu (ví dụ) bạn đang sử dụng notepad để viết mã. Vì vậy, có lẽ bạn nên đặt câu hỏi cho công cụ bạn đang sử dụng.

Đối với PHP: http://webservices.xml.com/pub/a/ws/2004/03/24/phpws.html

9

Tôi đã sử dụng NuSOAP trong quá khứ. Tôi thích nó bởi vì nó chỉ là một tập hợp các tệp PHP mà bạn có thể đưa vào. Không có gì để cài đặt trên máy chủ web và không có tùy chọn cấu hình nào để thay đổi. Nó có hỗ trợ WSDL cũng là một tiền thưởng.

85

Trong PHP 5, bạn có thể sử dụng SoapClient trên WSDL để gọi các chức năng dịch vụ web. For example:

$client = new SoapClient("some.wsdl"); 

và $ client bây giờ là đối tượng có phương thức lớp như được định nghĩa trong some.wsdl. Vì vậy, nếu có một phương pháp được gọi là getTime trong WSDL thì bạn sẽ chỉ gọi:

$result = $client->getTime(); 

Và kết quả (rõ ràng) là trong biến kết quả $. Bạn có thể sử dụng phương thức __getFunctions để trả về một danh sách tất cả các phương thức có sẵn.

+0

Điều này là tốt nhưng để bắt đầu nhanh chóng sử dụng [wsdl2php-interpreter] (https://code.google.com/p/wsdl2php-interpreter/) –

2

Điều này article giải thích cách bạn có thể sử dụng PHP SoapClient để gọi dịch vụ web api.

1

Giả sử bạn đã được cung cấp như sau:

<x:Envelope xmlns:x="http://schemas.xmlsoap.org/soap/envelope/" xmlns:int="http://thesite.com/"> 
    <x:Header/> 
    <x:Body> 
     <int:authenticateLogin> 
      <int:LoginId>12345</int:LoginId> 
     </int:authenticateLogin> 
    </x:Body> 
</x:Envelope> 

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"> 
    <s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
     <authenticateLoginResponse xmlns="http://thesite.com/"> 
      <authenticateLoginResult> 
       <RequestStatus>true</RequestStatus> 
       <UserName>003p0000006XKX3AAO</UserName> 
       <BearerToken>Abcdef1234567890</BearerToken> 
      </authenticateLoginResult> 
     </authenticateLoginResponse> 
    </s:Body> 
</s:Envelope> 

Hãy nói rằng việc tiếp cận http://thesite.com/ nói rằng địa chỉ WSDL là: http://thesite.com/PortalIntegratorService.svc?wsdl

$client = new SoapClient('http://thesite.com/PortalIntegratorService.svc?wsdl'); 
$result = $client->authenticateLogin(array('LoginId' => 12345)); 
if (!empty($result->authenticateLoginResult->RequestStatus) 
    && !empty($result->authenticateLoginResult->UserName)) { 
    echo 'The username is: '.$result->authenticateLoginResult->UserName; 
} 

Như bạn có thể thấy, các mặt hàng được quy định trong XML được sử dụng trong mã PHP mặc dù giá trị loginId thể thay đổi.

Các vấn đề liên quan