Factura electrónica web semilla token sii

conectarse_all_sii_get_token_from_seed_python_phpAutenticación Automática al SII : Conectarse al SII, obtener la Semilla (Seed) , Firmarla Digitalmente (XML Signature/XML DSig / XML SEC ), enviarla al Web Service del SII y finalmente obtener el TOKEN( identificador de autenticación ).

En PHP(usando nusoap y xmlseclibs.php ) : Conseguir la Semilla, firmarla, y obtener el Token

<?php
/**
 * Conectarse al SII , Firma Difital sobre SEMILLA , obteniendo el TOKEN
 * @author Rodrigo Vargas A. <rodrigo@edreams.cl>
 * @copyright 2014 Rodrigo Vargas A.
 * @link http://wwww.edreams.cl/
 * @version 1.0 
 * @internal A pedido de Oscar http://www.facturemas.com/
 */
require_once('../lib/nusoap/nusoap.php');
require_once('../lib/xml_signature/xmlseclibs.php');
// Autenticacion con Certificado Difital Valido al SII 
//
$client = new nusoap_client('https://maullin.sii.cl/DTEWS/CrSeed.jws?WSDL', false);
$response = $client->call( 'getSeed' );
$xml = simplexml_load_string($response);
$xml->registerXPathNamespace('SII', 'http://www.sii.cl/XMLSchema');
$events = $xml->xpath('//SII:RESP_BODY' );
$semilla = $events[0]->SEMILLA;

$xml_semilla = "<getToken>\n\t<item>\n\t\t<Semilla>$semilla</Semilla>\n\t</item>\n</getToken>";
// Firmar Digitalmente XML de la semilla
$doc =new DOMDocument();
$doc->formatOutput = FALSE; 
$doc->preserveWhiteSpace = TRUE;
$doc->loadXML($xml_semilla);
$objDSig = new XMLSecurityDSig(FALSE);
$objDSig->setCanonicalMethod(XMLSecurityDSig::C14N);
$options['prefix'] = '';
$options['prefix_ns'] = '';
$options['force_uri'] = TRUE;
$options['id_name'] = 'ID';
$objDSig->addReference($doc, XMLSecurityDSig::SHA1, array('http://www.w3.org/2000/09/xmldsig#enveloped-signature'), $options);
$objKey = new XMLSecurityKey(XMLSecurityKey::RSA_SHA1, array('type'=>'private'));
$pfx = file_get_contents(dirname(__FILE__) . "..\..\config\Certificado_Digital_obtenido_de_una_ca.pfx");
openssl_pkcs12_read($pfx, $key, "pasword_de_tu_certificado_digital");
$objKey->loadKey($key["pkey"]);
$objDSig->add509Cert($key["cert"]);
$objDSig->sign($objKey, $doc->documentElement);

$doc->save(dirname(__FILE__) . '\archivo_semilla_firmada.xml');
//====================================================================
//                     SE GENERA TOKEN
//====================================================================
$fsemilla = fopen( 'archivo_semilla_firmada.xml', "r+" );
$fsemilla_firmada = fread( $fsemilla, filesize('archivo_semilla_firmada') );
fclose($fsemilla);
   
$client2 = new nusoap_client('https://maullin.sii.cl/DTEWS/GetTokenFromSeed.jws?WSDL', false);

$respuesta_sii_con_token = $client2->call( 'getToken', array('pszXml' => $fsemilla_firmada) );
file_put_contents( 'token.xml', $respuesta_sii_con_token );


?>

En Python(utilizando dm.xmlsec.binding, lxml, SOAPpy): Conseguir la Semilla, firmarla, y obtener el Token: Usando IPython Notebook

# In[1]:

import dm.xmlsec.binding as xmlsec
xmlsec.initialize()
from os.path import dirname, basename
from lxml.etree import tostring
BASEDIR = dirname(xmlsec.__file__) + "/resources/"


# In[2]:

def getSemilla():
    from SOAPpy import SOAPProxy
    import lxml.etree as ET
    url =  'https://maullin.sii.cl/DTEWS/CrSeed.jws?WSDL'
    ns =  'urn:https://maullin.sii.cl/DTEWS/CrSeed.jws'
    _server = SOAPProxy(url, ns)
    root = ET.fromstring(_server.getSeed())
    semilla = root[0][0].text
    return semilla


# In[9]:

def doTemplateSemilla(semilla2):
    import lxml.etree as ET
    from StringIO import StringIO
    xml_head = u'''    <getToken>
<item>
'''
    xml_body = '<Semilla>' + semilla2 + '</Semilla>' 
    xml_footer = '''
</item>
<Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
<SignedInfo>
<CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
<SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
<Reference URI="">
<Transforms>
<Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
</Transforms>
<DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
<DigestValue/>
</Reference>
</SignedInfo>
<SignatureValue/>
<KeyInfo>
<KeyValue>
<RSAKeyValue>
<Modulus/>
<Exponent/>
</RSAKeyValue>
</KeyValue>
<X509Data>
<X509Certificate/>
</X509Data>
</KeyInfo>
</Signature>
</getToken>
'''
    xml =  xml_head + xml_body + xml_footer
    tree = ET.parse(StringIO(xml))
    outFile2 = open('archivo_semilla_template.xml', 'w')
    tree.write(outFile2, xml_declaration=True, encoding='iso-8859-1')
    return


# In[4]:

def firmar_digitalmente_semilla(tmpl_file, key_file, cert_file):
   
    from lxml.etree import parse, tostring
    doc = parse(tmpl_file)
    # find signature node
    node = xmlsec.findNode(doc, xmlsec.dsig("Signature"))
    dsigCtx = xmlsec.DSigCtx()
    # Note: we do not provide read access to `dsigCtx.signKey`.
    #  Therefore, unlike the `xmlsec` example, we must set the key name
    #  before we assign it to `dsigCtx`
    signKey = xmlsec.Key.load(key_file, xmlsec.KeyDataFormatPem, "tu_password")
    signKey.loadCert(cert_file, xmlsec.KeyDataFormatPem)
    # Note: the assignment below effectively copies the key
    dsigCtx.signKey = signKey
    dsigCtx.sign(node)
    outFile = open('archivo_semilla_firmada.xml', 'w')
    doc.write(outFile, xml_declaration=True, encoding='iso-8859-1') 
    return tostring(doc)



# In[5]:

def getToken(archivo_de_la_semilla):
    from SOAPpy import SOAPProxy
    import lxml.etree as ET
    url =  'https://maullin.sii.cl/DTEWS/GetTokenFromSeed.jws?WSDL'
    ns =  'urn:https://maullin.sii.cl/DTEWS/GetTokenFromSeed.jws'
    _server = SOAPProxy(url, ns)
    tree = ET.parse(archivo_de_la_semilla)
    ss = ET.tostring(tree, pretty_print=True, encoding='iso-8859-1')
    respuesta = ET.fromstring(_server.getToken(ss))
    token = respuesta[0][0].text
    return token


# In[6]:

semilla3 = getSemilla()
print "La Semilla es: " , semilla3
doTemplateSemilla(semilla3)
seed_firmado = firmar_digitalmente_semilla("archivo_semilla_template.xml", BASEDIR + "llave-privada-rsa-encryptada-key.pem", BASEDIR + "certificado_digital-crt.pem")
token = getToken("archivo_semilla_firmada.xml")
print "El Token es: " ,token
print "Me dio SED, a Tomarse una Java de Cervezas "

Ejemplo Respuesta del SII al Token creado

<?xml version="1.0" encoding="UTF-8"?>
<SII:RESPUESTA xmlns:SII="http://www.sii.cl/XMLSchema">
    <SII:RESP_BODY>
        <TOKEN>EJBrBZSaaICMK</TOKEN>
    </SII:RESP_BODY>
    <SII:RESP_HDR>
        <ESTADO>00</ESTADO>
        <GLOSA>Token Creado</GLOSA>
    </SII:RESP_HDR>
</SII:RESPUESTA>

################################################

BOUNS TRACK #1

Fabián Saldías Nilo Pregunto el día 9 de Diciembre de 2014 a las 16:48 pm lo siguiente:

Hola, muy bueno el artículo!

Me pregunto existirá alguna forma de autenticarse y obtener el listado completo de contribuyentes actualizado, es decir, envíar el certificado digital con curl, y poder descargar la lista.

la url es: https://palena.sii.cl/cvc_cgi/dte/ce_consulta_rut

y la url del listado es: https://palena.sii.cl/cvc_cgi/dte/ce_empresas_dwnld (descarga el csv, con el nombre ce_empresas_dwnld_AAAAMMDD.csv, año, mes, día).

he intentado hacerlo con curl pero la verdad me estoy por rendir.

Saludos.

La primera respuesta fue que fuera a revisar el siguiente post que había hecho ( http://www.edreams.cl/jugando-con-xslt-xml-sismologia-json-mongodb-jq-parallel-curl/, pues eran muy parecidos, ahora si, todavía no la hizo, aquí va la respuesta corta :

Arriba esta lo de rescatar el Token, lo pones en una variable de ambiente o en un archivo, en este caso lo pondré en una variable de ambiente llamada TOKEN, ejecutando cualquiera cosa que quieras te dará algo como lo de arriba, entonces hacemos, por ejemplo:

vegeta@edreams.cl]$ export TOKEN="EJBrBZSaaICMK"
vegeta@edreams.cl]$ curl -s -o ce_empresas_dwnld_$(echo `date --date="-1 days" +%Y%m%d`).cvs "https://palena.sii.cl/cvc_cgi/dte/ee_consulta_empresas_dwnld?NOMBRE_ARCHIVO=ce_empresas_dwnld_$(echo `date --date="-1 days" +%Y%m%d`).csv"   -H "User-Agent: Mozilla/5.0" -H "Accept-Encoding: gzip, deflate, sdch" -H "Referer: https://palena.sii.cl/cvc/dte/ee_empresas_dte.html" -H "Cookie: TOKEN=$(echo $TOKEN)"
vegeta@edreams.cl]$ls -sh  ce_empresas_dwnld_20141212.cvs
12M ce_empresas_dwnld_20141212.cvs (la verdad que pesa exactamente 11814882 , aprox 11.8M )
vegeta@edreams.cl]$ wc -l ce_empresas_dwnld_20141212.cvs
131552 ce_empresas_dwnld_20141212.cvs ( con 131.552 lineas )
vegeta@edreams.cl]$mongoimport -d mydb -c ce_empresas -type csv -file ce_empresas_dwnld_20141212.cvs --headerline

##### END BONUS TRACK ########################

No sea Egoísta y Comparta...Share on FacebookTweet about this on TwitterShare on LinkedInShare on Google+Pin on PinterestBuffer this page

Comments

  1. Edreams says

    Un apunte, en Python si quieren el debug de como van y vienen los SOAP, simplemente colocar :
    _server.config.dumpSOAPOut =1
    _server.config.dumpSOAPIn = 1

    En PHP no es necesario, pues queda explicito. Lo misma forma para conseguir el Token , se puede hacer desde Perl, generando el template y haciendo el mismo juego con lo de xmlsec. En Java esta en la página de NIC, no es necesario mucha explicación, a lo más si quieren generar su propia clase Proxy ….mmm se coloca algo así:
    java -cp /home/edreamsFacturaSII/lib/axis.jar:/home/edreamsFacturaSII/lib/commons-logging-1.0.4.jar:/home/edreamsFacturaSII/lib/saaj.jar:/home/edreamsFacturaSII/lib/wsdl4j-1.5.1.jar:/home/edreamsFacturaSII/lib/activation-1.1.jar:/home/edreamsFacturaSII/lib/jaxrpc.jar:/home/edreamsFacturaSII/lib/commons-discovery-0.2.jar:/home/edreamsFacturaSII/lib/mail-1.4.jar:. org.apache.axis.wsdl.WSDL2Java https://maullin.sii.cl/DTEWS/CrSeed.jws?WSDL , Y lo mismo para : https://maullin.sii.cl/DTEWS/GetTokenFromSeed.jws?WSDL …..después se llaman y se guarda el Token en una variable de ambiente o en un archivo que es generado por estas cada N minutos con un Cron etc….la Semilla tiene un tiempo de vida de 2 minutos , pero el Token más….consultar los estados .

    Y repitiendo que esto es solo para jugar, pues la real se testea mucho más ….. y tiene que ser validado por otros etc….

    Y si gustan revisan también los anteriores artículos sobre Factura Electrónica:

    1. Parte 0: http://www.edreams.cl/factura-electronica-chile-libros-pymes-sii/
    2. Parte 1: http://www.edreams.cl/factura-electronica-obligatoria-sii-software-2014-dte-niclabs-xmlsec/
    3. Parte 2: http://www.edreams.cl/factura-electronica-obligatoria-sii-software-2014-dte-openssl-xmlsec/
    4. Parte 3: http://www.edreams.cl/factura-electronica-timbre-pdf417-imagen-2014/
    5. Parte 4: http://www.edreams.cl/factura-electronica-sii/
    6. Parte 5: http://www.edreams.cl/factura-electronica-obligatoria-openlibsdte-jar-java/
    7. Parte 6: http://www.edreams.cl/factura-electronica-intercambio-entre-contribuyentes/
    8. Parte 7: http://www.edreams.cl/firma-digital-electronica-xml-signature-sii-xmldsig-factura/
    9. Parte 8: http://www.edreams.cl/factura-electronica-chile-envio-automatico-documentos-tributarios/

    Saludos y Salud
    Rodrigo

  2. Gabriel says

    Una consulta, quisiera saber si el token se debe generar cada vez que se envia un DTE o tiene algun tiempo de expiracion. Entiendo que la semilla tiene 2 minutos hasta que se expire pero no estoy muy claro en lo del token.

  3. Paulina Alvarez says

    Hola!
    Estoy utilizando los archivos de NICLabs y al correr TestAutorizacion me lanza el siguiente error:
    ConexionSiiException: No obtuvo Token: Codigo: -3; Glosa: Error (12) parse ERROR validacion contra CA

    Según el manual de SII el código -3 es por error de RUT, pero me manda el error de parse. Verifiqué que recibe la semilla y por lo que veo el formato de envío de la semilla codificada también está correcta ¿Sabes a qué se podría deber este error?

    Saludos y muchas gracias!

    • Edreams says

      Hola Paulina,
      Podrías extenderte un poco más en lo que estas haciendo y según que documentación hablas?….la url si podrías ser mas especifica. Esta con la URL de maullin o Palena? . La semilla no es problemática, pues no tienes nada que firmar, puedes revisar en esta otra que también se toca el tema: http://www.edreams.cl/factura-electronica-sii/ . Ahí hay unos ejemplos también y respuestas a dudas. Por si las moscas la Semilla dura solo 2 minutos, y a esta hora el SII debe estar bien cargado, podrías usar a Palena en vez de maullin para la Autentificación.

      Ahora , según lo que se ve dice parse Error validation contra CA, o sea contra Autoridad Certificadora, en que ambientes estas??… y en que etapa estas?, pues con lo que escribiste no se entiende mucho.

      A todo esto como esta el Mar??

      Saludos
      Rod

      • Paulina Alvarez says

        Hola Rodrigo,

        Recién me vengo a enterar que me respondiste, yo esperaba un correo de notificación haha. Muchas gracias por tu respuesta y por todas tus publicaciones con respecto a este tema de la factura electrónica, me han ayudado bastante y resuelto muchas dudas que me han surgido en el camino. Al final tenía problemas con la url y descubrí que el SII suele caerse. Ahora estoy lidiando con el envío al SII, me acepta los documentos con reparo, me dice que tengo “(TED-2-510) Firma Timbre Electrónico Incorrecta”, vi tu publicación con respecto a la firma, pero no puedo utilizar tu .jar ya que no corresponde a la version en la que estoy trabajando, me preguntaba si podrías mandarme la clase NSFiltro para poder hacer mi propio .jar, o quizá eso no soluciona mi problema?

        Saludos y muchas gracias de antemano!

  4. Simon Cendra says

    me da el siguiente error, estoy con linux tengo el archivo de la firma , la pass, la firma me permite enviar archivos de forma manual

    21
    Error : Firmar Invalida

    slds y gracias

    • Edreams says

      Hola Simon( Nelson Axxx Sxxxx Cendra ) , como te gusta cambiar de nick’s a ti :D …..0k…
      Según la Documentación del SII: ( http://www.sii.cl/factura_electronica/autenticacion.pdf )
      5.2.2 Los Estados de Salida de GetTokenFromSeed son:
      21 Firma invalida( La llave pública no coincide con la del certificado). .
      #############
      Hay 5 atributos asociados a un Usuario Autorizado:
      1. Usuario Administrador: Tiene el atributo de poder hacer Mantención de Usuarios, Agregar, Eliminar, o Modificar perfiles.
      2. Solicitar Folio: Persona autorizada a solicitar Rango de Folios.
      3. Anular Folio: Persona autorizada para anular Folios
      4. Firmar Doctos: Persona autorizada a Firmar Documentos Electrónicos
      5. Enviar Doctos: Persona autorizada a hacer los Envios de documentos al SII y a firmar el envio de DTE

      Revisar ( http://www.sii.cl/factura_electronica/manual_certificacion.pdf )

      Estas usando la librería del NIC o con PHP como tus preguntas anteriores? , acuérdate de que en Curl no viene con el CA ROOT, así que colocarlo.

      Saludos Cordiales
      Rod

      • Simon Cendra says

        tome el archivo php que aparece en tu web y lo modifique.

        agregue la firma y la clave

        luego lo ejecute y me entrego la semilla pero cuando pido el token me da ese error

        slds y gracias

        • Edreams says

          Bueno, vuelve a leer los 9 artículos de Factura Electrónica que hay aquí , o mejor sería que revisaras la documentación del SII. Pues no es una cosa de copy/paste, tienes que revisar algunas cosas que creo que todos los otros ya le han dado vuelta.
          Uno da los hints para aquellos que estén con problemas , pero al menos ya saben algo del asunto y han sudado un poco en esto. Ahora como la otra vez, te animo a estudiar la documentación del SII pues es la Oficial . Por mi parte ya esta listo mi interacción con tú nick.

          Saludos y Suerte
          Rod

          • Ricardo Rebolledo says

            He revisado el PHP que haz publicado y le realicé un par de correcciones, lo demás Ok. Al igual que Simón o Nelsón -¿?- me arroja el error

            Error 21 : Firmar Invalida

            Analizando los PDF que proporciona el SII encontré que era por que la llave pública del computador no coincide con la de la firma ¿?. Imagino que no es error de programación. Por lo que probaré reinstalando el Certificado para que utilice mi actual llave (El mismo certificado lo tengo instalado en 2 computadores, puede ser ahí el problema). Contaré avances, y muchas gracias.

  5. Cristian Torres says

    a Alguien que le haya funcvionado el BOUNS TRACK #1, por favor comentar, no me funciona, no logro bajar el listado de empresas.

    de ante mano
    Muchas Gracias.

    • Edreams says

      Hazlo en días hábiles, acuérdate que es date -1 , o sea si lo hiciste ayer estabas pidiendo el del Domingo, y ese no esta. O hazlo a mano y prueba, si es re fácil.

      Saludos
      Rodrigo

        • Cristian Torres says

          el resultado fue. (quite todo el texto de los estilos)

          mostrar();


          CONSULTA EMPRESA CONTRIBUYENTE

          En esta página podrá bajar un archivo en formato csv, los datos de las Empresa Consultada.

          nom_archivo:No se encuentra el archivo a descargar (). Favor comuníquese con la Mesa de ayuda SII Internet, informando el siguiente mensaje CE-FL-DWNLD.

      • Cristian Torres says

        Sigue sin funcionar, por el momento bajo el listado de empresas que utilizan el software de impuestos Internos y los que utilizan software propio, adjunto codigo por si ha alguien le sirve.
        $MyToken, lo obtube con el codigo php de arriba.

        $url = ‘https://palena.sii.cl/cvc_cgi/dte/ee_consulta_empresas_dwnld? NOMBRE_ARCHIVO=ee_empresas_mipyme.csv';
        $path = dirname(__FILE__) .’/descargas/empresas_mypyme_’.date(‘Ymd’).’.csv';

        $headers = getHeaders($url);

        if ($headers[‘http_code’] === 200 and $headers[‘download_content_length’] 0) return true;
        }

        • Edreams says

          Hola Cristian,
          coloca esto primero:
          vegeta@edreams.cl]$ curl -s -o ce_empresas_dwnld_$(echo `date –date=”-1 days” +%Y%m%d`).cvs “https://palena.sii.cl/cvc_cgi/dte/ee_consulta_empresas_dwnld?NOMBRE_ARCHIVO=ce_empresas_dwnld_$(echo `date –date=”-1 days” +%Y%m%d`).csv” -H “User-Agent: Mozilla/5.0″ -H “Accept-Encoding: gzip, deflate, sdch” -H “Referer: https://palena.sii.cl/cvc/dte/ee_empresas_dte.html” -H “Cookie: TOKEN=$(echo $TOKEN)”
          vegeta@edreams.cl]$ls -sh ce_empresas_dwnld_20140120.cvs

          OJO que el archivo a bajar es este:
          https://palena.sii.cl/cvc_cgi/dte/ee_consulta_empresas_dwnld?NOMBRE_ARCHIVO=ce_empresas_dwnld_$(echo `date –date=”-1 days” +%Y%m%d`).csv
          o para hoy seria, aunque hoy es 21 de 01 de 2014 o 20140121, nosotros bajamos -1 day, o sea 1 día menos…. 20140120
          https://palena.sii.cl/cvc_cgi/dte/ee_consulta_empresas_dwnld?NOMBRE_ARCHIVO=ce_empresas_dwnld_20140120.csv

          Saludos
          Rodrigo

          Nota: Aclaración: Estos días puedo andar un poco mas lento y tal vez de mal humor, pues mi abuelita esta muy mal de salud. Gracias por la comprensión. Si pueden ayudan a los otros que tengan dudas, gracias, si al final somos Chilenos, y la pelea es con otros. Viva Chile!!! o/

          • says

            Rodrigo, finalmente logre bajar el archivo sin restar el día, lo hice en php, siguiendo la logica del token de tu publicación, si te interesa puedo mandar el código donde bajo el archivo, para aportar.

            Ahora me gustaría saber si haz logrado bajar los documentos de proveedores desde SII, eso (y otras muchas cosas, como aprender a consultar documentos enviados, etc.) me interesaría aprender, estoy entendiendo como trabaja la facturación para crear unas clases en php que permitan trabajar con con los dte, y si es posible armar un desarrollo que permita funcionar a las pymes.

            ##############################################

            Codigo Aportado por Cristian Torres

            Rodrigo, tal como te comente adjunto el codigo para bajar clientes certificados desde SII.

            function download($url, $path, $strCookie)
            {
            $fp = fopen ($path, 'w+');
            $ch = curl_init();
            curl_setopt( $ch, CURLOPT_URL, $url );
            curl_setopt( $ch, CURLOPT_RETURNTRANSFER, false );
            curl_setopt( $ch, CURLOPT_BINARYTRANSFER, true );
            curl_setopt( $ch, CURLOPT_SSLVERSION,3);
            curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, false );
            curl_setopt( $ch, CURLOPT_COOKIE, $strCookie );

            curl_setopt( $ch, CURLOPT_CONNECTTIMEOUT, 60 );
            curl_setopt( $ch, CURLOPT_FILE, $fp );
            curl_exec( $ch );
            curl_close( $ch );
            fclose( $fp );

            if (filesize($path) > 0) return true;
            }

            la funcion la llamo de la sig. manera

            $url = 'https://palena.sii.cl/cvc_cgi/dte/ee_consulta_empresas_dwnld?NOMBRE_ARCHIVO=ce_empresas_dwnld_&#39;.date('Ymd').'.csv';
            $path = dirname(__FILE__) .'/descargas/empresas_'.date('Ymd').'.csv';
            $MyToken= substr($respuesta_sii_con_token, strpos($respuesta_sii_con_token, '<TOKEN>') + 7, strpos($respuesta_sii_con_token, '</TOKEN>') – strpos($respuesta_sii_con_token, '<TOKEN>') – 7);
            if (download($url, $path, $MyToken)){
            // tu codigo, si bajo el archivo
            }

            espero les sirva

            Saludos
            Cristian Torres

            • Edreams says

              Hola Cristian, mándame el código y lo coloco en el comentario que escribes esto pero codificado para que salga bien, mi e-mail es : rodrigo@edreams.cl como ya debes saber.

              Saludos
              Rod

              Sobre las otras consultas, vamos paso por paso :)

            • Edreams says

              Cristian, ahí te edite tú comentario y puse el codigo que me mandaste por interno. Gracias por compartir con todos lo que haces, eso debería ser replicado. Una hormiga sola no va muy lejos , pero millones(los Chilenos) SI QUE SI…..
              Por eso se agradece , no es muy visto que se comparta. Es como si estuvieramos inventando algo, y la verdad nadie inventa nada…..solo se descubre nuevamente o se le cambia algo…Lean a T Khun. Además la pelea de los IT de Chile debe ser con otros, somos en Chile a lo más 17 millones de habitantes…..de Tech muy pocos, pero en el Mundo hay cerca de 7 MIL MILLONES de habitantes……si quieren pelea, vamos a la pelea contra estos otros, entre Chilenos no es muy productiva la cosa que digamos. Además la mejor forma de aprender es haciendo y enseñando, dominando tu material….Así que para todos los otros que entran, o piden cosas solo por e-mail, ya se les dijo que NO por e-mail….por aquí, para que aprendan todos, y vamos aportando , pues una mano y la otra lavan la cara, y otras cosas tb.

              Otra cosa, si no lo saben…China e India tienen casi la misma cantidad de habitantes, en un tiempo corto mas serán entre ellos 2; China + India = 3 mil millones de habitantes . Si tenemos a África con 2 mil millones de habitantes mas, tendríamos esos 3 vectores China + India + África = 5 mil millones de habitantes. Para el 2020 se presume que habrán 15 Mega Ciudades en el Mundo, y casi todas estarán orientadas para el lado Asiático……. Brazil hoy por hoy tiene 192 millones de habitantes ; Argentina 41 millones ; Colombia 48 millones …..etc etc etc….

              Viva Chile
              Saludos
              Rod.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *