Skip to content

Instantly share code, notes, and snippets.

@baamenabar
Forked from nikoskip/valores_chilexpress.php
Last active March 31, 2019 02:27
Show Gist options
  • Save baamenabar/fcfaf53e8f585e9d2e62 to your computer and use it in GitHub Desktop.
Save baamenabar/fcfaf53e8f585e9d2e62 to your computer and use it in GitHub Desktop.
Obtener costos de envío por Chilexpress, usando el formulario de cálculo que tienen ellos. A falta de un API, hay que hacerse uno. Todo mérito a @nikoskip
<?php
/**
* Una simple función para obtener los costos de envío de un paquete mediante Chilexpress.
* Como única dependencia se necesita de la liberia PHP Simple HTML DOM Parser: http://simplehtmldom.sourceforge.net/
*
* Para poder comunicarse con Chilexpress, se debe tener la lista de todas las comunas que ellos utilizan y el código
* que le asignan a cada una. En este archivo, al final, podrás encontrar el listado, el cual podrás parsear fácilmente
*/
include 'simple_html_dom.php';
/**
* Obtiene costos de envío para un paquete dado
* @param string $comunaOrigen Código interno de Chilexpress para la comuna de origen
* @param string $comunaDestino Código interno de Chilexpress para la comuna de destino
* @param float $peso Peso en Kilogramos
* @param array $dimensiones Dimensiones del paquete (largo, alto, ancho) en centímetros
* @return mixed Un arreglo con los distintos valores y servicios o 'false' ante cualquier error
*/
function chilexpress_obtener_valores($comunaOrigen, $comunaDestino, $peso, $dimensiones){
$request = array(
'http' => array(
'method' => 'POST',
'header'=> 'Content-type: application/x-www-form-urlencoded\r\n',
'timeout' => 10, // Máximo 10 segundos esperando una respuesta
'content' => http_build_query(array(
'text_gls_origen' => trim($comunaOrigen),
'text_gls_destino' => trim($comunaDestino),
'text_gls_producto' => 'ENCOMIENDA',
'accion' => 'lista_cotizador',
'cmb_lst_origen' => trim($comunaOrigen),
'cmb_lst_destino' => trim($comunaDestino),
'cmb_lst_producto' => 3,
'peso' => $peso, //KG
'Dimension3' => $dimensiones[0], // Largo
'Dimension1' => $dimensiones[1], // Alto
'Dimension2'=> $dimensiones[2] // Ancho
)
)
)
);
$context = stream_context_create($request);
$htmlValores = @file_get_html('http://www.chilexpress.cl/cotizadorweb/nacional_resultado.asp', false, $context);
if($htmlValores !== false){
$filas = $htmlValores->find('table', 4)->find('tr');
foreach ($filas as $fila) {
$tipoEnvio = trim($fila->find('td', 0)->plaintext);
$valor = trim($fila->find('td', 1)->plaintext);
if($tipoEnvio !== 'Plazo Entrega' and $tipoEnvio !== '' and $tipoEnvio !== 'NO EXISTE COBERTURA PARA LA CIUDAD DE ORIGEN'){
$index = trim($comunaDestino);
if(!isset($destinosValores[$index])){
$destinosValores[$index] = array();
}
$valor = str_replace('$', '', $valor);
$valor = str_replace('.', '', $valor);
$destinosValores[$index][$tipoEnvio] = $valor;
}
}
if(isset($destinosValores)){
return reset($destinosValores);
}
}
return false;
}
/**
* Ejemplo de uso con un paquete que va desde Las Condes, Santiago a Ancúd, Chiloé
* con un peso de 1KG y con dimensiones de 10 x 10 x 10 cm
*
* var_dump(chilexpress_obtener_valores('LCON', 'ANCU', 1, array(10, 10, 10)));
*
* El output obtenido es:
*
* array (size=2)
* 'DIA HABIL SIGUIENTE' => string '5100' (length=4)
* 'ENTREGA DIA SABADO' => string '7650' (length=4)
*
* Tener en cuenta que sólo se listan los servicios disponibles para la comuna de destino,
* por lo que el largo del array puede variar.
*/
/*
*********** Listado de comunas ***********
|ACHAO;ACHA
|ALGARROBO;ALGA
|ALTO HOSPICIO;AHOS
|ALTO JAHUEL;AJAH
|ANCUD;ANCU
|ANDACOLLO;ANDA
|ANGOL;ANGO
|ANTOFAGASTA;ANTO
|ARAUCO;ARAU
|ARICA;ARIC
|ARTIFICIO;ARTI
|BALMACEDA;BALM
|BARRANCAS;BARR
|BATUCO;BATU
|BUIN;BUIN
|BULNES;BULN
|CABILDO;CABI
|CABRERO;CABR
|CALAMA;CALA
|CALBUCO;CALB
|CALDERA;CALD
|CALERA DE TANGO;CTAN
|CANETE;CANE
|CARAHUE;CARA
|CARTAGENA;CART
|CASABLANCA;CASA
|CASTRO;CAST
|CAUQUENES;CAUQ
|CERRILLOS;LOSC
|CERRO NAVIA;CNAV
|CHANARAL;CHAN
|CHEPICA;CHEP
|CHICUREO;CHIC
|CHIGUAYANTE;CHIG
|CHILE CHICO;CHCH
|CHILLAN;CHIL
|CHIMBARONGO;CHIM
|CHOLGUAN;CHOL
|CHONCHI;CHON
|COCHRANE;COCH
|CODELCO RADOMIRO TOMIC;RTOM
|COELEMU;COEL
|COIHUECO;COIC
|COINCO;COIN
|COLINA;COLI
|COLLIPULLI;COLL
|COLTAUCO;COLT
|COMBARBALA;COMB
|CONCEPCION;CONC
|CONCHALI;CCHA
|CONCON;CCON
|CONSTITUCION;CONS
|COPIAPO;COPI
|COQUIMBO;COQU
|CORONEL;CORO
|COYHAIQUE;COYH
|CUMPEO;CUMP
|CURACAUTIN;CURC
|CURACAVI;CRCV
|CURANILAHUE;CURA
|CURICO;CURI
|DALCAHUE;DALC
|DIEGO DE ALMAGRO;DIEG
|DONIHUE;DONI
|EL BELLOTO;ELBE
|EL BOSQUE;ELBO
|EL CARMEN;ECAR
|EL MELON;EMEL
|EL MONTE;ELMO
|EL PAICO;ELPA
|EL QUISCO;QSCO
|EL SALADO;ESAL
|EL SALVADOR;ELSA
|EL TABITO;TABI
|EL TABO;TABO
|ENTRE LAGOS;ELAG
|ESTACION CENTRAL;ECEN
|ESTACION PAIPOTE;EPAI
|FREIRE;FRER
|FREIRINA;FREI
|FRUTILLAR;FRUT
|FUERTE BAQUEDANO;FBAQ
|FUTRONO;FUTR
|GORBEA;GORB
|GRANEROS;GRAN
|HIJUELAS;HIJU
|HORNOPIREN;HORP
|HUALPEN;HPEN
|HUASCO;HUAS
|HUECHURABA;HUEC
|ILLAPEL;ILLA
|INDEPENDENCIA;INDE
|IQUIQUE;IQUI
|ISLA DE MAIPO;IMAI
|ISLA NEGRA;INEG
|ISLA TEJA;ITEJ
|ITAHUE;ITAH
|LA CALERA;LACA
|LA CISTERNA;LACI
|LA CRUZ;LACR
|LA FLORIDA;LAFL
|LA GRANJA;LAGR
|LA JUNTA;LAJU
|LA LIGUA;LALI
|LA PINTANA;LAPI
|LA REINA;LARE
|LA SERENA;LASE
|LA UNION;LAUN
|LAGO RANCO;LRAN
|LAJA;LAJA
|LAMPA;LAMP
|LANCO;LANC
|LAS CABRAS;LCAB
|LAS CONDES;LCON
|LAS CRUCES;LCRU
|LAUTARO;LAUT
|LEBU;LEBU
|LIMACHE;LIMA
|LINARES;LINA
|LITUECHE;LCHE
|LLANQUIHUE;LLAN
|LLAY LLAY;LLAY
|LLO LLEO;LLOL
|LO BARNECHEA;LOBA
|LO ESPEJO;LOES
|LO MIRANDA;LOMI
|LO PRADO;LOPR
|LOLOL;LOLO
|LONCOCHE;LONC
|LONGAVI;LONG
|LONGOVILO;LONV
|LONQUEN;LONQ
|LONTUE;LONT
|LOS ANDES;LAND
|LOS ANGELES;LANG
|LOS LAGOS;LLAG
|LOS MUERMOS;LMUE
|LOS VILOS;LVIL
|LOTA;LOTA
|MACHALI;MACH
|MACUL;MACU
|MAFIL;MAFI
|MAIPU;MIPU
|MALLOA;MALO
|MALLOCO;MALL
|MARCHIGUE;MARC
|MARIA ELENA;MARI
|MAULLIN;MAUL
|MEJILLONES;MEJI
|MELINKA;MELK
|MELIPILLA;MELI
|MININCO;MINI
|MOLINA;MOLI
|MONTE PATRIA;MOPA
|MULCHEN;MULC
|NACIMIENTO;NACI
|NANCAGUA;NANC
|NATALES;PNAT
|NOGALES;NOGA
|NOS;NOSO
|NUEVA ALDEA;NALD
|NUEVA IMPERIAL;NVAI
|NUNOA;NUNO
|OLIVAR;OLIV
|OLMUE;OLMU
|OSORNO;OSOR
|OVALLE;OVAL
|PADRE HURTADO;PHUR
|PADRE LAS CASAS;PLCA
|PAILLACO;PAIL
|PAINE;PAIN
|PAIPOTE;PAIP
|PALMILLA;PALM
|PANGUIPULLI;PANG
|PARGUA;PARG
|PARRAL;PARR
|PEDRO AGUIRRE CERDA;PEDR
|PELEQUEN;PELE
|PEMUCO;PEMU
|PENABLANCA;PBLA
|PENAFLOR;PENA
|PENALOLEN;PLOL
|PENCO;PENC
|PERALILLO;PERA
|PEUMO;PEUM
|PICA;PICA
|PICHIDEGUA;PICD
|PICHILEMU;PICH
|PINTO;PINT
|PIRQUE;PIRQ
|PITRUFQUEN;PITR
|PLACILLA QUINTA REGION;PLAV
|PLACILLA SEXTA REGION;PLAC
|PORVENIR;PORV
|POZO ALMONTE;POZO
|PROVIDENCIA;PROV
|PUCHUNCAVI;PUCH
|PUCON;PUCO
|PUDAHUEL;PUDA
|PUEBLO SECO;PSEC
|PUENTE ALTO;PALT
|PUERTO AGUIRRE;PAGU
|PUERTO AYSEN;PAYS
|PUERTO CHACABUCO;PCHA
|PUERTO CISNES;PCIS
|PUERTO MONTT;PMON
|PUERTO VARAS;PVAR
|PUERTO WILLIAMS;PWIL
|PUNITAQUI;PUNI
|PUNTA ARENAS;PUNT
|PUREN;PURE
|PURRANQUE;PURR
|PUTRE;PUTR
|PUYUHUAPI;PUYU
|QUELLON;QUEL
|QUEMCHI;QUEM
|QUEPE;QUEP
|QUILICURA;QILI
|QUILLON;QULL
|QUILLOTA;QLTA
|QUILPUE;QUIL
|QUINTA DE TILCOCO;QTIL
|QUINTA NORMAL;QNOR
|QUINTERO;QUIN
|QUIRIHUE;QUIR
|QUIRIQUINA;QUIQ
|RANCAGUA;RANC
|RECOLETA;RECO
|RENACA;RENA
|RENAICO;RNCO
|RENCA;RENC
|RENGO;RENG
|REQUINOA;REQU
|RIO BUENO;RIOB
|RIO NEGRO;RNEG
|ROMERAL;ROME
|ROSARIO;ROSA
|SALAMANCA;SALA
|SAN ANTONIO;SANT
|SAN BERNARDO;SBER
|SAN CARLOS;SCAR
|SAN CLEMENTE;SCLE
|SAN FELIPE;SFEL
|SAN FERNANDO;SFER
|SAN FRANCISCO DE LIMACHE;SFLI
|SAN FRANCISCO DE MOSTAZAL;SFRA
|SAN IGNACIO;SIGN
|SAN JAVIER;SJAV
|SAN JOAQUIN;SJOA
|SAN JOSE DE LA MARIQUINA;SJMA
|SAN MIGUEL;SMIG
|SAN PABLO;SPAB
|SAN PEDRO DE ATACAMA;SPAT
|SAN PEDRO DE LA PAZ;SPED
|SAN PEDRO QUINTA REGION;SPDO
|SAN RAMON;SRAM
|SAN ROSENDO;SANR
|SAN SEBASTIAN;SSEB
|SAN VICENTE DE TAGUA TAGUA;SVIC
|SANTA BARBARA;SBAR
|SANTA CRUZ;SCRU
|SANTA JUANA;SJUN
|SANTIAGO CENTRO;STGO
|SANTO DOMINGO;SDGO
|TALAGANTE;TALA
|TALCA;TALC
|TALCAHUANO;THNO
|TALTAL;TALT
|TEMUCO;TEMU
|TENO;TENO
|TIERRA AMARILLA;TAMA
|TIL TIL;TILT
|TOCOPILLA;TOCO
|TOME;TOME
|TONGOY;TONG
|TRAIGUEN;TRAI
|VALDIVIA;VALD
|VALLENAR;VALL
|VALPARAISO;VALP
|VICTORIA;VICT
|VICUNA;VICU
|VILLA ALEGRE;VALG
|VILLA ALEMANA;VALE
|VILLA MANIHUALES;VMAN
|VILLARRICA;VILL
|VINA DEL MAR;VINA
|VITACURA;VITA
|YUMBEL;YUMB
*/
@dsalgadoh
Copy link

Hola Funciona aun? Me da error 500

@draveau
Copy link

draveau commented Sep 25, 2017

Hola,
disculpen por favor mi desconocimiento: ¿cómo se integra esta función a Woocommerce, al formulario de checkout y proceso de compra? Imagino que tengo que copiar y pegar el código dentro de functions.php de mi theme WordPress, no?

Les agradecería su orientación al respecto.
Un abrazo,
Daniel

@CarlosAyala
Copy link

CarlosAyala commented Jan 3, 2018

@dsalgadoh @draveau
Este enfoque ya no sirve, porque se cambio el formulario en la pagina de chilexpress.
Yo hice una pequeña clase para el calculo de tarifa, espero que le sirva al que pase por aquí.

https://github.com/CarlosAyala/chilexpress-php-tarifaenvio

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment