Hướng dẫn dùng soap request trong PHP

Theo kinh nghiệm của tôi, nó không hoàn toàn đơn giản. Ứng dụng khách PHP SOAP tích hợp sẵn không hoạt động với máy chủ SOAP dựa trên .NET mà chúng tôi phải sử dụng. Nó phàn nàn về một định nghĩa lược đồ không hợp lệ. Mặc dù ứng dụng khách .NET đã hoạt động tốt với máy chủ đó. Nhân tiện, hãy để tôi khẳng định rằng khả năng tương tác SOAP là một huyền thoại.

Bước tiếp theo là NuSOAP . Điều này đã hoạt động trong một thời gian. Nhân tiện, vì Chúa, đừng quên cache WSDL! Nhưng ngay cả với WSDL, người dùng đã phàn nàn rằng điều này rất chậm.

Sau đó, chúng tôi quyết định sử dụng HTTP trần, tập hợp các yêu cầu và đọc các phản hồi với SimpleXMLElemnt, như sau:

$request_info = array();

$full_response = @http_post_data(
    'http://example.com/OTA_WS.asmx',
    $REQUEST_BODY,
    array(
        'headers' => array(
            'Content-Type' => 'text/xml; charset=UTF-8',
            'SOAPAction'   => 'HotelAvail',
        ),
        'timeout' => 60,

    ),
    $request_info
);

$response_xml = new SimpleXMLElement(strstr($full_response, '<?xml'));

foreach ($response_xml->xpath('//@HotelName') as $HotelName) {
    echo strval($HotelName) . "\n";
}

Lưu ý rằng trong PHP 5.2, bạn sẽ cần pecl_http, vì (bất ngờ-surpise!) Không có ứng dụng HTTP nào được tích hợp sẵn.

Việc chuyển sang sử dụng HTTP thô đã giúp chúng tôi tăng hơn 30% trong số lần yêu cầu SOAP. Và từ đó trở đi, chúng tôi chuyển hướng tất cả các phàn nàn về hiệu suất đến máy chủ.

Cuối cùng, tôi khuyên bạn nên sử dụng phương pháp thứ hai này, không phải vì hiệu suất. Tôi nghĩ rằng, nói chung, trong một ngôn ngữ động như PHP, không có lợi ích nào từ tất cả WSDL / type-control đó. Bạn không cần một thư viện ưa thích để đọc và viết XML, với tất cả những gì tạo sơ khai và proxy động. Ngôn ngữ của bạn đã linh hoạt, SimpleXMLElementhoạt động tốt và rất dễ sử dụng. Ngoài ra, bạn sẽ có ít mã hơn , điều này luôn tốt.

48 hữu ích 1 bình luận chia sẻ

php