Pergunta

Eu tenho trabalhado em um roteiro com PHP4 que se baseia em NuSOAP. Agora, eu estou tentando passar isso para PHP5, e usar o apoio buildin para SOAP lá.

$wsdlPath = "";    // I have obviously set these variables to something meaningful, just hidden for the sake of security
$apiPath = "";
$username = "";
$password = "";

// PHP5 style
$client = new soapclient($wsdlPath, array('login'=>username,                
'password'=> $password,
'soap_version'=> SOAP_1_2,
'location'=> $apiPath,
 'trace'=> 1));

// PHP4/NuSOAP style
$client = new soapclient($wsdlPath, true);  
client->setEndpoint($apiPath);                          
$client->setCredentials($username, $password);
$client ->loadWSD);

O PHP5-versão lança a seguinte stacktrace exceção:

EXCEPTION=SoapFault exception: [WSDL] SOAP-ERROR: Parsing WSDL: Couldn't load from 'http://external-nbb.napi.norwegian.no.stage.osl.basefarm.net/api/napi1300?wsdl' in /home/eisebfog/public_html/database/norwegian.php:31
Stack trace:
#0 /home/eisebfog/public_html/database/norwegian.php(31): SoapClient->SoapClient('http://external...', Array)
#1 /home/eisebfog/public_html/database/index.php(53): require_once('/home/eisebfog/...')
#2 {main}

Agora, como a versão NuSOAP funciona, eo PHP5 puro não faz - não é preciso ser um cirurgião de cérebro para descobrir o que estou fazendo algo errado. Eu tenho acesso ao arquivo .htaccess, e através de phpinfo () Tenho a certeza que eu estou correndo NuSOAP corretamente e funcionando PHP5 quando eu deveria, e PHP4 / NuSOAP quando eu deveria.

Basicamente, eu não sou muito bom com serviços web e sabão - mas se alguém tiver alguma idéia, eu apreciaria qualquer entrada sobre o que estou fazendo de errado e como eu posso passar para o sabão nativa em PHP5. Btw, o reson eu quero este movimento, em primeiro lugar é a economia de recursos assumidos em sabão nativa. Eu apreciaria quaisquer links para benchmarks entre estas duas soluções também.

Foi útil?

Solução

Certifique-se de NuSoap e PHPv5 SOAP estão em execução no mesmo servidor. Se eu não estou totalmente errada, ambas as bibliotecas usa o mesmo nome de classe. Talvez ele vai funcionar melhor se você se certificar de nenhum NuSopa-arquivos estão incluídos? E também verificar se o SOAP-biblioteca são carregados:

if(!extension_loaded('soap')){
  dl('soap.so'); // Actually a deprecated method. See "notes" at http://no.php.net/dl
}

Eu acho que a versão de campo que você se refere é definido como "SOAP 1.1" ou similar?

Os melhores cumprimentos:)

Btw: o que você está trabalhando? Troca de atrasos do piloto para o aeroporto? Ou talvez um webservice que irá diminuir o tempo de espera na entrega de bagagem no Osl? : P

Outras dicas

Nós tivemos problemas muito semelhantes com PHP5 built-in cliente SOAP tentando consumir um serviço Web baseado em .NET. Também a análise WSDL não relatando esquema inválido. Colocar as definições de esquema em um único arquivo local não ajuda.

Nós desistiu e mudou para NuSOAP, que fez o trabalho.

No entanto, NuSOAP está longe de ser perfeito também. Agora eu entrar em fora-de situação de memória durante a análise de respostas 1MB +. Apagar todo o código de depuração desagradável ajudou um pouco, mas não radicalmente.

Assim, parece que não há 100% interoperável / implementação cliente SOAP funcional em PHP no momento.

sem testá-lo, tenho duas sugestões:

Em primeiro lugar, coloque o seu error_reporting para o mais alto possível (antes de criar o SoapClient):

error_reporting( E_ALL );

Se há algo de errado com a autenticação do lado do servidor, o PHP irá lançar avisos. Na maioria dos casos, ele vai dizer, o que tem de errado embora.

Segundo: Eu não sei se você pode especificar a opção 'localização', juntamente com uma URL para um WSDL. Teoricamente, o WSDL diz a seu cliente, onde o ponto final das operações é, para que você não tem que se preocupar.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top