Foros del Web » Programando para Internet » PHP »

Consumir WebService del Banco de México para obtener el tipo de cambio con PHP

Estas en el tema de Consumir WebService del Banco de México para obtener el tipo de cambio con PHP en el foro de PHP en Foros del Web. Hola a todos, soy novato en el tema de los servicios Web, he leido un poco y hecho unos cuantos ejemplos sencillos que me he ...
  #1 (permalink)  
Antiguo 11/01/2011, 00:05
 
Fecha de Ingreso: octubre-2010
Mensajes: 3
Antigüedad: 13 años, 6 meses
Puntos: 0
Pregunta Consumir WebService del Banco de México para obtener el tipo de cambio con PHP

Hola a todos, soy novato en el tema de los servicios Web, he leido un poco y hecho unos cuantos ejemplos sencillos que me he encontrado por la Web, la inquietud nace de la necesidad de leer de un servicio web el tipo de cambio de la divisa norteamericana y el euro a manera de consulta desde mi sistema de facturación en linea.

Necesito consumir el servicio Web de Banxico que se proporciona en la siguiente liga:
[URL="http://www.banxico.org.mx/DgieWSWeb/DgieWS?operation.invoke=tiposDeCambioBanxico"]http://www.banxico.org.mx/DgieWSWeb/DgieWS?operation.invoke=tiposDeCambioBanxico[/URL]

y su descripción WSDL aqui:
[URL="http://www.banxico.org.mx/DgieWSWeb/DgieWS?WSDL"]http://www.banxico.org.mx/DgieWSWeb/DgieWS?WSDL[/URL]

no he podido consumir este web service, utilizo nuSOAP como libreria en PHP. Les dejo el código que estoy tratando de hacer para imprimir los valores del tipo de cambio, pero todavia no funciona y no sé bien como hacer que funcione.


Código PHP:
<?php
    
require_once('lib/nusoap.php');
    
    
$oSoapClient = new nusoap_client('http://www.banxico.org.mx:80/DgieWSWeb/DgieWS?WSDL','wsdl');
        
    if (
$sError $oSoapClient->getError()) {
        echo 
"No se pudo realizar la operación [" $sError "]";
        die();
    }
    
//$aParametros = array("TITULO" => $titulo,"IDSERIE"=> $serie,"BANXICO_FREQ"=>$frec, "BANXICO_UNIT_TYPE"=> $tipo);
    //$aParametros = "";
    
$respuesta $oSoapClient->call("tiposDeCambioBanxico", array(),"http://ws.dgie.banxico.org.mx","","","","rpc","http://schemas.xmlsoap.org/soap/encoding/","encoded");
    
    
// Existe alguna falla en el servicio? 
    
if ($oSoapClient->fault) { // Si
        
echo 'No se pudo completar la operación';
        die();
    }else { 
// No
        
$sError $oSoapClient->getError();
        
// Hay algun error ?
        
if ($sError) { // Si
            
echo 'Error:' $sError;
            die();
        }
        echo 
"Funciono correctamente<br/>";
        echo 
"<pre>";print_r($respuesta,false); echo "</pre>";
        echo 
$respuesta["OBS_VALUE"];        
    } 
?>
Al consumir el web service me arroja esto:

TIPOSDECAMBIO
false
false
Tipos de Cambio
2011-01-10 23:38:32.838

Banco de México

Subgerencia de Desarrollo de Sistemas
(01 55)52372678


Update
2011-01-10 23:38:32.838

cuando deberia de arrojar eso mismo más el tipo de cambio como se muestra en la página de prueba de este servicio Web que proporciona Banxico:

[URL="http://www.banxico.org.mx/DgieWSWeb/DgieWS?operation.invoke=tiposDeCambioBanxico"]http://www.banxico.org.mx/DgieWSWeb/DgieWS?operation.invoke=tiposDeCambioBanxico[/URL]

Espero alguien pueda ayudarme, no he encontrado a nadie que lo haya resuelto y posteado con php.

Saludos.
  #2 (permalink)  
Antiguo 11/01/2011, 01:07
Avatar de bet7o  
Fecha de Ingreso: febrero-2010
Ubicación: DF
Mensajes: 315
Antigüedad: 14 años, 2 meses
Puntos: 20
Respuesta: Consumir WebService del Banco de México para obtener el tipo de cambio con

Yo te dejo esta funcion no es para banxico pero espero que te sirva. :)

Código PHP:
Ver original
  1. function tipo_cambio_alt($divisa="USD", $decimales=2, $tipo="venta")
  2. {
  3.   $url = "http://www.ixe.com.mx/rates/app?service=page/ExchangeRate";
  4.   $banco = file_get_contents($url);
  5.   if($banco == false) return false;
  6.   preg_match_all('/\\$[0-9]{1,3}(?:,?[0-9]{3})*(?:\\.[0-9]{'.$decimales.'})?/',$banco,$d);
  7.   if(empty($d)) return false;
  8.   $div = array(
  9.     'USD' => array(
  10.       'compra' =>  $d[0][0],
  11.       'venta' =>  $d[0][1]
  12.     ),
  13.     'EUR' => array(
  14.       'compra' =>  $d[0][8],
  15.       'venta' =>  $d[0][9]
  16.     )
  17.   );
  18.   $tc = trim($div[strtoupper($divisa)][strtolower($tipo)], '$');
  19.   return $tc;
  20. }

Saludos!
__________________
Pero el no contaba con una cosa, mi peligroso desinteres por la vida humana
  #3 (permalink)  
Antiguo 11/01/2011, 10:49
 
Fecha de Ingreso: octubre-2010
Mensajes: 3
Antigüedad: 13 años, 6 meses
Puntos: 0
Mensaje Respuesta: Consumir WebService del Banco de México para obtener el tipo de cambio con

Muchas gracias Bet7o, probé la función que me proporcionaste y trabajo sin problemas, sólo tengo una duda sobre el sitio al que recurres para obtener esta información, mis dudas son si esta siempre disponible?, por cuanto tiempo lo has usado? y cual es la fuente de donde toma el tipo de cambio, esto último para saber la confiabilidad, auunque investigue un poco y veo que es de un grupo financiero que no conocía, pero si todo va bien con este sitio entonces utilizaré la función que me proporcionaste

De cualquier forma me gustaría que el tema de este post pudiera ser resuelto y poder sacar la espina de resolverlo porque no es mala la idea de tener el tipo de cambio directamente del Banco de Mexico (Banxico) puesto es el la fuente principal para establecer el tipo de cambio en México jeje .

Espero alguien más se haya topado con esto...

Muchas gracias Bet7o

Saludos
  #4 (permalink)  
Antiguo 15/06/2011, 16:36
 
Fecha de Ingreso: enero-2004
Mensajes: 2
Antigüedad: 20 años, 3 meses
Puntos: 1
Respuesta: Consumir WebService del Banco de México para obtener el tipo de cambio con

Hola, hace tiempo me tope con la misma problemática; como lo resolví fue con el siguiente fragmento de código:

Código PHP:
<?php
$resultado
='';
$fecha_tc='';
$tc='';
$client = new SoapClient(null, array('location' => 'http://www.banxico.org.mx:80/DgieWSWeb/DgieWS?WSDL',
                             
'uri'      => 'http://DgieWSWeb/DgieWS?WSDL',
                             
'encoding' => 'ISO-8859-1',
                             
'trace'    => 1) );
try
{
    
$resultado $client->tiposDeCambioBanxico();
}
catch (
SoapFault $exception)
{
}
if(!empty(
$resultado))
{
    
$dom = new DomDocument();
    
$dom->loadXML($resultado);
    
$xmlDatos $dom->getElementsByTagName"Obs" );
    if(
$xmlDatos->length>1)
    {
        
$item $xmlDatos->item(1);
        
$fecha_tc ffecha($item->getAttribute('TIME_PERIOD'));
        
$tc $item->getAttribute('OBS_VALUE');
    }
}
?>
Como pueden ver no hay mucha validación y se puede mejorar mucho, en la variable tc se guarda el tipo de cambio y en la variable fecha_tc la fecha devuelta para dicho tipo de cambio.

Leyendo el código mostrado por mitto_33, en principio me parece correcto y no se ve el valor del tipo de cambio porque seguramente el navegador lo oculta al ser un xml; deberías probar viendo el código fuente oculto en el navegador (clic derecho, ver código fuente, también me paso, )

S2

Última edición por rolpadi; 15/06/2011 a las 16:54
  #5 (permalink)  
Antiguo 02/04/2012, 11:04
 
Fecha de Ingreso: abril-2012
Mensajes: 1
Antigüedad: 12 años, 1 mes
Puntos: 0
Respuesta: Consumir WebService del Banco de México para obtener el tipo de cambio con

La página de IXE provee información confiable, pero no te recomiendo utilizarla como se propone para una aplicación real de facturación. Esto es porque si cambia algo del código HTML ya no funcionará.
Si no has podido lograr que funcione el webservice de BANXICO, otra fuente confiable es Yahoo Finance, aquí un script:

Código PHP:
Ver original
  1. $de = 'USD';
  2. $a = 'MXN';
  3. $url = 'http://finance.yahoo.com/d/quotes.csv?f=l1d1t1&s='.$de.$a.'=X';
  4. $handle = fopen($url, 'r');
  5.  
  6. if ($handle) {
  7.     $result = fgetcsv($handle);
  8.     fclose($handle);
  9. }
  10.  
  11. echo '1 '.$de.' vale '.$result[0].' '.$a.' De acuerdo a la información generada el '.$result[1].' '.$result[2];

Fuente:
http://allurcode.com/2010/11/08/get-live-exchange-rates-in-php/

Última edición por irodort; 02/04/2012 a las 11:05 Razón: Agregada la leyenda de fuente

Etiquetas: banco, consumir, tipo, webservice, cambios
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 08:10.