Giter Club home page Giter Club logo

Comments (13)

sysarp avatar sysarp commented on September 25, 2024 1

Tenemos que descomprimir el zip y extraer el xml y procesarlo para extraer el detalle del error. tambien estoy trabajando en eso.

from demo.

giansalex avatar giansalex commented on September 25, 2024

El success solo indica que la conexión con Sunat se realizó correctamente y se obtuvo respuesta. Por otro lado el codigo que retorna statusCode, puede tener los siguientes valores
image
Los codigos que te indique en el otro issue, son para las respuestas de sunat relacionado al envio y cdr del comprobante.

from demo.

sysarp avatar sysarp commented on September 25, 2024

mmm si ps pero ahora sunat esta devolviendo el valor 0004.

y a mi me devuelve esto
#####################################################################
<b#>Notice<#/b>: Undefined property: stdClass::$content in /vendor/greenter/ws/src/Ws/Services/ExtService.php on line 35

{"Estado":"Cargado","Descripcion":"Documento generado. Ticket :201802665555249 Codigo: 0004 Proceso no definido por sunat","FechaHora":"2018-09-11 12:59:18","data":{"rsCodigo":"0004","rsDescripcion":"Ticket :201802665555249 Codigo: 0004 Proceso no definido por sunat"},"Total":1}
#####################################################################

ESTA RESPUESTA ES MEDIANTE SOAPUI
<#S#:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Body>
<ns0:getStatusResponse xmlns:ns0="http://service.sunat.gob.pe">

< statusCode >0004</#statusCode>
< statusMessage >La constancia existe</#statusMessage>

</ns0:#getStatusResponse>
</S:Body>
<#S#:Envelope>

#####################################################################
y mi codigo es este:

use Greenter\Ws\Services\ExService;
use Greenter\Ws\Services\SoapClient;
use Greenter\Ws\Services\SunatEndpoints;

$filename = null;
function savedFile($filename, $content){
$pathZip = DIR.'/cache/'.$filename;
file_put_contents($pathZip, $content);
}

function process($fields){
global $filename;
$ws = new SoapClient(SunatEndpoints::FE_CONSULTA_CDR.'?wsdl');
$ws->setCredentials('xxxxxxxxxxxxxxxxxxx','xxxxx');
$service = new Greenter\Ws\Services\ExtService();
$arguments = [
$fields['ticket']
];

/*if (isset($fields['cdr'])) {
	$result = $service->getStatusCdr(...$arguments);
	if ($result->getCdrZip()) {
	    $filename = 'R-'.implode('-', $arguments).'.zip';
	    savedFile($filename, $result->getCdrZip());
	}
	return $result;
}*/

return $service->getStatus(...$arguments);
}

function DocGetStatus($args){
try{
$DOC = $args;
$params = array(
'ticket' => $DOC['DocTicket']
);
$rsSunat = process($params);

	if($rsSunat->isSuccess()){
		$codigo = $rsSunat->getCode();
		$mesaje = '';
		switch($codigo){
			case '0':
				$mensaje = 'Proceso correctamente';
				break;
			case '98':
				$mensaje = 'En proceso';
				break;
			case '99':
				$mensaje = 'Proceso con errores';
				break;
			default:
				$mensaje = 'Proceso no definido por sunat';
				break;				
		}

		$json = array();
		$json["Estado"] = "Cargado";
		$json['data']['rsCodigo'] = $codigo;
		$json['data']['rsDescripcion'] =  'Ticket :'.$DOC['DocTicket'].' Codigo: '. $codigo.' '. $mensaje;
		return $json;
	}else{
		$error = $rsSunat->getError();
		throw new Exception("Error " . $error->getCode() . " | " .$error->getMessage());
	}
}catch(Exception $e){
	$json = array();
	$json["Estado"] = "Error";
	$json['data']['rsCodigo'] = $e->getCode();
	$json['data']['rsDescripcion'] = $e->getMessage();
	return $json;
}

}

Alguna sugerencia, GRACIAS

from demo.

giansalex avatar giansalex commented on September 25, 2024

Creo que estas confundiendo la ruta del servicio, FE_CONSULTA_CDR es para consultar el estado de una factura (+NCR, +NDB) , para consultar el estado de resumen de boletas /comunicacion de baja, se usa la misma ruta con la que envias facturas, ncr, ndb, resumen, bajas: FE_PRODUCCION, ese metodo getStatus existe en See, no necesitas implementarlo con ExtService

from demo.

thefantas avatar thefantas commented on September 25, 2024

El success solo indica que la conexión con Sunat se realizó correctamente y se obtuvo respuesta. Por otro lado el codigo que retorna statusCode, puede tener los siguientes valores
image
Los codigos que te indique en el otro issue, son para las respuestas de sunat relacionado al envio y cdr del comprobante.

Así es, pero tengo que hacer una correción, cuando haces getstatus en FE_PRODUCCION no siempre el code es 0, 98 ó 99, yo guardo en un log todas las consultas por getStatus y este es un ejemplo.
[content] => �[brG­ž‡±ŠË^.......
......R-205XXXXXXXXXXX-RA-20180910-000XX.xmlPK�� � � Q �
[statusCode] => 99
)

)

Tue, 11 Sep 2018 03:38:22 -0500stdClass Object
(
[status] => stdClass Object
(
[content] => �[brG­ž‡±ŠË^
[statusCode] => 0127
)

)

Así que cuando dices que sólo envia los códigos (que mismo manual dice) es incorrecto.
y para efectos prácticos el issuccess debería indicar éxito cuando realmente sea así, porque luego tienes que hacer doble consulta. ejm.

if($rsSunat->isSuccess()){
    //Aquí tendrías que hacer el filtro a $code.. si es 0, 98, 99.. y otra vez las excepciones y/o rechazos
} else {
   // muchas veces aquí también muestra errores soap con excepciones. (ejm password incorrecto).
    var_dump($rsSunat->getError());
}

en cambio si haces la modificación que propuse (en sendbill, extservices) tendrías un issuccess con garantía que existe un CDR con estado 0 ó 99 y evitas hacer doble filtro a las excepciones.

from demo.

giansalex avatar giansalex commented on September 25, 2024

En sendBill siempre devuelve un CDR, alli el isSuccess() indicaria que tambien hay CDR, para el caso de getStatus, el código que devuelve 98 - En proceso, no seria valido colocar al success = false, porque no es un error, para el caso 99 y otros que no sean 0, si seria mas viable.

from demo.

thefantas avatar thefantas commented on September 25, 2024

Entonces crees que debería haber una modificación.. yo pienso que sí, porque le das más trabajo al proceso.

from demo.

giansalex avatar giansalex commented on September 25, 2024

Si solo quieres el CDR sin importar el código o isSuccess, validando que el campo getCdrZip sea diferente de null seria suficiente para ti.

from demo.

thefantas avatar thefantas commented on September 25, 2024

Lo que busco es que que "in_array($code, range(100 , 1999))" lo marque como error y no lo procese al isuccess como true, ya lo tengo implementado pero tal vez pueda quitar muchos dolores de cabeza a otros.
Saludos.

from demo.

giansalex avatar giansalex commented on September 25, 2024

y cual es la finalidad de eso, si lo que quieres es el CDR, eso es con getCdrZip

Aun asi tendré en cuenta tus sugerencias para futuros cambios, pero ahora la prioridad es el UBL 2.1

from demo.

thefantas avatar thefantas commented on September 25, 2024

Si yo quiero solo el CDR hago con getCdrzip, pero yo no solo quiero el CDR sino el error que me pueda estar dando la sunat, te hago un ejemplo más.

if ($result->isSuccess() && !empty($result->getCdrResponse())) { //lo mismo q getCdrzip
    //procesa sólo el $code del CDR... dentro de este CDR también hay $code con excepción (en otro post 
ya lo mostré).. entonces vuelve a procesar una excepción; y aquí está el detalle, pienso que toda excepción 
debe hacerse abajo cuando issuccess es false.
} else {
   //pero aquí sunat también manda excepciones como te mostré en el log. ejm server ocupado, password, etc..
     var_dump($result->getError()->getCode());
}

from demo.

thefantas avatar thefantas commented on September 25, 2024

from demo.

giansalex avatar giansalex commented on September 25, 2024

Echo en thegreenter/ws@4c917e8

from demo.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.