思飞/timbrado-soap-client

此包最新版本(1.1.4)没有提供许可证信息。

SOAP WS客户端。基于SOAP的Sifei印章和取消服务客户端

1.1.4 2021-12-30 22:29 UTC

This package is auto-updated.

Last update: 2024-09-29 05:36:19 UTC


README

PHP中印章和取消示例

此存储库包含Sifei印章和取消SOAP服务的PHP示例。

示例配置

示例从config.ini文件中读取连接数据,不要在生产环境中这样做。URL已配置为测试环境。

要运行这些测试,您需要请求QA(测试)的访问权限。

http://sifei.com.mx/

[timbrado]
UsuarioSIFEI = RFC # usuario sifei
PasswordSIFEI = 12345678a #password de usuario de sifei 
IdEquipoGenerado = f1563ce5 # ide equipo

[cancelacion]
PFX = CER_KEY.pfx    #Solo para el servicio de cancelacion

使用openssl生成PEM密钥

#Recibimos el key en formato DER y generarmos la llave en formato PEM
openssl pkcs8 -inform DER -in CSD01_AAA010101AAA.key  -passin pass:12345678a -out CSD01_AAA010101AAA_KEY.pem

示例方法

简单示例

包括简单示例以供印章和取消服务使用,请检查

Sifei客户端。

除了简单示例外,还提供了一个完整的项目,用于立即使用与印章和取消CFDI相关的所有服务。

请记住,为使用此服务,您需要请求访问凭证。

快速入门(少于5分钟)

安装客户端

要安装客户端,您只需通过composer安装它

composer require sifei/timbrado-soap-client

完成后,您可以将包含的类导入并实例化以调用方法,默认情况下,类指向测试环境。完成集成过程后,您可以使用包含的常量"PROD_ENV",它指向生产环境。

使用客户端的印章示例

<?php
# include_once 'vendor/autoload.php'; #incluir el autoload (generado por composer) para autocargar las clases.

#Importamos las clases
use DHF\Sifei\Ws\Soap\Timbrado\getCFDI;
use DHF\Sifei\Ws\Soap\SifeiTimbradoService;

$sifeiService =new SifeiTimbradoService(
    SifeiTimbradoService::DEV_ENV,
    ['trace'=>true]    #Para recuperar el request y response
);
#clase con los parametros de timbrado:
$timbradoParams= new getCFDI();
$timbradoParams->setUsuario($usuario);
$timbradoParams->setPassword($password);
$timbradoParams->setIdEquipo($idEquipo);
$timbradoParams->setSerie($serie);
$timbradoParams->setArchivoXMLZip($xml);#arhivo xml

try {
	$res = $sifeiService->getCFDI($timbradoParams);
	$fileTmpZip = "timbrado.zip";  //nombre del zip
	//mandamos en un zip el xml timbrado en caso de exito
	file_put_contents( $fileTmpZip, $res->getReturn());
	$zipXml = new ZipArchive();
	if ($zipXml->open($fileTmpZip) === TRUE) {	  		
  		$zipXml->extractTo( $tmpDirName );
		$zipXml->close();
	}
} catch (SoapFault $e) {
	#En caso de un error inspeccionar la excepcion:
	var_dump( $e->faultcode, $e->faultstring, $e->detail)
}

密封示例

<?php
use DHF\Sifei\Ws\Soap\utils\CFDIUtils;
/**
 * Ejemplo para la generacion de sello. 
 * 
 * Contexto. El sello es la cadena original firmada mediante la llave (.key) y un password. 
 * La cadena original es una cadena de texto que comprende todos los CFDI
 * 
 * Nota: Si ocurre un error favor de confirmar que la llave (PEM O DER) efectivamente sean una llave y no el certificado, puedes hacerlo segun el caso
 * Para obtener info de un certificado(notar la extension):
 *  >openssl x509 -in CSD01_AAA010101AAA.cer -inform der -text
 * 
 * 
 * 
 * 
 * Flujo : 
 * 
 * CFDI-> procesamiento de cadenaoriginal->cadena original producida-> firmado/sellado-> sello generado->anexar sello al atributo sello del nodo Comprobante->Enviar a timbrar->Recuperar CFDI timbrado
 * 
 * 
 * ----------------------------------------------------------------------------------------------------------------
 * En caso de no poder generar el sello con el .key, convertir el KEY a FORMATO PEM con openssl:
 * >openssl pkcs8 -inform DER -in CSD01_AAA010101AAA.key  -passin pass:12345678a -out CSD01_AAA010101AAA_KEY.PEM
 * donde:
 *      Entrada) CSD01_AAA010101AAA.key Llave en formato DER
 *      Salida)  CSD01_AAA010101AAA_KEY.PEM  Llave en formato PEM
 */
//clase ejeemplo de genracion de cadena originaly sellado
include_once 'vendor/autoload.php';
function println($str){
    echo $str."\n";
}
#para sellar se necesita generar la cadena original y luego sellarla, esta clase ofrece el metodo para hacer todo en un sola invocacion

$dom= new DOMDocument();
#en este caso se carga el xml desde archivo
$dom->load(__DIR__."/assets/cfdi.xml");
$utils= new CFDIUtils();
$utils->setComprobante($dom);
#todo desde un solo metodo: genera la cadena original, sella y codifica en base64 lista para agregar en el atributo Sello del CFDI


#AHORA se establece la llave, la llave puede ser en Formato PEM o formato DER(generalmente cuando tiene extension .key):

#Metodos:
#(1) PEM    
println("-----Sello mediante KEY en formato PEM:");
println($utils->getSello(
    file_get_contents(__DIR__."/KeyCert/CSD01_AAA010101AAA_KEY.PEM"), #llave en formato PEM
    "12345678a")                    #contraseña
);
#O bien:

println("-----Sello mediante KEY en formato DER:");
#(2)DER. Usando .key directamente (DER)
println($utils->getSello(
    file_get_contents(__DIR__."/KeyCert/CSD01_AAA010101AAA.key"), #llave en formato DER
    "12345678a",
    'DER'                    #contraseña
    )
);

println("-----Cadena original:");
#si deseas ver la cadena original.
println($utils->getCadenaOriginal());

描述

除了简单示例外,还包括2个主要类,用于分组Sifei的不同服务的操作。

印章

getCFDIProcesa方法

getCFDIProcesa请求

getCFDIProcesa响应

getCFDISign方法

getCFDISign请求

getCFDISign响应

getTimbreCFDI方法

getTimbreCFDI请求

getTimbreCFDI响应

CambiaPassword方法

CambiaPassword请求

CambiaPassword响应

cancelaCFDISectorPrimario方法

cancelaCFDISectorPrimario请求

cancelaCFDISectorPrimario响应

getXML方法

getXML请求

getXML响应

getCFDI方法

getCFDI请求

getCFDI响应

getXMLProceso方法

getXMLProceso请求

getXMLProceso响应

取消

procesarRespuesta方法

procesarRespuesta请求

procesarRespuesta响应

cfdiRelacionado方法

cfdiRelacionado请求

cfdiRelacionado响应

peticionesPendientes方法

peticionesPendientes请求

peticionesPendientes响应

consultaSATCFDI方法

consultaSATCFDI请求

consultaSATCFDI响应

需要更多示例吗?

如果您需要其他服务的更多示例,请生成一个新问题。