# Gerando Web Services PHP com NuSoap

## NuSoap

Esta biblioteca é uma alternativa ao módulo SOAP Extension, nativo do PHP e oferecer suporte à criação automática do WSDL.

**Framework NuSoap disponível em:** <http://sourceforge.net/projects/nusoap/>

Segue um exemplo de utilização do Framework.

&#x20;**Lado Servidor da Aplicação:**

{% code title="ws-service.php" %}

```php
<?php
  require_once "lib/nusoap.php";
  
  $soap = new soap_server;
  
  $soap->configureWSDL('WS-WebCodeFree', 
  										 'http://localhost/ws-webcodefree/');
  
  $soap->wsdl->schemaTargetNamespace 
  							= 'http://soapinterop.org/xsd/';

	$soap->register(
		'info',
		array(),		
		array('x' => 'xsd:string'),
		'http://soapinterop.org/'
	);
	
	$soap->register(
		'post_java',
		array(),		
		array('x' => 'xsd:string'),
		'http://soapinterop.org/'
	);
	
	$soap->register(
		'post_php',
		array(),		
		array('x' => 'xsd:string'),
		'http://soapinterop.org/'
	);
	
	$soap->register(
		'login_user',
		array('login' => 'xsd:string','pass' => 'xsd:int'),		
		array('x' => 'xsd:string'),
		'http://soapinterop.org/'
	);
  	
$soap->service(isset($HTTP_RAW_POST_DATA) ? 
							$HTTP_RAW_POST_DATA : '');
 
function info(){
	return "WebCodeFree - Desenvolvimento Web.";
}

function post_java(){
	return "Em Breve Acesso a Postagens Java Via Serviço";
}

function post_php(){
	return "Em Breve Acesso a Postagens PHP Via Serviço";
}

function login_user($login, $senha){
	return "Seja Bem Vindo Usuário ". $login . " !!!";
}
?>
```

{% endcode %}

{% hint style="info" %}

* Na linha 2 realizamos a importação da biblioteca do NuSoap;
* Na linha 4 instanciamos uma objeto do tipo soap\_server;
* Na linha 6 configuramos a instância do documento WSDL de nossa aplicação servidora;
* Na linha 8 definimos o Schema do documento WSDL;
* Entre as linhas 10 a 36 registramos os métodos de nosso web service;
* Na linha 38 definimo o uso do request para invocar o serviço;
* Entre as linhas 40 a 54 implementamos os métodos de nosso web service.
  {% endhint %}

Após a criação do objeto soap\_server, geração do wsdl e registro e implementação dos métodos conseguimos gerar web service.

![Endpoint do Serviço Publicado](https://750641972-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MHGW_meLjEK-3soe8kP%2F-MIyFIgT0_3m-c6_3q5g%2F-MIyGXOTuhUm86ZILK_z%2Fservi%C3%A7o.png?alt=media\&token=356015fd-eb91-42b2-96d6-7cb8a8bed02d)

![WSDL do Serviço](https://750641972-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MHGW_meLjEK-3soe8kP%2F-MIyFIgT0_3m-c6_3q5g%2F-MIyIYzoQmZrPyxVm6UA%2Fwsdl.png?alt=media\&token=167e6fcd-5361-4138-9727-fe4dba537764)

&#x20;**Lado Cliente da Aplicação:**

{% code title="ws-client.php" %}

```bash
<?php
	include "lib/nusoap.php";
	
	$client =  new SoapClient('http://localhost/web-service/ws-webcodefree.php?wsdl');
	
	$result1 = $client->call('info');
	
	$result2 = $client->call('post_java');
	
	$result3 = $client->call('post_php');
	
	$result4 = $client->call('login_user', array('Paulo',12));
	
	echo $result1."<br>";
	echo $result2."<br>";
	echo $result3."<br>";
	echo $result4."<br>";
?>
```

{% endcode %}

> * Na linha 2 realizamos a importação da biblioteca do NuSoap;
> * Na linha 4 criamos um objeto Soap Client baseado no wsdl do Servidor;
> * Por fim realizamos a chamadas aos métodos e exibimos o possíveis resultados.

E com isso realizamos a publicação e consumo de um web service em PHP baseado na biblioteca NuSoap.
