2010-03-16 27 views
7

Có nhiều câu hỏi về PHP và SOAP. Nhưng tôi không tìm thấy câu trả lời về tình hình của tôi.PHP VÀ SOAP. Thay đổi phong bì

So. Tôi sử dụng PHP SoapClient và WSDL cho nó. Object gửi này:

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://www.site.com"><SOAP-ENV:Body> 

Nhưng tôi cần điều này:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body> 

Câu hỏi. Làm thế nào tôi có thể làm điều này với tiêu chuẩn lớp PHP SoapClient?

Cảm ơn bạn.

+0

Tôi nghĩ điều đó có nghĩa là WSDL của bạn không chính xác? Bạn đã tạo phần máy chủ SOAP chưa? – Clutch

+0

Không, WSDL là chính xác, bởi vì thư viện khác (điều khiển ActiveX cho C#) hoạt động với nó tốt và gửi không gian tên đúng. Tôi không thể thay đổi SOAP-server. Tôi cần sử dụng nó để truy cập vào các chức năng dịch vụ. – Oleg

+0

Nếu bạn nghĩ rằng điều này đang gây ra một vấn đề trong giao tiếp với dịch vụ SOAP của bạn, điều này có thể là một giả định không chính xác. Lỗi của bạn có thể liên quan đến các thuộc tính bị thiếu trong thư của bạn, như đã xảy ra với tôi. – bytespider

Trả lời

5

tôi tìm kiếm câu trả lời trong php.net

<?php 
class MSSoapClient extends SoapClient { 

    function __doRequest($request, $location, $action, $version) { 
     $namespace = "http://tempuri.com"; 

     $request = preg_replace('/<ns1:(\w+)/', '<$1 xmlns="'.$namespace.'"', $request, 1); 
     $request = preg_replace('/<ns1:(\w+)/', '<$1', $request); 
     $request = str_replace(array('/ns1:', 'xmlns:ns1="'.$namespace.'"'), array('/', ''), $request); 

     // parent call 
     return parent::__doRequest($request, $location, $action, $version); 
    } 
} 

$client = new MSSoapClient(...); 
?> 

này thay đổi Envelope mã trong yêu cầu. Và cần cho máy chủ ASP SOAP.

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