Có sẵn công cụ nào cho PHP có thể sử dụng để tạo mã để tiêu thụ web service dựa trên WSDL không? Một cái gì đó có thể so sánh với việc nhấp vào "Thêm tham chiếu web" trong Visual Studio hoặc plugin Eclipse thực hiện điều tương tự cho Java.Cách dễ dàng tiêu thụ dịch vụ web từ PHP
Trả lời
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.
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
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.
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.
Đ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/) –
Đ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.
HI Tôi nhận này từ trang web này: http://forums.asp.net/t/887892.aspx?Consume+an+ASP+NET+Web+Service+with+PHP
Các dịch vụ web có phương pháp Add
mà phải mất hai params:
<?php
$client = new SoapClient("http://localhost/csharp/web_service.asmx?wsdl");
print_r($client->Add(array("a" => "5", "b" =>"2")));
?>
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>
và
<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.
Bom cố gắng phân tích VMWares vimService wsdl – Tim
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) :) –