2010-03-16 19 views
7

PHP ve SOAP ile ilgili birçok soru var. Ama durumumda cevap bulamadım.PHP VE SOAP. Zarfı değiştir

So. Bunun için PHP SoapClient ve WSDL kullanıyorum. Nesne bu gönderir:

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

Ama bu gerekir:

<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> 

Question. Bunu standart PHP sınıfı SoapClient ile nasıl yapabilirim?

Teşekkür ederiz.

+0

Bu, WSDL'nizin yanlış olduğu anlamına mı geliyor? SOAP sunucu parçasını da oluşturdunuz mu? – Clutch

+0

Hayır, WSDL doğrudur, çünkü diğer kütüphane (C# için ActiveX denetimi) iyi çalışır ve gerçek ad alanı gönderir. SOAP sunucusunu değiştiremiyorum. Servis işlevlerine erişmek için kullanmam gerek. – Oleg

+0

Bunun SOAP hizmetinizle iletişimde bir sorun olduğunu düşünüyorsanız, bu yanlış bir varsayım olabilir. Hatanız, başınıza geldiği gibi, iletinizdeki eksik özellikler ile ilgili olabilir. – bytespider

cevap

5

Ben 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(...); 
?> 

istekte Bu kod değişimi Zarf içinde cevap arayın. ASP SOAP sunucusuna ihtiyaç var.