Comments (13)
Tenemos que descomprimir el zip y extraer el xml y procesarlo para extraer el detalle del error. tambien estoy trabajando en eso.
from demo.
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
Los codigos que te indique en el otro issue, son para las respuestas de sunat relacionado al envio y cdr del comprobante.
from demo.
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.
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.
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
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.
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.
Entonces crees que debería haber una modificación.. yo pienso que sí, porque le das más trabajo al proceso.
from demo.
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.
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.
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.
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.
from demo.
Echo en thegreenter/ws@4c917e8
from demo.
Related Issues (20)
- Nombre del archivo ZIP no es correo HOT 1
- ERROR EN FECHA DE COMUNICACION DE BAJAS HOT 4
- Facturacion Colombia HOT 1
- error \SoapClient.php on line 19 HOT 1
- error fetching http headers, en resúmenes HOT 3
- status-cdr.php ticket no existe HOT 1
- 3277 - La sumatoria del total valor de venta - operaciones gravadas de línea no corresponden al total
- Factura como anticipo HOT 11
- Nota de credito al contado HOT 6
- Factura con retencion para emitir a empresa que es agente de retención. HOT 2
- Factura credito con detraccion importe neto
- Condición para la forma de pago en la factura
- Generar Guia remision Transportista HOT 7
- Baja de Guias de Remision HOT 2
- Nuevas guias de remision HOT 1
- Monto de percepción no coincide con el total a pagar, debería ser 2.38? HOT 1
- Monto base de la percepción no debería incluir operaciones inafectas ni exoneradas. HOT 1
- Envio de Guia Remision Electronica HOT 4
- ERROR AL GENERAR GUIA HOT 1
- Descuento Lineal HOT 3
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from demo.