Estoy tratando de conectar PHP al framework de webservices de Sumtotal. No sé si alguien tenga experiencia previa pero haciendo research encontré esto:
1.- Requiero un usuario administrativo de Sumtotal con permisos para usar los webservices (ya la tengo).
2.- Ya tengo la url del wsdl.
3.- Antes de poder usar los webservices debo invocar el método Login para que me devuelva un token que debo usar en las siguientes llamadas (aquí es donde me estoy atorando).
4.- Al parecer Sumtotal está hecho con los webservices de Microsoft de .NET (de ahí que tengan extensión .asmx). He leído que en lugar de enviar los parámetros como un array los debo mandar como un XML en texto plano (si, muy raro... pero no estoy seguro).
Yo previamente he trabajado con otros webservices utilizando NuSoap y no había tenido ningún problema, pero me parece que nunca me había enfrentado a uno desarrollado en .NET y que requiriera autentificación previa :-/
Esta es una de las formas que estoy intentando conectar PHP con el servicio. Defino mis clases:
Código PHP:
<?PHP
class UserCredentials {
var $Username;
var $Passcode;
var $AuthenticationType;
var $AccountType;
function UserCredentials () {
$this->Username = "usuario";
$this->Passcode = "contraseña";
$this->AuthenticationType = new UserAuthenticationType("NotSpecified");
$this->AccountType = new UserType("NotSpecified");
}
}
class Enum {
protected $self = array();
public function __construct() {
$args = func_get_args();
for( $i=0, $n=count($args); $i<$n; $i++ ) $this->add($args[$i]);
}
public function __get( $name = null ) {
return $this->self[$name];
}
public function add( $name = null, $enum = null ) {
if( isset($enum) ) $this->self[$name] = $enum;
else $this->self[$name] = end($this->self) + 1;
}
}
class UserAuthenticationType extends Enum {
}
class UserType extends Enum {
}
?>
Código PHP:
<?PHP
error_reporting(E_ALL);
ini_set("display_errors", true);
include("class.userauthentication.php");
require_once('lib/nusoap.php');
$client = new nusoap_client("http://ruta-del-servicio/services/authentication.asmx?wsdl", true);
$user = new UserCredentials();
$response = $client->call("login", array("credentials"=>$user));
print_r($response);
?>
Ojalá alguien tenga experiencia con PHP y los archivos ASMX. Gracias!