thegreenter / demo

Ejemplos utilizando Greenter (UBL 2.1, SOAP, Firma digital, PDF, QR)
https://greenter-sample.herokuapp.com
MIT License
60 stars 52 forks source link

Consulta de ticket de modo prueba #82

Closed brandon305 closed 4 years ago

brandon305 commented 4 years ago

Saludos , este es el código que estoy probando para dar de baja a una factura , no tengo problemas con la generación del xml y me muetra un ticket , pero en la función getStatus($ticket) me devuelve el mensaje 'Service Temporarily Unavailable' .... es esto normal porque no estoy en producción o algo estoy fallando en mi código.

`<?php

use Greenter\Model\Client\Client; use Greenter\Model\Company\Company; use Greenter\Model\Company\Address; use Greenter\Model\Sale\Invoice; use Greenter\Model\Sale\SaleDetail; use Greenter\Model\Sale\Legend;

use Greenter\Model\Voided\Voided; use Greenter\Model\Voided\VoidedDetail; use Greenter\Ws\Services\SunatEndpoints; use Greenter\Ws\Services\ConsultCdrService; use Greenter\Ws\Services\SoapClient;

require DIR . '/vendor/autoload.php'; $see = require DIR.'/config.php';

// Emisor $address = new Address(); $address->setUbigueo('150101') ->setDepartamento('LIMA') ->setProvincia('LIMA') ->setDistrito('LIMA') ->setUrbanizacion('NONE') ->setDireccion('AV LS');

$company = new Company(); $company->setRuc('20000000001') ->setRazonSocial('EMPRESA SAC') ->setNombreComercial('EMPRESA') ->setAddress($address);

$detial1 = new VoidedDetail(); $detial1->setTipoDoc('01') ->setSerie('F001') ->setCorrelativo('1') ->setDesMotivoBaja('ERROR EN CÁLCULOS');

$voided = new Voided(); $voided->setCorrelativo('00112') ->setFecGeneracion(new \DateTime('-3days')) ->setFecComunicacion(new \DateTime('-1days')) ->setCompany($company) ->setDetails([$detial1]);

$result = $see->send($voided);

// Guardar XML file_put_contents($voided->getName().'.xml', $see->getFactory()->getLastXml()); if (!$result->isSuccess()) { var_dump($result->getError()); exit(); }

$ticket = $result->getTicket(); echo 'Ticket :' . $ticket .'';

$result = $see->getStatus($ticket); if (!$result->isSuccess()) { var_dump($result->getError()); return; }

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

giansalex commented 4 years ago

Hola @brandon305, a veces puede ocurrir eso, lo servicios de sunat pueden estar inactivos. Vuelve a intentar.

brandon305 commented 4 years ago

Hoy volví a probar y la sunat me sigue devolviendo 'Service Temporarily Unavailable' en $see->getStatus($ticket);

Entonces es error de los servicios de ellos ? , ya que si me devuelve un número de ticket antes de consultar su estado.

giansalex commented 4 years ago

Es raro, por que en la demo live, no ocurre es problema. Estas probando desde windows o linux?

brandon305 commented 4 years ago

Windows en modo prueba image

brandon305 commented 4 years ago

Lo que quiero dar de baja es una factura , por eso es $detial1->setTipoDoc('01') , correcto ?

giansalex commented 4 years ago

Si, ese es el tipo para factura. Prueba este codigo.

<?php

require 'vendor/autoload.php';

use Greenter\Ws\Services\SoapClient;
use Greenter\Ws\Services\ExtService;

$urlService = 'https://e-beta.sunat.gob.pe/ol-ti-itcpfegem-beta/billService';
$soap = new SoapClient();
$soap->setService($urlService);
$soap->setCredentials('20000000001MODDATOS', 'moddatos'); 
$sender = new ExtService();
$sender->setClient($soap);

$result = $sender->getStatus('1589988459441');

print_r($result);

Deberia retornarte un codigo de error 0127.

brandon305 commented 4 years ago

exacto me reporto ese error , entonces en que estoy fallando :( , en mi codigo

giansalex commented 4 years ago

No me percate, pero estas llamando 2 veces getStatus, borra la ultima linea $result = $see->getStatus($ticket);

brandon305 commented 4 years ago

claro eso ya lo borre , pero ese error lo bota en if (!$result->isSuccess()) { var_dump($result->getError()); return; }

giansalex commented 4 years ago

He probado en varios lados y no tengo ese problema, verifica que estés usando esta url de servicio https://e-beta.sunat.gob.pe/ol-ti-itcpfegem-beta/billService y si persite también verifica si aparece ese problema levantando la demo

brandon305 commented 4 years ago

Al final hice un híbrido de nuestros dos códigos jeje y salio. Estaba usando esto config.php $see = new See(); $see->setService(SunatEndpoints::FE_BETA); $see->setCertificate(file_get_contents(DIR.'/certificate.pem')); $see->setCredentials('20000000001MODDATOS'/ruc+usuario/, 'moddatos');

en tu código ya no este necesario poner el certificado en tu variable $soap , no ? bueno comparto mi código final , aunque esta desordenado , pero es para ir haciendo pruebas

`<?php

use Greenter\Model\Client\Client; use Greenter\Model\Company\Company; use Greenter\Model\Company\Address; use Greenter\Model\Sale\Invoice; use Greenter\Model\Sale\SaleDetail; use Greenter\Model\Sale\Legend;

use Greenter\Model\Voided\Voided; use Greenter\Model\Voided\VoidedDetail; use Greenter\Ws\Services\SunatEndpoints; use Greenter\Ws\Services\ConsultCdrService; use Greenter\Ws\Services\SoapClient; use Greenter\Ws\Services\ExtService;

require DIR . '/vendor/autoload.php'; $see = require DIR.'/config.php';

// Emisor $address = new Address(); $address->setUbigueo('150101') ->setDepartamento('LIMA') ->setProvincia('LIMA') ->setDistrito('LIMA') ->setUrbanizacion('NONE') ->setDireccion('AV LS');

$company = new Company(); $company->setRuc('20000000001') ->setRazonSocial('EMPRESA SAC') ->setNombreComercial('EMPRESA') ->setAddress($address);

$detial1 = new VoidedDetail(); $detial1->setTipoDoc('01') ->setSerie('F001') ->setCorrelativo('1') ->setDesMotivoBaja('ERROR EN CÁLCULOS');

$voided = new Voided(); $voided->setCorrelativo('00112') ->setFecGeneracion(new \DateTime('-3days')) ->setFecComunicacion(new \DateTime('-1days')) ->setCompany($company) ->setDetails([$detial1]);

$result = $see->send($voided);

// Guardar XML file_put_contents($voided->getName().'.xml', $see->getFactory()->getLastXml()); if (!$result->isSuccess()) { var_dump($result->getError()); exit(); }

$ticket = $result->getTicket(); echo 'Ticket :' . $ticket .'';

$urlService = 'https://e-beta.sunat.gob.pe/ol-ti-itcpfegem-beta/billService'; $soap = new SoapClient(); $soap->setService($urlService); $soap->setCredentials('20000000001MODDATOS', 'moddatos'); $sender = new ExtService(); $sender->setClient($soap);

$result = $sender->getStatus($ticket); if (!$result->isSuccess()) { var_dump($result->getError()); return; }

echo $result->getCdrResponse()->getDescription(); file_put_contents('R-'.$voided->getName().'.zip', $result->getCdrZip());`

giansalex commented 4 years ago

El certificado es solo para firmar el XML, para soap solo se necesita credenciales (clave SOL).