Question:
Date: 07-05-2019 12:40:07
(In Spanish)
Lo que pasa es que requiero hacer una petición a una REST API, la cual se debe autenticar con Authorization Basic y en el body debe agregarse un archivo JSON, buscando en internet encontré varios ejemplos, pero hasta el m
momento no he logrado hacerlo funcionar. Me gustaria saber si alguien tiene algun ejemplo sobre este tema.
Este es el código que llevo hasta el momento
En este link se puede ver el comportamiento del código
Prueba
De antemano gracias
LEANDRO AREVALO Votes: 0 - Answers: 5 - Views: 14 Share on: Google Facebook Twitter LinkedIn Link
API REST con Authorization Basic [Resolved]
Buenas tardes para todosLo que pasa es que requiero hacer una petición a una REST API, la cual se debe autenticar con Authorization Basic y en el body debe agregarse un archivo JSON, buscando en internet encontré varios ejemplos, pero hasta el m
momento no he logrado hacerlo funcionar. Me gustaria saber si alguien tiene algun ejemplo sobre este tema.
Este es el código que llevo hasta el momento
//Encabezado factura $encabezado["codmoneda"] = "COP"; $encabezado["comentarios"] = ""; $encabezado["emisor"] = "12354654"; $encabezado["factortrm"] = 0; $encabezado["fecha"] = "2019-04-12"; $encabezado["fvence"] = "2019-04-12"; $encabezado["idsuc"] = 1; $encabezado["idvendedor"] = 0; $encabezado["iva"] = 19000; $encabezado["nit"] = 784585; $encabezado["numero"] = 993005001; $encabezado["ordencompra"] = ""; $encabezado["prefijo"] = "FVE"; $encabezado["subtotal"] = 200000; $encabezado["sucursal"] = 0; $encabezado["total"] = 219000; $encabezado["usuario"] = ""; $encabezado["totalDet"] = 3; $encabezado["totalImp"] = 2; //Datos empresa $sucursal["ciudad"] = "BOGOTA D.C."; $sucursal["codcliente"] = ""; $sucursal["departamento"] = "BOGOTA D.C."; $sucursal["direccion1"] = "CALLE LA BENDICION # 55 - 55"; $sucursal["dpto"] = "11"; $sucursal["email"] = ""; $sucursal["emailfe"] = "leandroalfonso111@hotmail.com.com"; $sucursal["idsuc"] = 0; $sucursal["idvendedor"] = 0; $sucursal["movil"] = "3214567849"; $sucursal["mun"] = "001"; $sucursal["razonsocial"] = "EL TALES"; $sucursal["telefono1"] = "2100518"; $sucursal["telefono2"] = ""; //Datos tercero o cliente $tercero["apl2"] = ""; $tercero["apli1"] = "TALES"; $tercero["comentarios"] = ""; $tercero["dv"] = ""; $tercero["identificacion"] = 56456465; $tercero["idtipoempresa"] = 4; $tercero["nom1"] = "TALES"; $tercero["nom2"] = ""; $tercero["razonsocial"] = EL TALES"; $tercero["tdoc"] = 13; $tercero["tipopersona"] = "N"; //impuestos en variables $imp_1["base_calculo"] = 100000; $imp_1["porciva"] = 19; $imp_1["valor"] = 19000; $imp_2["base_calculo"] = 100000; $imp_2["porciva"] = 0; $imp_2["valor"] = 0; $impuestos = array(); array_push($impuestos , $imp_1); array_push($impuestos , $imp_2); //Listado de articulos a facturar //articulo 1 $detal_1["adicional"] = "linea1"; $detal_1["cantidad"] = 10; $detal_1["idproducto"] = "01"; $detal_1["idunidad"] = "Und"; $detal_1["iva"] = 19000; $detal_1["ivausd"] = 0; $detal_1["nombreproducto"] = "Producto1"; $detal_1["operacion"] = "SA"; $detal_1["porcdcto"] = 0; $detal_1["porciva"] = 19; $detal_1["pos"] = 1; $detal_1["precio"] = 10000; $detal_1["preciousd"] = 0; $detal_1["subtotal"] = 100000; $detal_1["subtotalusd"] = 0; //articulo 2 $detal_2["adicional"] = "linea2"; $detal_2["cantidad"] = 1; $detal_2["idproducto"] = "02"; $detal_2["idunidad"] = "EA"; $detal_2["iva"] = 0; $detal_2["ivausd"] = 0; $detal_2["nombreproducto"] = "Producto2"; $detal_2["operacion"] = "SA"; $detal_2["porcdcto"] = 0; $detal_2["porciva"] = 0; $detal_2["pos"] = 1; $detal_2["precio"] = 60000; $detal_2["preciousd"] = 0; $detal_2["subtotal"] = 60000; $detal_2["subtotalusd"] = 0; //articulo 3 $detal_3["adicional"] = "linea3"; $detal_3["cantidad"] = 2; $detal_3["idproducto"] = "03"; $detal_3["idunidad"] = "ME"; $detal_3["iva"] = 0; $detal_3["ivausd"] = 0; $detal_3["nombreproducto"] = "Producto3"; $detal_3["operacion"] = "SA"; $detal_3["porcdcto"] = 0; $detal_3["porciva"] = 0; $detal_3["pos"] = 1; $detal_3["precio"] = 20000; $detal_3["preciousd"] = 0; $detal_3["subtotal"] = 40000; $detal_3["subtotalusd"] = 0; $detalle = array(); array_push($detalle , $detal_1); array_push($detalle , $detal_2); array_push($detalle , $detal_3); //agregamos la informacion al json documento $documento["detalle"] = $detalle; $documento["encabezado"] = $encabezado; $documento["sucursal"] = $sucursal; $documento["tercero"] = $tercero; $documento["impuesto"] = $impuestos; //creamos el json con el documento final $final["documento"] = $documento; $cuerpo = json_encode($final); $curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_URL => "https://ws.proveedor-prueba.co/Factura/nrodocumento", CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => "", CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 30, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => "POST", CURLOPT_POSTFIELDS => $cuerpo, CURLOPT_HTTPHEADER => array( "Accept: **", "Authorization: Basic dVZUNEh5K3JGdExKRDVp09", "Cache-Control: no-cache", "Connection: keep-alive", "Host: ws.dsnube.co", "Postman-Token: 9d1a43d0-8199-48c3-b7a7-41ce21766ba3,c860d256-7167-4b16-bde4-513bde1763f9", "User-Agent: PostmanRuntime/7.11.0", "accept-encoding: gzip, deflate", "cache-control: no-cache", "content-length: 2346" ), )); $response = curl_exec($curl); $err = curl_error($curl); curl_close($curl); if ($err) { echo "cURL Error #:" . $err; } else { echo $response; }
En este link se puede ver el comportamiento del código
Prueba
De antemano gracias
LEANDRO AREVALO Votes: 0 - Answers: 5 - Views: 14 Share on: Google Facebook Twitter LinkedIn Link
Answers:
-
Date: 08-05-2019 08:55:00 Saludos, trate de entrar a la pagina que pusiste pero se queda cargando....
Te recomiendo para probar : Insomnia
Recomiendo para el acceso usar mejor tokens o parametro referente a ello.
Te dejo una url muy bueno de rest con PHP
Aqui
Saludos™ Votes: 0 - Link answer -
Date: 08-05-2019 09:32:04 Ernesto muchas gracias por el interés:
Efectivamente, eso es lo que sucede, se queda cargando y despues de un bueeeeeen rato, devuelve este error:
cURL Error #:Operation timed out after 30000 milliseconds with 0 bytes received
Por otro lado ya hice la prueba con insonmia, pero el resultado es el mismo.
Voy a leer el articulo y comento.
Saludos Votes: 0 - Link answer -
Date: 08-05-2019 12:26:14 Saludos, entonces primero ve en tu php que este activo el CURL
Segundo ponle tiempo maximo de espera...
Y tercero ve si tienes ciclo en algun lado forzal a salir (un numero maximo de repeticiones o intentos)
Por lo regular cuando se queda asi es por ello...
No se si pusiste todo el codigo... pero al intentar leer ips luego se queda asi...
Saludos...
Stryfe™ Votes: 0 - Link answer -
Date: 08-05-2019 14:16:09 Ernesto de nuevo gracias por el interés...
Efectivamente, le coloque el tiempo de espera y le quite otras opciones innecesarias del encabezado y funciono. También hable con el desarrollador del WS y me dijo que tenía otros errores en el body de la petición.
curl_setopt_array($curl, array( CURLOPT_URL => "https://ws.proveedor-prueba.co/Factura/nrodocumento", CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => "", CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 120, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => "POST", CURLOPT_POSTFIELDS => $cuerpo, CURLOPT_HTTPHEADER => array( "Authorization: Basic dVZUNEh5K3JGdExKRDVZz09", "cache-control: no-cache" ), ));
Muchas Gracias Votes: 0 - Link answer -
Date: 08-05-2019 14:22:43 Tienes dos problemas.
1. el sitio https://ws.dsnube.co está utilizando un certificado de una compañía llamada Let's Encrypt.
Tienes que hacer es darle a tu código el certificado que necesita para validar la petición.
Descarga el archivo .pem del sitio (Dándole click al candado que aparece junto a la URL) y agrégalo a tu petición con las siguientes opciones:
//Suponiendo que el certificado está en el mismo directorio que tu archivo: CURLOPT_SSL_VERIFYHOST => __DIR__ . DS . 'wsdsnubeco.pem', CURLOPT_SSL_VERIFYPEER => __DIR__ . DS . 'wsdsnubeco.pem',
2. El otro error sucede porque copiaste los encabezados de la petición de algún ejemplo con una petición diferente. Tus encabezados mandan datos incorrectos e innecesarios. Lo único que debes mandar es el encabezado de autorización.
Una vez corregidos ambos detalles ya se recibe el mensaje de vuelta:
{"error":"Factura ya existe"}
Te dejo el código functionando aquí para que le des un vistazo.
<?php //Encabezado factura $encabezado['codmoneda'] = 'COP'; $encabezado['comentarios'] = ''; $encabezado['emisor'] = '830106032'; $encabezado['factortrm'] = 0; $encabezado['fecha'] = '2019-04-12'; $encabezado['fvence'] = '2019-04-12'; $encabezado['idsuc'] = 1; $encabezado['idvendedor'] = 0; $encabezado['iva'] = 19000; $encabezado['nit'] = 78903450; $encabezado['numero'] = 993005001; $encabezado['ordencompra'] = ''; $encabezado['prefijo'] = 'FVE'; $encabezado['subtotal'] = 200000; $encabezado['sucursal'] = 0; $encabezado['total'] = 219000; $encabezado['usuario'] = ''; $encabezado['totalDet'] = 3; $encabezado['totalImp'] = 2; //Datos empresa $sucursal['ciudad'] = 'BOGOTA D.C.'; $sucursal['codcliente'] = ''; $sucursal['departamento'] = 'BOGOTA D.C.'; $sucursal['direccion1'] = 'CALLE 111 # 23 - 55'; $sucursal['dpto'] = '11'; $sucursal['email'] = ''; $sucursal['emailfe'] = 'hymplus@outlook.com'; $sucursal['idsuc'] = 0; $sucursal['idvendedor'] = 0; $sucursal['movil'] = '312340890'; $sucursal['mun'] = '001'; $sucursal['razonsocial'] = 'MORALES NESTOR'; $sucursal['telefono1'] = '2100518'; $sucursal['telefono2'] = ''; //Datos tercero o cliente $tercero['apl2'] = ''; $tercero['apli1'] = 'MORALES'; $tercero['comentarios'] = ''; $tercero['dv'] = ''; $tercero['identificacion'] = 78903450; $tercero['idtipoempresa'] = 4; $tercero['nom1'] = 'NESTOR'; $tercero['nom2'] = ''; $tercero['razonsocial'] = 'MORALES NESTOR'; $tercero['tdoc'] = 13; $tercero['tipopersona'] = 'N'; //impuestos en variables $imp_1['base_calculo'] = 100000; $imp_1['porciva'] = 19; $imp_1['valor'] = 19000; $imp_2['base_calculo'] = 100000; $imp_2['porciva'] = 0; $imp_2['valor'] = 0; $impuestos = [$imp_1, $imp_2]; //Listado de articulos a facturar //articulo 1 $detal_1['adicional'] = 'linea1'; $detal_1['cantidad'] = 10; $detal_1['idproducto'] = '01'; $detal_1['idunidad'] = 'Und'; $detal_1['iva'] = 19000; $detal_1['ivausd'] = 0; $detal_1['nombreproducto'] = 'Producto1'; $detal_1['operacion'] = 'SA'; $detal_1['porcdcto'] = 0; $detal_1['porciva'] = 19; $detal_1['pos'] = 1; $detal_1['precio'] = 10000; $detal_1['preciousd'] = 0; $detal_1['subtotal'] = 100000; $detal_1['subtotalusd'] = 0; //articulo 2 $detal_2['adicional'] = 'linea2'; $detal_2['cantidad'] = 1; $detal_2['idproducto'] = '02'; $detal_2['idunidad'] = 'EA'; $detal_2['iva'] = 0; $detal_2['ivausd'] = 0; $detal_2['nombreproducto'] = 'Producto2'; $detal_2['operacion'] = 'SA'; $detal_2['porcdcto'] = 0; $detal_2['porciva'] = 0; $detal_2['pos'] = 1; $detal_2['precio'] = 60000; $detal_2['preciousd'] = 0; $detal_2['subtotal'] = 60000; $detal_2['subtotalusd'] = 0; //articulo 3 $detal_3['adicional'] = 'linea3'; $detal_3['cantidad'] = 2; $detal_3['idproducto'] = '03'; $detal_3['idunidad'] = 'ME'; $detal_3['iva'] = 0; $detal_3['ivausd'] = 0; $detal_3['nombreproducto'] = 'Producto3'; $detal_3['operacion'] = 'SA'; $detal_3['porcdcto'] = 0; $detal_3['porciva'] = 0; $detal_3['pos'] = 1; $detal_3['precio'] = 20000; $detal_3['preciousd'] = 0; $detal_3['subtotal'] = 40000; $detal_3['subtotalusd'] = 0; $detalle = [ $detal_1, $detal_2, $detal_3, ]; //agregamos la informacion al json documento $documento['detalle'] = $detalle; $documento['encabezado'] = $encabezado; $documento['sucursal'] = $sucursal; $documento['tercero'] = $tercero; $documento['impuesto'] = $impuestos; //creamos el json con el documento final $final['documento'] = $documento; $cuerpo = json_encode($final); $curl = curl_init(); $certificate_location = __DIR__ . DS . 'wsdsnubeco.pem'; curl_setopt_array($curl, [ CURLOPT_URL => 'https://ws.dsnube.co/dsrest/dsdatasnapfe.dll/datasnap/rest/TFactura/docfe', CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => '', CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 30, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => 'POST', CURLOPT_POSTFIELDS => $cuerpo, CURLOPT_SSL_VERIFYHOST => __DIR__ . DS . 'wsdsnubeco.pem', CURLOPT_SSL_VERIFYPEER => __DIR__ . DS . 'wsdsnubeco.pem', CURLOPT_HTTPHEADER => [ 'Authorization: Basic dVZUNEh5K3JGdExKRDVpVUh2SENkVTZzcmhPeHpJa3B5R2M3ZWVuWWVBeHhMOHJ2ejl3QW53endmUW05OGFiNTpkS3cxWXNHRXJyNUxaN3d4TCtudFhrTTF6L3YrT2RnSjM2UGdSWWF6L3pNdmRQMUFaRExKdmRNL3VsbEZlQWNBanY1UHVycC96ajhrL2RHRklSZStwZz09', ], ]); $response = curl_exec($curl); $err = curl_error($curl); curl_close($curl); if ($err) { echo 'cURL Error #:' . $err; } else { echo $response; }
Votes: 2 - Link answer
To actively participate in the community first must authenticate, enter the system.Sign In