greenter / xmldsig
用于根据 SUNAT 电子发票规范进行 XML 签名的库
v5.0.3
2020-07-31 04:45 UTC
Requires
- php: >=5.5.9
- ext-dom: *
- ext-openssl: *
README
此库用于根据 SUNAT 规范对电子凭证进行签名。
需要 .PEM 格式的证书,可以使用以下示例将证书 .PFX 转换为其他格式:转换证书 .PFX。
安装
使用 composer 从 packagist 安装。
composer require greenter/xmldsig
示例
use Greenter\XMLSecLibs\Sunat\SignedXml; require 'vendor/autoload.php'; $xmlPath = '20600995805-01-F001-1.xml'; $certPath = 'certifcate.pem'; // Antes convertir pfx -> pem (private+certificate keys) $signer = new SignedXml(); $signer->setCertificateFromFile($certPath); // or $signer->setCertificate('-----BEGIN RSA PRIVATE KEY-----.....'); $xmlSigned = $signer->signFromFile($xmlPath); // or $signer->signXml('<Invoice>....'); file_put_contents("signed.xml", $xmlSigned);
结果
之前
<ext:UBLExtensions> <ext:UBLExtension> <ext:ExtensionContent></ext:ExtensionContent> </ext:UBLExtension> </ext:UBLExtensions>
之后
<ext:UBLExtensions> <ext:UBLExtension> <ext:ExtensionContent> <ds:Signature Id="SignIMM"> <ds:SignedInfo> <ds:CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/> <ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/> <ds:Reference URI=""> <ds:Transforms> <ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/> </ds:Transforms> <ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/> <ds:DigestValue>IwJuNQGQaHmmm3iv2jj8JDv70Ow=</ds:DigestValue> </ds:Reference> </ds:SignedInfo> <ds:SignatureValue> nLaghokzMNrmrfPnbIg9b........wzZ2CgLTVjWQUAQ4wDAYDVQQIEwVNYWluZTE1UiLFwZXXXPUlf2o= </ds:SignatureValue> <ds:KeyInfo> <ds:X509Data> <ds:X509Certificate> MIIFhzCCA3OgAwI......MIIEVDCCAzygAwIBAgIJAPTrkMJbCOr1MA0GCSqGSIb3DQEBBQUAMHkxCzAJBgNVBAYTAlVTVQQIEwVNYWluZTEgMOiRJ00nE= </ds:X509Certificate> </ds:X509Data> </ds:KeyInfo> </ds:Signature> </ext:ExtensionContent> </ext:UBLExtension> </ext:UBLExtensions>