Supongamos que hay 10 sitios web distribuidos en varios lugares y es necesario sincronizar sus inventarios, pero la base de datos no admite conexiones remotas.
Si queremos obtener el inventario del servidor en tiempo real, podemos usar muchos métodos. Los que conozco son los siguientes:
· Método CURL
· Método SOCKET
· Método SOAP en PHP5
A continuación se dan ejemplos para implementarlo:
Cliente
del método CURL
.php
<?php
$psecode = 'NDE005';
$sitio web = 'www.abc.com';
$imt = 1;
$contraseña = 123456;
$ch = curl_init();
$curl_url = " http://ics1.server.com/index.php?web = " .
"&pwd=" . $pwd "&acción=comprobar&pseid=" .
"&amt=" . $amt;
curl_setopt($ch, CURLOPT_URL, $curl_url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);// No generar directamente, regresar a la variable
$curl_result = curl_exec($ch);
$resultado = explotar(',', $curl_result);
curl_close($ch);
print_r($resultado);
?>
El servidor solo necesita generar en un formato determinado, y luego el cliente puede recibir en este formato, como:
echo "OK", $fpsecode "," $fbalance ;//Comas separadas en
modo SOCKET
. Esto requiere la ayuda de la biblioteca de clases de terceros HttpClient que se puede descargar aquí: http://scripts.incutio.com/httpclient/
<?php
require_once 'clase/HttpClient.php';
$params = array('web' => 'www.abc.com',
'contraseña' => '123456',
'acción' => 'verificar',
'pseida' => 'ECM005',
'cantidad' => 1);
$pageContents = HttpClient::quickPost('http://ics.server.com/index.php', $params);
$resultado = explotar(',', $pageContents);
print_r($resultado);
?>
Modo SOAP en PHP5
server.php
<?php
función obtenerCotización($fpsecode) {
global $dap;
$resultado = matriz();
intentar {
$query = "SELECCIONE fprice, fcansale, fbalance, fbaltip FROM tblbalance donde superior(trim(fpsecode)) =: límite de psecode 1";
$stmt = $dbh->preparar($consulta);
$stmt->execute(array(':psecode' => strtoupper(trim($fpsecode))));
$stmt->bindColumn('fprecio', $fprecio);
$stmt->bindColumn('fcansale', $fcansale);
$stmt->bindColumn('fbalance', $fbalance);
$stmt->bindColumn('fbaltip', $fbaltip);
while($fila = $stmt->fetch(PDO_FETCH_BOUND)) {
//
}
} captura (PDOException $e) {
echo $e->getMessage();
}
return $fprice //Puedes devolver una matriz
}
$dsn = 'pgsql:host=192.168.*.* puerto=5432 dbname=db usuario=123456 contraseña=123456';
intentar {
$dbh = nuevo PDO($dsn);
} captura (PDOException $e) {
die('Error de conexión: ' . $e->getMessage());
}
ini_set("soap.wsdl_cache_enabled", "0"); // deshabilitar la caché WSDL
$servidor = new SoapServer("stockquote.wsdl"); //Archivo de configuración
$servidor->addFunction("getQuote");
$servidor->manejar();
?>
stockquote.wsdl
<?xml versión ='1.0' codificación ='UTF-8' ?>
<definiciones nombre='Cotización de acciones'
targetNamespace='http://example.org/StockQuote'
xmlns:tns=' http://example.org/StockQuote '
xmlns:soap='http://schemas.xmlsoap.org/wsdl/soap/'
xmlns:xsd='http://www.w3.org/2001/XMLSchema'
xmlns:soapec='http://schemas.xmlsoap.org/soap/encoding/'
xmlns:wsdl='http://schemas.xmlsoap.org/wsdl/'
xmlns='http://schemas.xmlsoap.org/wsdl/'>
<nombre del mensaje='getQuoteRequest'>
<nombre de pieza='símbolo' tipo='xsd:cadena'/>
</mensaje>
<nombre del mensaje='getQuoteResponse'>
<nombre de la pieza='Resultado' tipo='xsd:float'/>
</mensaje>
<portType nombre='StockQuotePortType'>
<nombre de operación='getQuote'>
<mensaje de entrada='tns:getQuoteRequest'/>
<mensaje de salida='tns:getQuoteResponse'/>
</operación>
</portType>
<nombre de enlace='StockQuoteBinding' tipo='tns:StockQuotePortType'>
<jabón: estilo de enlace = 'rpc'
transporte='http://schemas.xmlsoap.org/soap/http'/>
<nombre de operación='getQuote'>
<soap:operación SoapAction='urna:xmethods-delayed-quotes#getQuote'/>
<entrada>
<soap:body use='encoded' namespace='urna:xmethods-delayed-quotes'
encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/>
</entrada>
<salida>
<soap:body use='encoded' namespace='urna:xmethods-delayed-quotes'
encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/>
</salida>
</operación>
</binding>
<nombre del servicio='StockQuoteService'>
<nombre del puerto='StockQuotePort' vinculante='StockQuoteBinding'>
<soap:ubicación de la dirección='http://192.168.3.9/php5/server.php'/>
</puerto>
</servicio>
</definiciones>
client.php
<?php
$cliente = nuevo SoapClient("stockquote.wsdl");
$resultado = $cliente->getQuote("nde005");
print_r($resultado);
?>