Giter Club home page Giter Club logo

demo's People

Contributors

erajuan avatar fabriciojd avatar giansalex avatar thefantas avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

demo's Issues

atributos adicionales en el tag InvoiceTypeCode

Una consulta @giansalex, el generador xml greenter, me genera esta etiqueta xml por ejemplo
<cbc:InvoiceTypeCode listID="0101">01</cbc:InvoiceTypeCode>

pero veo en otros xml y en el manual de la sunat que tiene unos datos adicionales por ejemplo:
<cbc:InvoiceTypeCode listID="0101"
listAgencyName="PE:SUNAT"
listName="SUNAT:Identificador de Tipo de Documento"
listURI="urn:pe:gob:sunat:cpe:see:gem:catalogos:catalogo01">01</cbc:InvoiceTypeCode>
La pregunta sería si de las 2 formas me la aceptaria la SUNAT en producción??

ExtService - Obtener error desde el CDR

No sería mejor poner en false a Success cuando el code de un ticket no es 0 ó 99.

Porque en la actualidad devuelve contradicciones y se tiene que hacer muchas condicionales... en cambio con esa modificación cuando detecta el code en ese rango lo cambia el Success a false, lo mismo se podría aplicar a BillSender (hasta se podría leer el CDR y según su code volver a poner false) y CDRstatus.

	    $code = $status->statusCode;
             $result
                ->setCode($code);
				
			switch (true) {
				case ($code == '0' || $code == '99'):
					$result
						->setSuccess(true);
					if (!empty($cdrZip)) {
						$result
							->setCdrResponse($this->extractResponse($cdrZip))
							->setCdrZip($cdrZip);
					}
				break;
				case ($code == '98'):
					$result->setError($this->getMessageError($code));
				break;
				case in_array($code, range(100 , 1999)): //excepción
					$result->setError($this->getMessageError($code));
				break;
				case in_array($code, range(2000 , 3999)): //rechazo
					$result->setError($this->getMessageError($code));
				break;
			}

            // if ($code == '0' || $code == '99') {
                // $result
                    // ->setCdrResponse($this->extractResponse($cdrZip))
                    // ->setCdrZip($cdrZip);
            //}

dudas y consultas

hola amigo tengo algunas dudas que quisiera me ayudaras:
primero en nota_credito ese esta variable
->setCodMotivo('07')

se refiere a esto?
captura

Importe Total percepcion/retencion incorrecto

object(Greenter\Model\Response\Error)#948 (2) { ["code":protected]=> string(4) "2667" ["message":protected]=> string(238) "Importe total percibido debe ser igual a la suma de los importes percibidos por cada documento relacionado. - Detalle: xxx.xxx.xxx value='ticket: 1537280062772 error: INFO : 2667 (nodo: "Perception/cbc:TotalInvoiceAmount" valor: "10.00")'" }
Time: 00:00:05:626

Voided.php ¿Generación o Comunicación?

    public function getName()
    {
        return $this->company->getRuc().'-'.$this->getXmlId();
    }

    /**
     * Get Id XML.
     *
     * @return string
     */
    public function getXmlId()
    {
        $parts = [
            'RA',
            $this->getFecComunicacion()->format('Ymd'),
            $this->getCorrelativo(),
        ];

        return join('-', $parts);
    }

Según el manual del programador SUNAT 2017 dice que la posición 16-23 del nombre del archivo enviado (y a la vez recibido R-) es el siguiente:

Fecha de la generación del archivo en formato
YYYYMMDD
Por lo que debería quedar así:

        $parts = [
            'RA',
            $this->setFecGeneracion()->format('Ymd'),
            $this->getCorrelativo(),
        ];

Y voided.php tiene dos fechas:

setFecGeneracion <-- Supuse que es la fecha en la que genera el documento de baja.
setFecComunicacion <-- La fecha del documento de baja (el día de la baja de los documentos).

¿Alguien puede aclarar qué significa setFecGeneracion y setFecComunicacion?
Saludos.

consultas

mi estimado vengo revisando tus librerias, y veo que envia directo a la sunat, hay alguna manera de guardarlo en formato xml y zip esas facturas ?

Guardar cdr de resumenes

Buenos días @giansalex , al momento de generar los resumenes la sunat me devuelve un ticket que lo consulto una hora después, ¿De qué manera puedo guardarlo sin tener que generar nuevamente todo el objeto del resumen?, adjunto foto de la función que dejaste de ejemplo.

image

Error: No tiene el perfil para enviar comprobantes electrónicos

hola amigo, no se si solo a mi me ocurre, pero ya actualice a 2.1 y cuando le doy a enviar en modo producción otra vez me dice:
Error: No tiene el perfil para enviar comprobantes electronicos - Detalle: Rejected by policy.
y ese error ya lo había corregido(no toque nada de las credenciales)

S.O.S

llevo dias intentando crear las facturas,firmarlas,enviarlas desde un formulario y nada :''(

setService not work

Como pueden ver en la documentaciónde PHP no debería tener efecto en el cliente SOAP porque siempre daría prioridad a la URL del fichero WSDL.

    public function setService($url)
    {
        $this->client->__setLocation($url);
    }

Llamar este método es opcional. El SoapClient utiliza la URL de conexión desde el fichero WSDL por defecto.

Consulta de Instalacion

Hola amigo, queria saber en que version de php esta desarrollado el proyecto, dado que lo probe en php 5.5 y 7.0 y en ninguna me corre

En php 5.5 me sale esto
Fatal error: Cannot use object of type DOMNodeList as array in C:\xampp\htdocs\factura\greenter-sample\vendor\greenter\ws\src\Ws\Reader\DomCdrReader.php on line 69
Time: 00:00:00:732

Y en php 7.0 en greenter-sample me sale esto
Ocurrío un error invocando el script
Time: 00:00:00:144

Gracias de antemano

verificar la respuesta de sunat (cdr)

hola amigo, cuando se envia un comprobante puede ser aceptado, alertado o con error

EJEMPLO DE ERROR "ALERTADO" (donde no hay cdr y esta mal construido el xml)

object(Greenter\Model\Response\Error)#191 (2) { ["code":protected]=> string(4) "3103" ["message":protected]=> string(270) "El producto del factor y monto base de la afectación del IGV/IVAP no corresponde al monto de afectacion de linea. - Detalle: xxx.xxx.xxx value='ticket: 1540309566050 error: Error en la linea: 1 Tributo: 1000: 3103 (nodo: "cac:TaxSubtotal/cbc:TaxAmount" valor: "36.00")'" }

CUANDO ES ACEPTADO:

Respuesta SUNAT:

ID: F001-123
CODE:0
DESCRIPTION:La Factura numero F001-123, ha sido aceptada

CUANDO HAY ERROR:

No esta autorizado a enviar comprobantes bajo el formato UBL 2.0. El ruc: 00000000000 debe generar su comprobante en la version UBL 2.1...
EL DETALLE ES QUE ALGUNOS ERRORES CUENTAN COMO "VALIDO" Y NO PUEDES VOLVER A ENVIAR CON ESA SERIE Y NUMERACIÓN. ENTONCES ESO DA UN PROBLEMA A LA HORA DE DETERMINAR CUALES SI DEBEN ALMACENARSE EN LA BD Y CUALES NO(para que no afecte a la serie y numeración y normal funcionamiento).
YA QUE EL SISTEMA QUE PERSONALMENTE HICE SOLO ALMACENA SI SE CUMPLE:
if ($res->isSuccess()) {
PERO NO DETERMINA SI ES ERROR O NO, BASTA QUE HAYA RESPUESTA Y YA SIGUE LOS DEMAS PASOS(Y AHI ES DONDE FALLA)
ENTONCES A TODO ESTO MI PREGUNTA ES NO EXISTEN "CODIGOS" EN LAS RESPUESTAS PARA DETERMINAR CUALES DEBEN ALMACENARSE Y CUALES NO PARA EVITAR LOS ERRORES DE SERIE Y NUMERACION AUTOMATICO?

OffTopic: Error 2223 - El archivo ya fue presentado anteriormente

Una consulta si de alguna manera perdí el ticket (ya sea por error del sistema o sunat) y cuando intento reenviar dice "2223 El archivo ya fue presentado anteriormente - El archivo ya fue presentado anteriormente" y al buscar dicho comprobante en la Sunat no existe.. ¿Qué medidas podría tomar?
Saludos.

Verificacion de estado de comprobantes emitidos

Saludos @giansalex,

Existe alguna forma de verificar ante la SUNAT el estado de los comprobantes emitidos (que no sea por la web de consulta validez)? ya que he podido darme cuenta que el ambiente de produccion no es tan estable como desarrollo y en algunos casos no se reciben las respuestas deseadas.

La SUNAT tiene disponibles 2 WS y no se si estan implementados en greenter

WS de consultas de validez y verificación de facturas electrónicas
https://e-factura.sunat.gob.pe/ol-it-wsconsvalidcpe/billValidService?wsdl

WS de consulta de CDR y estado de envío
https://e-factura.sunat.gob.pe/ol-it-wsconscpegem/billConsultService?wsdl

ERROR DE INSTALACION

Hola amigo me baje tu libreria de ejemplo y me sale los siguientes errores al consultar el envio de factura o cualquier otro elemento me sale este error:

captura de pantalla 2018-10-30 a la s 09 28 11

Y al momento de querer generar el pdf me sale este otro error, recien estoy comenzando hacer las pruebas con la misma.

captura de pantalla 2018-10-30 a la s 09 28 23

Aprovecho para agradecerte el gran trabajo que estas realizando y no dudes recibir mi donación cuand o termine mi proyecto y me caiga un billetito 👍

Codigo de Estado en GetStatus C.de Baja/Resumen

hola amigo, debido a las diferencias que hay en beta y producción estoy haciendo "pruebas solo en produccion", acabo de enviar una factura y al querer darle de baja me sale este error:
Fatal error: Uncaught TypeError: Argument 1 passed to Util::getResponseFromCdr() must be an instance of Greenter\Model\Response\CdrResponse, null given, called in C:\xampp\htdocs\mvc\models\facturas_model.php on line 106 and defined in C:\xampp\htdocs\mvc\src\Util.php:46

al parecer hay una respuesta pero con el script que tengo no logro capturarlo (no se si es succes o no o es succes false o true).
en este caso como obtendria esa respuesta ?

public function generar_baja($RA)
{

		$util = Util::getInstance();
		// Envio a SUNAT.
		$see = $util->getSee(SunatEndpoints::FE_PRODUCCION);
		$res = $see->send($RA);
		
		if ($res->isSuccess()) {
		$ticket = $res->getTicket();
		
		$result = $see->getStatus($ticket);
		if ($result->isSuccess()) {
		$cdr = $result->getCdrResponse();
		$nexus = "|".$util->getResponseFromCdr($cdr);    - > aca da el error 
		$this->sms = "correcto".$nexus;
		
		Util::writeXml($RA, $see->getFactory()->getLastXml());
		$pdf = $util->getPdf($RA);
		$util->showPdf($pdf, $RA->getName().'.pdf');  
		Util::writeCdr($RA, $result->getCdrZip());                               
		} else {
		$this->sms = $ticket."|".$nexus;
		}
		}else {
        
		$this->sms = $res->getError()->getMessage();
		
		}

	return $this->sms;	
}

URL de WebService SUNAT

hola he intentando enviar a la sunat y me mando este error
object(Greenter\Model\Response\Error)[115]
protected 'code' => string 'env:Client' (length=10)
protected 'message' => string 'Internal Error' (length=14)

Tipo de Documento en Boletas

hola amigo, queria preguntarte algo, cuando emito boletas de venta, puedo poner al cliente receptor con ruc "000000000" y razon social "publico en general"? es decir me rechaza eso en modo producción o me acepta

duda

hola amigo, ayudame con esto: al generar las boletas solo lo guardo en una bd para luego enviar el remunen diario: el problema es que al no enviar las boletas a sunat y no recibir el cdr no se si estan generadas correctamentes o tienen error como solucionaria eso, y las notas de debito o credito supongo que tampoco se envian y que se hacen en el resumen diario verdad ?

consulta

amigo donde puedo aprender como funcionan lo de las facturas exoneradas,gravadas, inafectas,con detraccion entre otras, se me hace complicado entender esos terminos y quisiera saber donde lo aprendiste o si pudieras darme algun link donde te expliquen eso por favor

Cdr null al consultar el estado en PRODUCCIÓN

error Argument 1 passed to $util->getResponseFromCdr() must be an instance of Greenter\Model\Response\CdrResponse, null given.

$see = $util->getSee(SunatEndpoints::FE_PRODUCCION);
$res = $see->send($sum);
$util->writeXml($sum, $see->getFactory()->getLastXml());
if ($res->isSuccess()) {
    /**@var $res \Greenter\Model\Response\SummaryResult*/
    $ticket = $res->getTicket();
    $result = $see->getStatus($ticket);
    if ($result->isSuccess()) {
        $cdr = $result->getCdrResponse();
        $util->writeCdr($sum, $result->getCdrZip());
        echo $util->getResponseFromCdr($cdr);
    } else {
        var_dump($result->getError());
    }
} else {
    var_dump($res->getError());
}

Consulta CDR

Estimado Gian
Me sale la siguiente pantalla al invocar "Consulta CDR", faltara instalar algo?

image

error de usuario al usar en producción

cree un usuario secundario con los permisos para comprobantes electronicos, subi el certificado en formato .cer y cambie de ::FE_BETA A ::FE_PRODUCCION y al momento de querer generar me da este error:
"no tiene el perfil para enviar comprobantes electronicos"

consulta

amigo tengo este codigo para obtener el codigo,nombre,y tipo de documento(1,factura,01)
captura

IssueDate diferente al Today

hola @giansalex , estoy generando los xml y me di cuenta que me genera la fecha del dia siguiente. cbc:IssueDate2019-03-05</cbc:IssueDate>, que podria hacer para que me tome la fecha del dia??.

como usar getStatusCdr - billConsultService

Hola Ginacarlos,
Estoy tratando de implementar la funcion getStatusCdr y aun no logro que funcione con tus clases.

$USER = 'XXXXXXX';//RUC Y USUARIO SUNAT
$PASS='XXXXXXXX'//CONTRASENIA
$wsClient = new SoapClient('https://e-factura.sunat.gob.pe/ol-it-wsconscpegem/billConsultService?wsdl');
//$wsClient->setService('https://e-factura.sunat.gob.pe/ol-ti-itcpfegem/billService');
$wsClient->setCredentials(USER,PASS);

$ExtService = new ExtService();
$ExtService->setClient($wsClient);
$cdr = $ExtService->getCdrStatus('20537897491','01','F001','1');

print_r($cdr->statusCdr);

y esto me devuelve error
Function ("setCredentials") is not a valid method for this service

ahora esto me funciona cuando envio el xml de ejemplo que indica sunat via la aplicacion SOAPUI

<soapenv:Envelope xmlns:ser="http://service.sunat.gob.pe" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
soapenv:Header
wsse:Security
<wsse:Username
Token>
wsse:UsernameXXXXXXXXXXXUSUARIO_SUNAT</wsse:Username>
wsse:PasswordXXXXXXXX</wsse:Password>
</wsse:UsernameToken>
</wsse:Security>
</soapenv:Header>
soapenv:Body
ser:getStatus
1028308796
01
f213
12345
</ser:getStatus>
</soapenv:Body>
</soapenv:Envelope>

duda

amigo disculpa la ignorancia, en la carpeta cache esta el html que pasa a convertirse en pdf ? mi duda es ese cache solo se genera una vez para cada tipo de comprobante ? si lo edito eso, saldra asi todos los comprobantes de ese tipo ? (osea si edito el cache de facturas, todas las facturas me saldran asi o se volveran a generar esos archivos cache al generar nueva factura)

configurar wkhtmltopdf en hosting

Buen dia, Esta excelente el soft que creastes
lo estado probando con xamp en mi laptop, uso windows 10 y corre de maravilla, pero cuando lo subo a mi hosting genera el xml, envia el xml, pero en el caso de generar el pdf me sale error
en la clase util
public static function getPathBin()
{
$path = DIR.'/../vendor/bin/wkhtmltopdf';
if (self::isWindows()) {
$path .= '.exe';
}

    return $path;
}

como podria cambiar para solucionar ese error, porfavor si me das una mano con este tema de generacion del pdf
muchas gracias por tu colaboracion, paciencia, y tiempo
screenshot_2

consulta

amigo si quiero guardar el xml sin firmar como seria?

Errores en Comunicacion de baja y Resumenes

Estimado, a que puede deberse el error cuando invoco a los documentos de Comunicación de Baja y Resúmenes:

En herokuapp:
"Ocurrío un error invocando el script
Time: 00:00:49:602"

El error también persiste en el localhost, estaba intentando comprender tus lineas pero algo falta en esos documentos:

Warning: Uncaught SoapFault exception: [HTTP] Error Fetching http headers in C:\xampp\htdocs\greenter-sample\vendor\greenter\ws\src\Ws\Services\SoapClient.php:61 Stack trace: #0 [internal function]: SoapClient->__doRequest('__soapCall('getStatus', Array) #2 C:\xampp\htdocs\greenter-sample\vendor\greenter\ws\src\Ws\Services\ExtService.php(33): Greenter\Ws\Services\SoapClient->call('getStatus', Array) #3 C:\xampp\htdocs\greenter-sample\vendor\greenter\greenter\src\Greenter\See.php(187): Greenter\Ws\Services\ExtService->getStatus('1528953679002') #4 C:\xampp\htdocs\greenter-sample\examples\comunicacion-baja.php(21): Greenter\See->getStatus('1528953679002') #5 {main} thrown in C:\xampp\htdocs\greenter-sample\vendor\greenter\ws\src\Ws\Services\SoapClient.php on line 61

Fatal error: Maximum execution time of 30 seconds exceeded in C:\xampp\htdocs\greenter-sample\vendor\greenter\ws\src\Ws\Services\ExtService.php on line 33
Time: 00:01:00:453

Gracias.

Problema al generar XML de boleta

Saludos, estoy intentanto generar un xml de boleta pero me genera el archivo vacio, de que forma puedo hacer debug de este proceso ya que no me muestra ningun error de php y para la facturas si funciona sin problemas.

Error al generar zip, Class 'ZipArchive' not found

hola amigo, lo subi al servidor y me da este error:
[17-Oct-2018 18:40:20 America/Lima] PHP Fatal error: Class 'ZipArchive' not found in /home/letgeahummhj/public_html/vendor/greenter/ws/src/Zip/ZipFileDecompress.php on line 28
en localhost funciona normal.

Get CDR comunicación de Baja

2.7.2 Para consulta de CDR en producción de Resumen Diario o
Comunicación de Baja o Resumen de Reversiones o Lotes de Facturas.

getStatus (del ticket), este método recibe los datos de un ticket como
parámetro y devuelve un objeto que indica el estado del proceso y en caso de
haber terminado, devuelve adjunto el CDR.

Según el manual del programador con el método getstatus()

$result = $see->getStatus($ticket);
print_r($result);

Debo obtener el CDR de la comunicación de baja, pero esto nunca ocurre, solo me devuelve "0004La constancia existe" (aún cuando tengo la certeza de que el documento ha sido aceptado).

¿Me estoy perdiendo de algo?
Saludos

consulta

tengo un codigo para convertir numero a letras para la leyenda de la factura
1203.89
1.- MIL DOSCIENTOS TRES CON 89/100 SOLES
2.- MIL DOSCIENTOS TRES CON OCHENTA Y NUEVE SOLES
mi consulta es si necesita si o si ser EL 1ro o tambien es aceptado como el 2do

Unidad de Medida para Servicios

hola amigo, tengo una duda cuando se brinda "servicios" al momento de definir la unidad de medida para el comprobante electrónico cual se puede usar ? existe alguna restricción como "no aplica" o tiene que ser NIU o algo para servicios. cual seria ?

enviar comprobante "solo" del xml generado

hola amigo, estoy tratando de cambiar la forma de envio de mis comprobantes por que me da muchos problemas enviarlos directamente.
genero y firmo correctamente el xml pero luego al querer enviarlo usando tu ejemplo:
$res = $see->sendXml(get_class($invoice), $invoice->getName(), file_get_contents($ruta));
la ruta la obtengo normal el detalle es en la variable "$invoice" hay alguna manera de obtener directamente los datos de esa variable del xml ya generado ?

duda

amigo investigue y no encuentro una respuesta a esto
las notas de credito y debito de boletas de venta las genero y envio a sunat, pero investigando descubri que se deben enviar en el resumen diario, y yo los enviava como si fueran notas de credito o debito de facturas osea directamente a sunat, y normal sunat me aceptaba.
esta mal lo que estoy haciendo ?

SoapClient not found

Hola @giansalex, creo que en el README.md se debería incluir como paso adicional activar la extensión php_soap.dll en el fichero php.ini. Prové con Xampp y Laragon y no tenian activada esa extensión por defecto.

Limite de días para enviar boletas

hola amigo, que pasa o que se debe hacer cuando no se envian algunas boletas, mas especificamente resumenes diarios de algunos dias.
se estuvieron enviando resumenes diarios todos los dias y en algunos dias se enviaba pero no habia cdr(por error de sistema) y no fueron declarados ahora de eso ya pasaron mas de 15 o 20 dias, que se hace con esas boletas que no fueron enviadas ya que la numeración continuo y se "salteo" algunas boletas

Generar PDF de un XML ya generado

Cómo podría generar el PDF de una factura ya generada..
Digamos que el pdf se perdió, cómo lo vuelvo a generar?

try {
	$pdf = $util->getPdf($invoice);
	@$util->writePdf($pdf, $tmp_invoice.'.pdf');
} catch (Exception $e) {
	var_dump($e);
}

Pero al ejecutar ese procedimiento cambiará el hash?

Saludos.

dar de baja un comprobante modificado

hola amigo, cuando utilize una nota de credito o debito para modificar una factura, esta factura se puede dar de baja o ya no tiene valor por que se modifico y tendria que dar de baja la nota de credito o debito(que pasa si doy de baja esa factura que fue modificada)?

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.