dndarksan / sw-sdk-php
SW 服务 PHP 库
Requires (Dev)
This package is auto-updated.
Last update: 2024-09-02 20:31:01 UTC
README
以下是一个 PHP 库,用于通过消耗 SW sapien® 服务进行 CFDI 4.0 的盖章。
内容
兼容性
- CFDI 4.0
- PHP 5.6 或更高版本 PHP 7
依赖
文档
安装
为了使用我们的 SDK 消费 SmarterWeb 提供的 REST 服务,首先需要安装 PHP 的版本为 5.6 或 7,然后安装 PHP 包管理器 Composer
安装 Composer
- 步骤 1:访问以下网页 https://getcomposer.org.cn/
- 步骤 2:点击 Download
- 步骤 3:点击 Composer-Setup.exe,这将在您的浏览器中打开一个窗口以保存 composer 文件
- 步骤 4:执行下载的 Composer-Setup.exe 文件并按照安装步骤进行
准备开发环境
- 步骤 1:我们需要创建一个名为 composer.json 的调用文件,并在其中输入我们想要使用的库,在我们的示例中是 lunasoft/sw-sdk-php
{ "name": "martinflores/implement", "authors": [ { "name": "Martin Flores", "email": "martin.flores@sw.com.mx" } ], "require": { "lunasoft/sw-sdk-php": "dev-master" } }
- 步骤 2:在你的项目文件夹中打开 CMD 或 PowerShell 并输入以下内容
composer install
这样下载了之前在 require 中写入的依赖,在我们的例子中是 SDK
如果不使用 composer
可以通过手动实现使用 SWSDK.php 文件(而不是 vendor.php 文件)来使用这些类
include('SWSDK.php');
实现
该库包含两个主要服务,分别是认证和 CFDI (XML) 的盖章。
支持代理服务器的新功能
如果你在公司有一个代理服务器,并希望库使用它,你需要传递一个额外的参数 "proxy",包含你的服务器代理的 host 和端口。
$params = array( "url"=>"http://services.test.sw.com.mx", "proxy"=> "server.domain.com:8888" );
认证
认证服务主要用于获取用于盖章已发出(密封)的 CFDI(XML)的 token,为了使用此服务,你需要有一个 用户名 和 密码,然后获取 token,你可以使用以下示例中的 测试环境 中的用户名和密码。
获取 Token
<?php require_once 'SWSDK.php'; use SWServices\Authentication\AuthenticationService as Authentication; $params = array( "url"=>"http://services.test.sw.com.mx", "user"=>"cuentaUsuario", "password"=> "contraseña" ); try { header('Content-type: application/json'); Authentication::auth($params); $token = Authentication::Token(); echo $token; } catch(Exception $e) { header('Content-type: text/plain'); echo 'Caught exception: ', $e->getMessage(), "\n"; } ?>
上述示例的响应是一个 JSON 类型的对象,其中包含 Token
{ "data": { "token": "T2lYQ0t4L0RHVkR4dHZ5Nkk1VHNEakZ3Y0J4Nk9GODZuRyt4cE1wVm5tbXB3..." }, "status": "success" }
盖章
盖章 CFDI
盖章 CFDI 接收格式为 String 的已发出(密封)的 XML 内容,如果发票和 token 正确,将返回格式为 String 的盖章补充(TFD),否则抛出异常。
盖章 CFDI V1
StampV1 接收格式为 String 的已发出(密封)的 XML 内容,如果发票和 token 正确,将返回格式为 String 的盖章补充(TFD),否则抛出异常。
使用用户名和密码盖章字符串格式的 XML
<?php require_once 'vendor/autoload.php'; use SWServices\Stamp\StampService as StampService; try{ header('Content-type: application/json'); $params = array( "url"=>"http://services.test.sw.com.mx", "user"=>"cuentaUsuario", "password"=> "contraseña" ); $xml = file_get_contents('./file.xml'); StampService::Set($params); $result = StampService::StampV1($xml); var_dump($result); } catch(Exception $e){ header('Content-type: text/plain'); echo 'Caught exception: ', $e->getMessage(), "\n"; } ?>
前面的例子中,响应是一个类型为 JSON 的对象,其中包含 TFD。
{ "data": { "tfd": "<tfd:TimbreFiscalDigital xsi:schemaLocation=\"http://www.sat.gob.mx/TimbreFiscalDigital http://www.sat.gob.mx/sitio_internet/cfd/TimbreFiscalDigital/TimbreFiscalDigitalv11.xsd..." }, "status": "success" }
使用令牌在字符串格式下签名 XML
<?php require_once 'vendor/autoload.php'; use SWServices\Stamp\StampService as StampService; $params = array( "url"=>"http://services.test.sw.com.mx", "token"=>"T2lYQ0t4L0RHVkR4dHZ5Nkk1VHNEakZ3Y0J4Nk9GODZuRyt4cE..............." ); try { header('Content-type: application/json'); $xml = file_get_contents('./file.xml'); StampService::Set($params); $result = StampService::StampV1($xml); var_dump($result); } catch(Exception $e) { header('Content-type: text/plain'); echo $e->getMessage(); } ?>
前面的例子中,响应是一个类型为 JSON 的对象,其中包含 TFD。
{ "data": { "tfd": "<tfd:TimbreFiscalDigital xsi:schemaLocation=\"http://www.sat.gob.mx/TimbreFiscalDigital http://www.sat.gob.mx/sitio_internet/cfd/TimbreFiscalDigital/TimbreFiscalDigitalv11.xsd..." }, "status": "success" }
支持代理服务器的新功能
如果你公司有一个代理服务器,并且希望库使用它,你必须传递一个额外的参数,称为 "proxy"。
$params = array( "proxy"=> "server.domain.com" );
签名 CFDI V2
StampV2 接收一个已签发(密封)的 XML 内容(以字符串格式),如果发票和令牌正确,它将返回一个字符串格式的 TFD 补充签名,以及一个字符串格式的已签名 CFDI 凭证,否则将抛出异常。
使用用户名和密码盖章字符串格式的 XML
<?php require_once 'vendor/autoload.php'; use SWServices\Stamp\StampService as StampService; try{ header('Content-type: application/json'); $params = array( "url"=>"http://services.test.sw.com.mx", "user"=>"cuentaUsuario", "password"=> "contraseña" ); $xml = file_get_contents('./file.xml'); StampService::Set($params); $result = StampService::StampV2($xml); var_dump($result); } catch(Exception $e){ header('Content-type: text/plain'); echo 'Caught exception: ', $e->getMessage(), "\n"; } ?>
前面的例子中,响应是一个类型为 JSON 的对象,其中包含 TFD。
{ "data": { "tfd": "<tfd:TimbreFiscalDigital xsi:schemaLocation=\"http://www.sat.gob.mx/TimbreFiscalDigital http://www.sat.gob.mx/sitio_internet/cfd/TimbreFiscalDigital/TimbreFiscalDigitalv11.xsd...", "cfdi": "<?xml version=\"1.0\" encoding=\"utf-8\"?><cfdi:Comprobante xmlns:cfdi=\"http://www.sat.gob.mx/cfd/4\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:pago20=\"http://www.sat.gob.mx/Pagos20\" xsi:schemaLocation=\"http://www.sat.gob.mx/cfd/4 http://www.sat.gob.mx/sitio_internet/cfd/4/cfdv40.xsd http://www.sat.gob.mx/Pagos20 http://www.sat.gob.mx/sitio_internet/cfd/Pagos/Pagos20.xsd\" Version=\"4.0\"..." }, "status": "success" }
使用令牌在字符串格式下签名 XML
<?php require_once 'vendor/autoload.php'; use SWServices\Stamp\StampService as StampService; $params = array( "url"=>"http://services.test.sw.com.mx", "token"=>"T2lYQ0t4L0RHVkR4dHZ5Nkk1VHNEakZ3Y0J4Nk9GODZuRyt4cE..............." ); try { header('Content-type: application/json'); $xml = file_get_contents('./file.xml'); StampService::Set($params); $result = StampService::StampV2($xml); var_dump($result); } catch(Exception $e) { header('Content-type: text/plain'); echo $e->getMessage(); } ?>
前面的例子中,响应是一个类型为 JSON 的对象,其中包含 TFD 和 CFDI。
{ "data": { "tfd": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjxjZmRpOkNvbXByb2JhbnRlIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3d3dy5zYXQuZ29iLm14L2NmZC8zIGh0dHA6Ly93...", "cfdi": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjxjZmRpOkNvbXByb2JhbnRlIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3d3dy5zYXQuZ29iLm14L2NmZC8zIGh0dHA6Ly93..." }, "status": "success" }
使用令牌/凭证在 base64 格式下签名 XML
如果想要使用 base64 模式,可以使用版本 2,这意味着可以发送先前密封的 xml 格式为 base64,库将以与 v2 正常版本相同的结构返回响应,其中包含 base64 编码的 tfd 和 cfdi。
<?php require_once 'vendor/autoload.php'; use SWServices\Stamp\StampService as StampService; $params = array( "url"=>"http://services.test.sw.com.mx", "token"=>"T2lYQ0t4L0RHVkR4dHZ5Nkk1VHNEakZ3Y0J4Nk9GODZuRyt4cE..............." ); try { header('Content-type: application/json'); $xml = file_get_contents('./file.xml'); StampService::Set($params); //Se agrega un segundo parametro de tipo boolean para activar la modalidad base64 $result = StampService::StampV2($xml,true); var_dump($result); } catch(Exception $e) { header('Content-type: text/plain'); echo $e->getMessage(); } ?>
前面的例子中,响应是一个类型为 JSON 的对象,其中包含 base64 编码的 TFD 和 CFDI。
{ "data": { "tfd": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjxjZmRpOkNvbXByb2JhbnRlIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3d3dy5zYXQuZ29iLm14L2NmZC8zIGh0dHA6Ly93...", "cfdi": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjxjZmRpOkNvbXByb2JhbnRlIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3d3dy5zYXQuZ29iLm14L2NmZC8zIGh0dHA6Ly93..." }, "status": "success" }
签名 CFDI V3
StampV3 接收一个已签发(密封)的 XML 内容(以字符串格式),如果发票和令牌正确,它将返回一个字符串格式的已签名 CFDI 凭证,否则将抛出异常。
使用用户名和密码盖章字符串格式的 XML
<?php require_once 'vendor/autoload.php'; use SWServices\Stamp\StampService as StampService; try{ header('Content-type: application/json'); $params = array( "url"=>"http://services.test.sw.com.mx", "user"=>"cuentaUsuario", "password"=> "contraseña" ); $xml = file_get_contents('./file.xml'); StampService::Set($params); $result = StampService::StampV3($xml); var_dump($result); } catch(Exception $e){ header('Content-type: text/plain'); echo 'Caught exception: ', $e->getMessage(), "\n"; } ?>
前面的例子中,响应是一个类型为 JSON 的对象,其中包含 CFDI。
{ "data": { "cfdi": "<?xml version=\"1.0\" encoding=\"utf-8\"?><cfdi:Comprobante xmlns:cfdi=\"http://www.sat.gob.mx/cfd/4\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:pago20=\"http://www.sat.gob.mx/Pagos20\" xsi:schemaLocation=\"http://www.sat.gob.mx/cfd/4 http://www.sat.gob.mx/sitio_internet/cfd/4/cfdv40.xsd http://www.sat.gob.mx/Pagos20 http://www.sat.gob.mx/sitio_internet/cfd/Pagos/Pagos20.xsd\" Version=\"4.0\"..." }, "status": "success" }
使用令牌在字符串格式下签名 XML
<?php require_once 'vendor/autoload.php'; use SWServices\Stamp\StampService as StampService; $params = array( "url"=>"http://services.test.sw.com.mx", "token"=>"T2lYQ0t4L0RHVkR4dHZ5Nkk1VHNEakZ3Y0J4Nk9GODZuRyt4cE..............." ); try { header('Content-type: application/json'); $xml = file_get_contents('./file.xml'); StampService::Set($params); $result = StampService::StampV3($xml); var_dump($result); } catch(Exception $e) { header('Content-type: text/plain'); echo $e->getMessage(); } ?>
前面的例子中,响应是一个类型为 JSON 的对象,其中包含 CFDI。
{ "data": { "cfdi": "<?xml version=\"1.0\" encoding=\"utf-8\"?><cfdi:Comprobante xmlns:cfdi=\"http://www.sat.gob.mx/cfd/4\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:pago20=\"http://www.sat.gob.mx/Pagos20\" xsi:schemaLocation=\"http://www.sat.gob.mx/cfd/4 http://www.sat.gob.mx/sitio_internet/cfd/4/cfdv40.xsd http://www.sat.gob.mx/Pagos20 http://www.sat.gob.mx/sitio_internet/cfd/Pagos/Pagos20.xsd\" Version=\"4.0\"..." }, "status": "success" }
签名 CFDI V4
StampV4 接收一个已签发(密封)的 XML 内容(以字符串格式),如果发票和令牌正确,它将返回一个字符串格式的已签名 CFDI 凭证,以及其他字段,例如 cadenaOriginalSAT、noCertificadoSAT、noCertificadoCFDI、uuid 等,否则将抛出异常。
使用用户名和密码盖章字符串格式的 XML
<?php require_once 'vendor/autoload.php'; use SWServices\Stamp\StampService as StampService; try{ header('Content-type: application/json'); $params = array( "url"=>"http://services.test.sw.com.mx", "user"=>"cuentaUsuario", "password"=> "contraseña" ); $xml = file_get_contents('./file.xml'); StampService::Set($params); $result = StampService::StampV4($xml); var_dump($result); } catch(Exception $e){ header('Content-type: text/plain'); echo 'Caught exception: ', $e->getMessage(), "\n"; } ?>
前面的例子中,响应是一个类型为 JSON 的对象,其中包含 CFDI。
{ "data": { "cadenaOriginalSAT": "||1.1|1147a19d-8fd5-44f6-9c83-674974518572|2017-05-12T16:32:27|AAA010101AAA|hFHbbQPvk3tb1o3s4TipRPBGG7kLyC9iRQgS4vVf3apfm1y3XJKeMkarUJ2mTy9oxSrCKbQ3X0XN0ljdEWQtc8qtV1L/arCXy+/yAfcI9pIXBg9hhFZcpRPze9NDyadrQ6bAU0nkxNgxaP1u0xGFei7jDk73WlmiRJle7WBZ81Tj2nXqISA+iiPALV7w68MdESD4JF1AmmuGcVCug7gT0rB5u2bI7S16T335jfYAohsmbwNsmtAH1hWyvtteWNY9lKtpN6/9Wi3/7+Lr9q/rEPcdCuaiiTpkyjPXgeCcPmEP/vH7+DLe2yfMcknbbOaR7MLVm/MEfoFeXMkt+xrEVw==|20001000000300022323||", "noCertificadoSAT": "20001000000300022323", "noCertificadoCFDI": "20001000000300022763", "uuid": "1147a19d-8fd5-44f6-9c83-674974518572", "selloSAT": "Pp0n+lzPsVynof5M77t996aZzL7ksx9KfYcKA23meVlfz0bdrT6VesBfKnk48/fVieTHfRCjmIeioiACbyvm8hgF2KdYOfOnhH7U+LPl2QJ9hCJ3U+BQ9VpcjCDM/rSEvMri/mJF9OnbXTboo7BKylzhA1apmP9tnji//Pzwj0qZ3E9BPrdPJ9oH9IXBScK8ugjRHaj2bhQSBp0YzjQhPijPn7SGpXomddkrFiGL3da+bR6lKk4sInWe/2zsKMq1uhF65UTzCe4lShMxlWL8OOEiwILDUY+uGUwf1dsX57EQHiFRwbAkjM8NapkLbdwSF7txU4odEpo3OYUnMOk4sw==", "selloCFDI": "hFHbbQPvk3tb1o3s4TipRPBGG7kLyC9iRQgS4vVf3apfm1y3XJKeMkarUJ2mTy9oxSrCKbQ3X0XN0ljdEWQtc8qtV1L/arCXy+/yAfcI9pIXBg9hhFZcpRPze9NDyadrQ6bAU0nkxNgxaP1u0xGFei7jDk73WlmiRJle7WBZ81Tj2nXqISA+iiPALV7w68MdESD4JF1AmmuGcVCug7gT0rB5u2bI7S16T335jfYAohsmbwNsmtAH1hWyvtteWNY9lKtpN6/9Wi3/7+Lr9q/rEPcdCuaiiTpkyjPXgeCcPmEP/vH7+DLe2yfMcknbbOaR7MLVm/MEfoFeXMkt+xrEVw==", "fechaTimbrado": "2017-05-12T16:32:27", "qrCode": "iVBORw0KGgoAAAANSUhEUgAAAIwAAACMCAYAAACuwEE+AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAr0SURBVHhe7ZLRiiS7DgT3/396L2b7ISgUTcpyzRm4DggWUim3dqg/fy+XBveDubS4H8ylxf1gLi3uB3NpcT+YS4v7wVxa3A/m0uJ+MJcW94O5tLgfzKXF/WAuLe4Hc2lxP5hLi+0P5s+fP8ftYrvMaRfbZZ44oXpv6oTt7eqQq...", "cfdi": "<?xml version=\"1.0\" encoding=\"utf-8\"?><cfdi:Comprobante xmlns:cfdi=\"http://www.sat.gob.mx/cfd/4\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:pago20=\"http://www.sat.gob.mx/Pagos20\" xsi:schemaLocation=\"http://www.sat.gob.mx/cfd/4 http://www.sat.gob.mx/sitio_internet/cfd/4/cfdv40.xsd http://www.sat.gob.mx/Pagos20 http://www.sat.gob.mx/sitio_internet/cfd/Pagos/Pagos20.xsd\" Version=\"4.0\"..." }, "status": "success" }
使用令牌在字符串格式下签名 XML
<?php require_once "vendor/autoload.php"; use SWServices\Stamp\StampService as StampService; $params = array( "url"=>"http://services.test.sw.com.mx", "token"=>"T2lYQ0t4L0RHVkR4dHZ5Nkk1VHNEakZ3Y0J4Nk9GODZuRyt4cE..............." ); try { header("Content-type: application/json"); $xml = file_get_contents("./file.xml"); StampService::Set($params); $result = StampService::StampV4($xml); var_dump($result); } catch(Exception $e) { header("Content-type: text/plain"); echo $e->getMessage(); } ?>
前面的例子中,响应是一个类型为 JSON 的对象,其中包含 CFDI。
{ "data": { "cadenaOriginalSAT": "||1.1|1147a19d-8fd5-44f6-9c83-674974518572|2017-05-12T16:32:27|AAA010101AAA|hFHbbQPvk3tb1o3s4TipRPBGG7kLyC9iRQgS4vVf3apfm1y3XJKeMkarUJ2mTy9oxSrCKbQ3X0XN0ljdEWQtc8qtV1L/arCXy+/yAfcI9pIXBg9hhFZcpRPze9NDyadrQ6bAU0nkxNgxaP1u0xGFei7jDk73WlmiRJle7WBZ81Tj2nXqISA+iiPALV7w68MdESD4JF1AmmuGcVCug7gT0rB5u2bI7S16T335jfYAohsmbwNsmtAH1hWyvtteWNY9lKtpN6/9Wi3/7+Lr9q/rEPcdCuaiiTpkyjPXgeCcPmEP/vH7+DLe2yfMcknbbOaR7MLVm/MEfoFeXMkt+xrEVw==|20001000000300022323||", "noCertificadoSAT": "20001000000300022323", "noCertificadoCFDI": "20001000000300022763", "uuid": "1147a19d-8fd5-44f6-9c83-674974518572", "selloSAT": "Pp0n+lzPsVynof5M77t996aZzL7ksx9KfYcKA23meVlfz0bdrT6VesBfKnk48/fVieTHfRCjmIeioiACbyvm8hgF2KdYOfOnhH7U+LPl2QJ9hCJ3U+BQ9VpcjCDM/rSEvMri/mJF9OnbXTboo7BKylzhA1apmP9tnji//Pzwj0qZ3E9BPrdPJ9oH9IXBScK8ugjRHaj2bhQSBp0YzjQhPijPn7SGpXomddkrFiGL3da+bR6lKk4sInWe/2zsKMq1uhF65UTzCe4lShMxlWL8OOEiwILDUY+uGUwf1dsX57EQHiFRwbAkjM8NapkLbdwSF7txU4odEpo3OYUnMOk4sw==", "selloCFDI": "hFHbbQPvk3tb1o3s4TipRPBGG7kLyC9iRQgS4vVf3apfm1y3XJKeMkarUJ2mTy9oxSrCKbQ3X0XN0ljdEWQtc8qtV1L/arCXy+/yAfcI9pIXBg9hhFZcpRPze9NDyadrQ6bAU0nkxNgxaP1u0xGFei7jDk73WlmiRJle7WBZ81Tj2nXqISA+iiPALV7w68MdESD4JF1AmmuGcVCug7gT0rB5u2bI7S16T335jfYAohsmbwNsmtAH1hWyvtteWNY9lKtpN6/9Wi3/7+Lr9q/rEPcdCuaiiTpkyjPXgeCcPmEP/vH7+DLe2yfMcknbbOaR7MLVm/MEfoFeXMkt+xrEVw==", "fechaTimbrado": "2017-05-12T16:32:27", "qrCode": "iVBORw0KGgoAAAANSUhEUgAAAIwAAACMCAYAAACuwEE+AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAr0SURBVHhe7ZLRiiS7DgT3/396L2b7ISgUTcpyzRm4DggWUim3dqg/fy+XBveDubS4H8ylxf1gLi3uB3NpcT+YS4v7wVxa3A/m0uJ+MJcW94O5tLgfzKXF/WAuLe4Hc2lxP5hLi+0P5s+fP8ftYrvMaRfbZZ44oXpv6oTt7eqQq...", "cfdi": "<?xml version=\"1.0\" encoding=\"utf-8\"?><cfdi:Comprobante xmlns:cfdi=\"http://www.sat.gob.mx/cfd/4\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:pago20=\"http://www.sat.gob.mx/Pagos20\" xsi:schemaLocation=\"http://www.sat.gob.mx/cfd/4 http://www.sat.gob.mx/sitio_internet/cfd/4/cfdv40.xsd http://www.sat.gob.mx/Pagos20 http://www.sat.gob.mx/sitio_internet/cfd/Pagos/Pagos20.xsd\" Version=\"4.0\"..." }, "status": "success" }
使用令牌/凭证在 base64 格式下签名 XML
如果想要使用 base64 模式,可以使用版本 4,这意味着可以发送先前密封的 xml 格式为 base64,库将以与 v4 正常版本相同的结构返回响应,其中包含 base64 编码的 cfdi。
<?php require_once 'vendor/autoload.php'; use SWServices\Stamp\StampService as StampService; $params = array( "url"=>"http://services.test.sw.com.mx", "token"=>"T2lYQ0t4L0RHVkR4dHZ5Nkk1VHNEakZ3Y0J4Nk9GODZuRyt4cE..............." ); try { header('Content-type: application/json'); $xml = file_get_contents('./file.xml'); StampService::Set($params); //Se agrega un segundo parametro de tipo boolean para activar la modalidad base64 $result = StampService::StampV4($xml,true); var_dump($result); } catch(Exception $e) { header('Content-type: text/plain'); echo $e->getMessage(); } ?>
前面的例子中,响应是一个类型为 JSON 的对象,其中包含 base64 编码的 CFDI。
{ "data": { "cadenaOriginalSAT": "||1.1|1147a19d-8fd5-44f6-9c83-674974518572|2017-05-12T16:32:27|AAA010101AAA|hFHbbQPvk3tb1o3s4TipRPBGG7kLyC9iRQgS4vVf3apfm1y3XJKeMkarUJ2mTy9oxSrCKbQ3X0XN0ljdEWQtc8qtV1L/arCXy+/yAfcI9pIXBg9hhFZcpRPze9NDyadrQ6bAU0nkxNgxaP1u0xGFei7jDk73WlmiRJle7WBZ81Tj2nXqISA+iiPALV7w68MdESD4JF1AmmuGcVCug7gT0rB5u2bI7S16T335jfYAohsmbwNsmtAH1hWyvtteWNY9lKtpN6/9Wi3/7+Lr9q/rEPcdCuaiiTpkyjPXgeCcPmEP/vH7+DLe2yfMcknbbOaR7MLVm/MEfoFeXMkt+xrEVw==|20001000000300022323||", "noCertificadoSAT": "20001000000300022323", "noCertificadoCFDI": "20001000000300022763", "uuid": "1147a19d-8fd5-44f6-9c83-674974518572", "selloSAT": "Pp0n+lzPsVynof5M77t996aZzL7ksx9KfYcKA23meVlfz0bdrT6VesBfKnk48/fVieTHfRCjmIeioiACbyvm8hgF2KdYOfOnhH7U+LPl2QJ9hCJ3U+BQ9VpcjCDM/rSEvMri/mJF9OnbXTboo7BKylzhA1apmP9tnji//Pzwj0qZ3E9BPrdPJ9oH9IXBScK8ugjRHaj2bhQSBp0YzjQhPijPn7SGpXomddkrFiGL3da+bR6lKk4sInWe/2zsKMq1uhF65UTzCe4lShMxlWL8OOEiwILDUY+uGUwf1dsX57EQHiFRwbAkjM8NapkLbdwSF7txU4odEpo3OYUnMOk4sw==", "selloCFDI": "hFHbbQPvk3tb1o3s4TipRPBGG7kLyC9iRQgS4vVf3apfm1y3XJKeMkarUJ2mTy9oxSrCKbQ3X0XN0ljdEWQtc8qtV1L/arCXy+/yAfcI9pIXBg9hhFZcpRPze9NDyadrQ6bAU0nkxNgxaP1u0xGFei7jDk73WlmiRJle7WBZ81Tj2nXqISA+iiPALV7w68MdESD4JF1AmmuGcVCug7gT0rB5u2bI7S16T335jfYAohsmbwNsmtAH1hWyvtteWNY9lKtpN6/9Wi3/7+Lr9q/rEPcdCuaiiTpkyjPXgeCcPmEP/vH7+DLe2yfMcknbbOaR7MLVm/MEfoFeXMkt+xrEVw==", "fechaTimbrado": "2017-05-12T16:32:27", "qrCode": "iVBORw0KGgoAAAANSUhEUgAAAIwAAACMCAYAAACuwEE+AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAr0SURBVHhe7ZLRiiS7DgT3/396L2b7ISgUTcpyzRm4DggWUim3dqg/fy+XBveDubS4H8ylxf1gLi3uB3NpcT+YS4v7wVxa3A/m0uJ+MJcW94O5tLgfzKXF/WAuLe4Hc2lxP5hLi+0P5s+fP8ftYrvMaRfbZZ44oXpv6oTt7eqQq...", "cfdi": "hFHbbQPvk3tb1o3s4TipRPBGG7kLyC9iRQgS4vVf3apfm1y3XJKeMkarUJ2mTy9oxSrCKbQ3X0XN0ljdEWQtc8qtV1L/arCXy+/yAfcI9pIXBg9hhFZcpRPze9NDyadrQ6bAU0nkxNgxaP1u0xGFei7jDk73WlmiRJle7WBZ81Tj2nXqISA..." }, "status": "success" }
签名发行
签名发行 接收一个 String 格式的 XML 内容,如果发票和令牌正确,它将生成密封,并返回一个字符串格式的已签名 CFDI 凭证,否则将抛出异常。
签名发行 V1
这个版本的签名只返回 TFD。
使用示例
use SWServices\Stamp\EmisionTimbrado as EmisionTimbrado; $params = array( "url"=>"http://services.test.sw.com.mx", "user"=>"usuario@demo.com", "password"=> "contraseña" ); $xml = file_get_contents('Test/Resources/file.xml'); EmisionTimbrado::Set($params); $resultadoIssue = EmisionTimbrado::EmisionTimbradoV1($xml); var_dump($resultadoIssue);
签名发行 V2
这个版本的签名返回 TFD 和 CFDI。
使用示例
use SWServices\Stamp\EmisionTimbrado as EmisionTimbrado; $params = array( "url"=>"http://services.test.sw.com.mx", "user"=>"usuario@demo.com", "password"=> "contraseña" ); $xml = file_get_contents('Test/Resources/file.xml'); EmisionTimbrado::Set($params); $resultadoIssue = EmisionTimbrado::EmisionTimbradoV2($xml); var_dump($result);
签名发行 V3
这个版本的签名只返回 CFDI。
使用示例
use SWServices\Stamp\EmisionTimbrado as EmisionTimbrado; $params = array( "url"=>"http://services.test.sw.com.mx", "user"=>"usuario@demo.com", "password"=> "contraseña" ); $xml = file_get_contents('Test/Resources/file.xml'); EmisionTimbrado::Set($params); $resultadoIssue = EmisionTimbrado::EmisionTimbradoV3($xml); var_dump($result);
签名发行 V4
这个版本的签名返回 CFDI、CadenaOriginalSAT、noCertificadoSat、noCertificadoCFDI、UUID、selloSAT、selloCFDI、fechaTimbrado 和 QRCode。
使用示例
use SWServices\Stamp\EmisionTimbrado as EmisionTimbrado; $params = array( "url"=>"http://services.test.sw.com.mx", "user"=>"usuario@demo.com", "password"=> "contraseña" ); $xml = file_get_contents('Test/Resources/file.xml'); EmisionTimbrado::Set($params); $resultadoIssue = EmisionTimbrado::EmisionTimbradoV4($xml); var_dump($result);
签名发行 JSON
签名发行 JSON
签名发行 JSON 接收一个 String 格式的 JSON 内容,如果 JSON 和令牌正确,它将生成 XML 的组装和密封,然后返回一个字符串格式的已签名 CFDI 凭证,否则将显示错误。
签名发行 JSON V1
这个版本的签名只返回 TFD。
使用示例
use SWServices\JSonIssuer\JsonEmisionTimbrado as JsonEmisionTimbrado; $params = array( "url"=>"http://services.test.sw.com.mx", "user"=>"usuario@demo.com", "password"=> "contraseña" ); $json = file_get_contents("Test/Resources/cfdi.json"); JsonEmisionTimbrado::Set($params); $resultadoJson = JsonEmisionTimbrado::jsonEmisionTimbradoV1($json); var_dump($resultadoJson);
签名发行 JSON V2
这个版本的签名返回 TFD 和 CFDI。
使用示例
use SWServices\JSonIssuer\JsonEmisionTimbrado as JsonEmisionTimbrado; $params = array( "url"=>"http://services.test.sw.com.mx", "user"=>"usuario@demo.com", "password"=> "contraseña" ); $json = file_get_contents("Test/Resources/cfdi.json"); JsonEmisionTimbrado::Set($params); $resultadoJson = JsonEmisionTimbrado::jsonEmisionTimbradoV2($json); var_dump($resultadoJson);
签名发行 JSON V3
这个版本的签名只返回 CFDI。
使用示例
use SWServices\JSonIssuer\JsonEmisionTimbrado as jsonEmisionTimbrado; $params = array( "url"=>"http://services.test.sw.com.mx", "user"=>"usuario@demo.com", "password"=> "contraseña" ); $json = file_get_contents("Test/Resources/cfdi.json"); jsonEmisionTimbrado::Set($params); $resultadoJson = JsonEmisionTimbrado::jsonEmisionTimbradoV3($json); var_dump($resultadoJson);
签名发行 JSON V4
这个版本的签名返回 CFDI、CadenaOriginalSAT、noCertificadoSat、noCertificadoCFDI、UUID、selloSAT、selloCFDI、fechaTimbrado 和 QRCode。
使用示例
use SWServices\JSonIssuer\JsonEmisionTimbrado as JsonEmisionTimbrado; $params = array( "url"=>"http://services.test.sw.com.mx", "user"=>"usuario@demo.com", "password"=> "contraseña" ); $json = file_get_contents("Test/Resources/cfdi.json"); JsonEmisionTimbrado::Set($params); $resultadoJson = JsonEmisionTimbrado::jsonEmisionTimbradoV4($json); var_dump($resultadoJson);
📌 注意: 存在多个版本响应,具体如下
有关这些版本响应的更多信息,请访问以下链接。
CFDI 取消
此服务用于取消 xml 文档,可以通过以下几种方法进行:CSD 取消,PFX 取消,XML 取消 和 UUID 取消。
通过 CSD 取消
需要包含以下数据
- 证书 (.cer)
- 密钥 (.key)
- 密钥文件密码
- 发行人 RFC
- UUID
- 原因
- 替代卷宗号码(仅在原因=01时)
步骤 1:获取访问令牌,或者使用无限令牌
首先需要使用访问令牌在我们的服务中进行身份验证,或者如果希望的话,可以使用无限令牌。
步骤 2:发送必要数据
在取消方法的实例中发送必要的数据以进行取消。
需要注意的是,由于 .cer 和 .key 文件是二进制文件,因此必须以 base64 格式发送,以便我们能在服务器上处理它们。
<?php include('./SWSDK.php'); use SWServices\Cancelation\CancelationService as CancelationService; $rfc=""; $password=""; $uuid=" "; $motivo="01"; $foliosustitucion=" "; $b64Cer="MIIFuzCCA6OgAwIBAgIU........."; $b64Key="MIIFDjBABgkqhkiG9w0B........."; $url="http://services.test.sw.com.mx/"; $token=" "; $params = array( "url"=>$url, "token"=>$token, ); try { header('Content-type: application/json'); $cancelationService = CancelationService::Set($params); $result = $cancelationService::CancelationByCSD($rfc, $uuid, $motivo, $b64Cer, $b64Key, $password,$foliosustitucion); echo json_encode($result); } catch(Exception $e) { header('Content-type: text/plain'); echo $e->getMessage(); } ?>
通过 XML 取消
如名称所示,此服务仅接收用于取消的已封印 XML 文件。
步骤 1:获取访问令牌,或者使用无限令牌
首先需要使用访问令牌在我们的服务中进行身份验证,或者如果希望的话,可以使用无限令牌。
步骤 2:发送必要数据
发送必要的数据以进行取消,仅是 XML。
<?php include('./SWSDK.php'); use SWServices\Cancelation\CancelationService as CancelationService; $resultSpect = "success"; $params = array( "url"=>"http://services.test.sw.com.mx/", "token"=>" " ); $xml=file_get_contents("../Test/Resources/CancelationResources/cancelByXml.xml"); try { $cancelationService = CancelationService::Set($params); $result = $cancelationService::CancelationByXML($xml); echo json_encode($result); } catch(Exception $e) { header('Content-type: text/plain'); echo $e->getMessage(); } ?>
通过 PFX 取消
需要包含以下数据
- Pfx
- 密钥文件密码
- 发行人 RFC
- UUID
- 原因
- 替代卷宗号码(仅在原因=01时)
步骤 1:获取访问令牌,或者使用无限令牌
首先需要使用访问令牌在我们的服务中进行身份验证,或者如果希望的话,可以使用无限令牌。
步骤 2:发送必要数据
发送必要的数据以进行取消以及之前获得的令牌。
<?php include('./SWSDK.php'); use SWServices\Cancelation\CancelationService as CancelationService; $rfc=" "; $password=" "; $uuid=" "; $motivo=" "; $foliosustitucion=" "; $b64Pfx="MIIL+QIBAzCCC................."; $url="http://services.test.sw.com.mx/"; $token=" "; $params = array( "url"=>$url, "token"=>$token ); try { header('Content-type: application/json'); $cancelationService = CancelationService::Set($params); $result = $cancelationService::CancelationByPFX($rfc, $uuid, $motivo, $pfxB64, $passwordPfx,$foliosustitucion); echo json_encode($result); } catch(Exception $e) { header('Content-type: text/plain'); echo $e->getMessage(); } ?>
通过 UUID 取消
需要包含以下数据
- 发行人 RFC
- UUID
- 原因
- 替代卷宗号码(仅在原因=01时)
步骤 1:获取访问令牌,或者使用无限令牌
首先需要在我们的服务中进行身份验证以获取访问令牌,或者如果希望的话,可以使用无限令牌。
步骤 2:发送必要数据
发送必要的数据以进行取消以及之前获得的令牌。
<?php include('./SWSDK.php'); use SWServices\Cancelation\CancelationService as CancelationService; $rfc=" "; $uuid=" "; $motivo=" "; $foliosustitucion=" "; $params = array( "url"=>"http://services.test.sw.com.mx", "token"=>" " ); try { header('Content-type: application/json'); $cancelationService = CancelationService::Set($params); $result = $cancelationService::CancelationByUUID($rfc, $uuid, $motivo,$foliosustitucion); echo json_encode($result); } catch(Exception $e) { header('Content-type: text/plain'); echo $e->getMessage(); } ?>
取消响应
所有取消响应在出现错误或请求成功的情况下都返回相同的结构,具体如下
响应类型
在成功响应的情况下,将返回 200。在失败响应的情况下,将返回一个不同于 200 的代码,该代码可能因问题而异。
成功响应
{ "data": { "acuse": "<?xml version=\"1.0\" encoding=\"utf-8\"?><Acuse xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" Fecha=\"2017-06-27T11:00:54.8788503\" RfcEmisor=\"LAN7008173R5\"><Folios xmlns=\"http://cancelacfd.sat.gob.mx\"><UUID>3EAEABC9-EA41-4627-9609-C6856B78E2B1</UUID><EstatusUUID>202</EstatusUUID></Folios><Signature Id=\"SelloSAT\" xmlns=\"http://www.w3.org/2000/09/xmldsig#\"><SignedInfo><CanonicalizationMethod Algorithm=\"http://www.w3.org/TR/2001/REC-xml-c14n-20010315\" /><SignatureMethod Algorithm=\"http://www.w3.org/2001/04/xmldsig-more#hmac-sha512\" /><Reference URI=\"\"><Transforms><Transform Algorithm=\"http://www.w3.org/TR/1999/REC-xpath-19991116\"><XPath>not(ancestor-or-self::*[local-name()='Signature'])</XPath></Transform></Transforms><DigestMethod Algorithm=\"http://www.w3.org/2001/04/xmlenc#sha512\" /><DigestValue>yoO1MKUhUcokwUgyKt5GJbcXvSzZhMKOp2pGhtuwBVrk35Y8HW8s6gJ04liSamflJFNWwUzaFOIf7KpS0SKkaw==</DigestValue></Reference></SignedInfo><SignatureValue>7ZKbUqUVSXkd9Xo9Dm4xOzrqd+j8v3NQWH8HeIPH+opnTOTGNSlVu+a2cqKKB7vmbt2ZTyfsaNsZ+d7up0zEIw==</SignatureValue><KeyInfo><KeyName>00001088888810000001</KeyName><KeyValue><RSAKeyValue><Modulus>vAr6QLmcvW6auTg7a+Ogm0veNvqJ30rD3j0iSAHxGzGVrg1d0xl0Fj5l+JX9EivD+qhkSY7pfLnJoObLpQ3GGZZOOihJVS2tbJDmnn9TW8fKUOVg+jGhcnpCHaUPq/Poj8I2OVb3g7hiaREORm6tLtzOIjkOv9INXxIpRMx54cw46D5F1+0M7ECEVO8Jg+3yoI6OvDNBH+jABsj7SutmSnL1Tov/omIlSWausdbXqykcl10BLu2XiQAc6KLnl0+Ntzxoxk+dPUSdRyR7f3Vls6yUlK/+C/4FacbR+fszT0XIaJNWkHaTOoqz76Ax9XgTv9UuT67j7rdTVzTvAN363w==</Modulus><Exponent>AQAB</Exponent></RSAKeyValue></KeyValue></KeyInfo></Signature></Acuse>", "uuid": { "3EAEABC9-EA41-4627-9609-C6856B78E2B1": "202" } }, "status": "success" }
在这种情况下,将接收到一个包含以下数据的 JSON 消息
- 证明:当取消 CFDI 时,SAT 返回的证明 xml。
- UUID:取消的 uuid 和其状态。(有关更多信息,请参阅 UUID 响应代码列表)
失败响应
{ "message": "Parámetros incompletos", "messageDetail": "Son necesarios el .Cer y el .Key en formato B64, la contraseña, el RFC y el UUID de la factura que necesita cancelar", "status": "error" }
取消卷宗响应代码
查询余额
示例
此服务接收令牌并生成组成余额查询的元素。
- 客户余额 ID
- 用户客户 ID
- 印章余额
- 已使用印章
- 到期日期
- 无限
- 分配的印章
步骤 1:将必须在我们的服务中进行身份验证以获取访问令牌,或者如果希望的话,可以使用无限令牌。
步骤 2:发送访问令牌。发送令牌以执行余额查询。
<?php require_once 'vendor/autoload.php'; use SWServices\AccountBalance\AccountBalanceService as AccountBalanceService; $params = array( 'url'=> 'services.test.sw.com.mx', 'token'=> 'T2lYQ0t4L0RHVkR4dHZ5Nkk1VHNEakZ3Y0J4Nk9GODZuRyt4cE...............', ); try { AccountBalanceService::Set($params); $result = AccountBalanceService::GetAccountBalance(); var_dump($result); } catch(Exception $e) { echo 'Caught exception: ', $e->getMessage(), "\n"; } ?>
余额查询响应
在出现错误或请求成功的情况下,余额查询响应返回以下结构
响应类型 在成功响应的情况下,将返回 200。在失败响应的情况下,将返回一个大于 200 的代码,该代码可能因问题而异。
成功响应
{ "data": { "idSaldoCliente": "126eac70-425d-4493-87af-93505bfca746", "idClienteUsuario": "05f731af-4c94-4d6e-aa87-7b19a16ff891", "saldoTimbres": 995026340, "timbresUtilizados": 1895963, "fechaExpiracion": "0001-01-01T00:00:00", "unlimited": false, "timbresAsignados": 0 }, "status": "success" }
在这种情况下,将接收到一个包含以下数据的 JSON 消息
- idSaldoCliente:注册 ID。
- idClienteUsuario:用户 ID。
- saldoTimbres:印章余额。
- timbresUtilizados:已使用印章。
- fechaExpiracion:到期日期。
- unlimited:如果为真,则根据分配给分发商的印章数量来验证余额的方式。如果为真,则将从分发商那里扣除印章。
- timbresAsignados:分配的印章。
失败响应
{ "message": "Parámetros incompletos", "status": "error" }
查询状态
查询 SAT 状态
SAT状态查询 接收 URL Soap、发送方RFC、接收方RFC、总计 和 UUID 参数,这些参数以 String 格式提供,然后对提供的SOAP进行查询以获取发票状态。
使用示例
require_once 'SWSDK.php'; use SWServices\SatQuery\SatQueryService as SatQueryService; $soapUrl = "http://consultaqrfacturaelectronicatest.sw.com.mx/ConsultaCFDIService.svc"; $re = "LAN8507268IA"; $rr = "LAN7008173R5"; $tt = 5800.00; $uuid = "6ab07bef-4446-43ea-a3fd-04a804309457"; $sello = "zNDhfw="; $consultaCfdi = SatQueryService::ServicioConsultaSAT($soapUrl, $re, $rr, $tt, $uuid, $sello); var_dump($consultaCfdi);
待批准/拒绝的请求查询
此服务返回一个 [数组] 列表,其中包含与特定RFC待批准或拒绝的请求相对应的UUID。同样,此服务仅接收RFC进行查询。
使用示例
require_once 'SWSDK.php'; use SWServices\Cancelation\CancelationService as cancelationService; $params = array( "url"=>"http://services.test.sw.com.mx", "user"=>"cuentaUsuario", "password"=> "contraseña" ); $rfc = "LAN7008173R5"; cancelationService::Set($params); $consultaPendientes = cancelationService::PendientesPorCancelar($rfc); var_dump($consultaPendientes);
批准/拒绝取消
批准/拒绝 是一个服务,接收方能通过该服务接受或拒绝从其待办事项列表中获取的UUID。此方法可以通过CSD、PFX、仅UUID和XML等方式进行消费。
通过CSD批准/拒绝
此方法允许接收方通过CSD表示对取消请求的接受或拒绝。
此方法接收以下参数
- SW服务URL
- 用户名和密码或令牌
- 接收方证书Base64
- 接收方密钥(key)Base64
- 发送方RFC
- 证书密码
- 对象数组,其中指定了UUID和要执行的操作
通过用户名和密码使用库批准/拒绝请求的CSD消费示例
require_once 'SWSDK.php'; use SWServices\AcceptReject\AcceptRejectService as AcceptRejectService; $params = array( "url"=>"http://services.test.sw.com.mx", "user"=>"cuentaUsuario", "password"=> "contraseña" ); $cerB64 = base64_encode(file_get_contents('Test\Resources\cert_pruebas\EKU9003173C9.cer')); $keyB64 = base64_encode(file_get_contents('Test\Resources\cert_pruebas\EKU9003173C9.key')); $password = "12345678a"; $rfc = "EKU9003173C9"; $list = [ ['uuid' => 'dcbddeb9-a208-42be-ae5b-0390a929fe48', 'action' => 'Aceptacion'] ]; $acceptReject = AcceptRejectService::Set($params); $aceptarRechazar = $acceptReject::AceptarRechazarCancelacionCSD($rfc, $list, $cerB64, $keyB64, $password); var_dump($aceptarRechazar);
通过PFX批准/拒绝
此方法允许接收方通过PFX表示对取消请求的接受或拒绝。
此方法接收以下参数
- SW服务URL
- 用户名和密码或令牌
- Pfx文件Base64
- 证书密码
- 发送方RFC
- 对象数组,其中指定了UUID和要执行的操作
通过用户名和密码使用库批准/拒绝请求的PFX消费示例
require_once 'SWSDK.php'; use SWServices\AcceptReject\AcceptRejectService as AcceptRejectService; $params = array( "url"=>"http://services.test.sw.com.mx", "user"=>"cuentaUsuario", "password"=> "contraseña" ); $pfxB64 = base64_encode(file_get_contents('Test\Resources\cert_pruebas\EKU9003173C9.pfx')); $passwordPfx = "swpass"; $rfc = "EKU9003173C9"; $list = [ ['uuid' => 'dcbddeb9-a208-42be-ae5b-0390a929fe48', 'action' => 'Aceptacion'] ]; $acceptReject = AcceptRejectService::Set($params); $aceptarRechazar = $acceptReject::AceptarRechazarCancelacionPFX($rfc, $list, $pfxB64, $passwordPfx); var_dump($aceptarRechazar);
通过XML批准/拒绝
此方法允许接收方通过XML表示对取消请求的接受或拒绝。
此方法接收以下参数
- SW服务URL
- 用户名和密码或令牌
- 用于批准/拒绝取消所需数据的XML
XML示例
<SolicitudAceptacionRechazo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Fecha="2023-11-13T17:00:44" RfcPacEnviaSolicitud="LSO1306189R5" RfcReceptor="EKU9003173C9" xmlns="http://cancelacfd.sat.gob.mx"> <Folios> <UUID>dcbddeb9-a208-42be-ae5b-0390a929fe48</UUID> <Respuesta>Aceptacion</Respuesta> </Folios> <Signature xmlns="http://www.w3.org/2000/09/xmldsig#"> <SignedInfo> <CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" /> <SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256" /> <Reference URI=""> <Transforms> <Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" /> </Transforms> <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" /> <DigestValue>jMSiI7taWgjRDm0zzJF2hmayhWZcEAPQRwXkDhzsXAw=</DigestValue> </Reference> </SignedInfo> <SignatureValue>sRpjcm/c/Prxdp7+JsatvgmwCDl7YwYXMpOdU9Oh3CCzUPyYEM0wwEzQApFnRrr4/DDuYTF/ajaQ2fL9hjhYqm21eR+1W5AWQHCLJ7Pc6BnqCIj/xIGhRoHGMZNnb9ZvT7kEt0P2clG4T5u4rGfL3p31mQaJLxKPYm/BR2zhzQuE33lyv3AnQA8LbpqDoMi/ZW2SSjRgFNhs1JUI6EQQmwLRZ7KU+LjhKDGFBgFJ9RQZgJOXSyRoTToJHLktlcvzvS45HLUJDus5g8B/4mOGy9tafPGtddrzi9BV/XbadFdAF5LXFq6ng7jX3EavBX1/B9u4SIJzEE9YD8pqqcD6Xw==</SignatureValue> <KeyInfo> <X509Data> <X509IssuerSerial> <X509IssuerName>OID.1.2.840.113549.1.9.2=responsable: ACDMA-SAT, OID.2.5.4.45=2.5.4.45, L=COYOACAN, S=CIUDAD DE MEXICO, C=MX, PostalCode=06370, STREET=3ra cerrada de caliz, E=oscar.martinez@sat.gob.mx, OU=SAT-IES Authority, O=SERVICIO DE ADMINISTRACION TRIBUTARIA, CN=AC UAT</X509IssuerName> <X509SerialNumber>292233162870206001759766198462772978647764840758</X509SerialNumber> </X509IssuerSerial> <X509Certificate>MIIFsDCCA5igAwIBAgIUMzAwMDEwMDAwMDA1MDAwMDM0MTYwDQYJKoZIhvcNAQELBQAwggErMQ8wDQYDVQQDDAZBQyBVQVQxLjAsBgNVBAoMJVNFUlZJQ0lPIERFIEFETUlOSVNUUkFDSU9OIFRSSUJVVEFSSUExGjAYBgNVBAsMEVNBVC1JRVMgQXV0aG9yaXR5MSgwJgYJKoZIhvcNAQkBFhlvc2Nhci5tYXJ0aW5lekBzYXQuZ29iLm14MR0wGwYDVQQJDBQzcmEgY2VycmFkYSBkZSBjYWxpejEOMAwGA1UEEQwFMDYzNzAxCzAJBgNVBAYTAk1YMRkwFwYDVQQIDBBDSVVEQUQgREUgTUVYSUNPMREwDwYDVQQHDAhDT1lPQUNBTjERMA8GA1UELRMIMi41LjQuNDUxJTAjBgkqhkiG9w0BCQITFnJlc3BvbnNhYmxlOiBBQ0RNQS1TQVQwHhcNMjMwNTE4MTE0MzUxWhcNMjcwNTE4MTE0MzUxWjCB1zEnMCUGA1UEAxMeRVNDVUVMQSBLRU1QRVIgVVJHQVRFIFNBIERFIENWMScwJQYDVQQpEx5FU0NVRUxBIEtFTVBFUiBVUkdBVEUgU0EgREUgQ1YxJzAlBgNVBAoTHkVTQ1VFTEEgS0VNUEVSIFVSR0FURSBTQSBERSBDVjElMCMGA1UELRMcRUtVOTAwMzE3M0M5IC8gVkFEQTgwMDkyN0RKMzEeMBwGA1UEBRMVIC8gVkFEQTgwMDkyN0hTUlNSTDA1MRMwEQYDVQQLEwpTdWN1cnNhbCAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtmecO6n2GS0zL025gbHGQVxznPDICoXzR2uUngz4DqxVUC/w9cE6FxSiXm2ap8Gcjg7wmcZfm85EBaxCx/0J2u5CqnhzIoGCdhBPuhWQnIh5TLgj/X6uNquwZkKChbNe9aeFirU/JbyN7Egia9oKH9KZUsodiM/pWAH00PCtoKJ9OBcSHMq8Rqa3KKoBcfkg1ZrgueffwRLws9yOcRWLb02sDOPzGIm/jEFicVYt2Hw1qdRE5xmTZ7AGG0UHs+unkGjpCVeJ+BEBn0JPLWVvDKHZAQMj6s5Bku35+d/MyATkpOPsGT/VTnsouxekDfikJD1f7A1ZpJbqDpkJnss3vQIDAQABox0wGzAMBgNVHRMBAf8EAjAAMAsGA1UdDwQEAwIGwDANBgkqhkiG9w0BAQsFAAOCAgEAFaUgj5PqgvJigNMgtrdXZnbPfVBbukAbW4OGnUhNrA7SRAAfv2BSGk16PI0nBOr7qF2mItmBnjgEwk+DTv8Zr7w5qp7vleC6dIsZFNJoa6ZndrE/f7KO1CYruLXr5gwEkIyGfJ9NwyIagvHHMszzyHiSZIA850fWtbqtythpAliJ2jF35M5pNS+YTkRB+T6L/c6m00ymN3q9lT1rB03YywxrLreRSFZOSrbwWfg34EJbHfbFXpCSVYdJRfiVdvHnewN0r5fUlPtR9stQHyuqewzdkyb5jTTw02D2cUfL57vlPStBj7SEi3uOWvLrsiDnnCIxRMYJ2UA2ktDKHk+zWnsDmaeleSzonv2CHW42yXYPCvWi88oE1DJNYLNkIjua7MxAnkNZbScNw01A6zbLsZ3y8G6eEYnxSTRfwjd8EP4kdiHNJftm7Z4iRU7HOVh79/lRWB+gd171s3d/mI9kte3MRy6V8MMEMCAnMboGpaooYwgAmwclI2XZCczNWXfhaWe0ZS5PmytD/GDpXzkX0oEgY9K/uYo5V77NdZbGAjmyi8cE2B2ogvyaN2XfIInrZPgEffJ4AB7kFA2mwesdLOCh0BLD9itmCve3A1FGR4+stO2ANUoiI3w3Tv2yQSg4bjeDlJ08lXaaFCLW2peEXMXjQUk7fmpb5MNuOUTW6BE=</X509Certificate> </X509Data> </KeyInfo> </Signature> </SolicitudAceptacionRechazo>
通过用户名和密码使用库批准/拒绝请求的XML消费示例
require_once 'SWSDK.php'; use SWServices\AcceptReject\AcceptRejectService as AcceptRejectService; $params = array( "url"=>"http://services.test.sw.com.mx", "user"=>"cuentaUsuario", "password"=> "contraseña" ); $xml = file_get_contents('Test\Resources\acceptReject_xml.xml'); $acceptReject = AcceptRejectService::Set($params); $aceptarRechazar = $acceptReject::AceptarRechazarCancelacionXML($xml); var_dump($aceptarRechazar);
通过UUID批准/拒绝
此方法允许接收方通过UUID表示对取消请求的接受或拒绝。
此方法接收以下参数
- SW服务URL
- 用户名和密码或令牌
- 接收方RFC
- 需要批准/拒绝的发票UUID
- 需要执行的操作批准/拒绝
📌 注意: 用户必须在其印章管理员中拥有证书,才能使用此方法。
通过用户名和密码使用库批准/拒绝请求的UUID消费示例
require_once 'SWSDK.php'; use SWServices\AcceptReject\AcceptRejectService as AcceptRejectService; $params = array( "url"=>"http://services.test.sw.com.mx", "user"=>"cuentaUsuario", "password"=> "contraseña" ); $rfc = "EKU9003173C9"; $uuid = "dcbddeb9-a208-42be-ae5b-0390a929fe48"; $action = "Rechazo"; $acceptReject = AcceptRejectService::Set($params); $aceptarRechazar = $acceptReject::AceptarRechazarCancelacionUUID($rfc, $uuid, $action); var_dump($aceptarRechazar);
相关文档查询
此服务允许我们了解与UUID相关的发票。此方法可以通过CSD、PFX、仅UUID和XML进行消费。
通过CSD的相关文档
此模式接收参数:接收方RFC、证书和私钥[Base64]、私钥密码和要查询的UUID。
使用示例
require_once 'SWSDK.php'; use SWServices\Cancelation\CancelationService as cancelationService; $params = array( "url"=>"http://services.test.sw.com.mx", "user"=>"cuentaUsuario", "password"=> "contraseña" ); $cerB64 = base64_encode(file_get_contents('Test\Resources\CSD_Pruebas_CFDI_LAN7008173R5.cer')); $keyB64 = base64_encode(file_get_contents('Test\Resources\CSD_Pruebas_CFDI_LAN7008173R5.key')); $rfc = "LAN7008173R5"; $uuid = "52c02b64-d12e-4163-b581-bf749238896d"; cancelationService::Set($params); $consultaRelacionados = cancelationService::ConsultarCFDIRelacionadosCSD($rfc, $cerB64, $keyB64, $password, $uuid); var_dump($consultaRelacionados);
通过PFX的相关文档
此模式接收参数:接收方RFC、PFX[Base64]、私钥密码和要查询的UUID。
使用示例
require_once 'SWSDK.php'; use SWServices\Cancelation\CancelationService as cancelationService; $params = array( "url"=>"http://services.test.sw.com.mx", "user"=>"cuentaUsuario", "password"=> "contraseña" ); $pfxB64 = base64_encode(file_get_contents('Test\Resources\CSD_Pruebas_CFDI_LAN7008173R5.pfx')); $rfc = "LAN7008173R5"; $uuid = "52c02b64-d12e-4163-b581-bf749238896d"; cancelationService::Set($params); $consultaRelacionados = cancelationService::ConsultarCFDIRelacionadosPFX($rfc, $pfxB64, $password, $uuid); var_dump($consultaRelacionados);
通过XML的相关文档
此模式接收查询相关文档的XML。
要发送的XML
<PeticionConsultaRelacionados RfcPacEnviaSolicitud="DAL050601L35" RfcReceptor="LAN7008173R5" Uuid="52C02B64-D12E-4163-B581-BF749238896D" xmlns="http://cancelacfd.sat.gob.mx" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <Signature xmlns="http://www.w3.org/2000/09/xmldsig#"> <SignedInfo> <CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/> <SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/> <Reference URI=""> <Transforms> <Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/> </Transforms> <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/> <DigestValue>4OL2v3i8dqK9qc4T4gbidVv0D3Q=</DigestValue> </Reference> </SignedInfo> <SignatureValue>br/VM4d589tNJFwoXSBxBGv8J8SDyrvun13m26+ohydrLuvNZXMDhffapexZRvIblcU8cEoD6LcWGv/PFzWb4CN2Yqc+uIllYPAVLO6e5kTPRWMQGRH6KPd8vohFEaIAYHVMkrlrHFi8FtH7b6aZHDuBexa8ZWdvSt/WXpudNK8SGtEv2yoGcyqSMxlJ/pysuvsksS/2qzpLeycoF+SLSw5VVLDM7YoW9C3k6QWxJBNo1KsYofBIE5Tk40i0BbKH5r79Xvs3Ye9Q1f0dwSXHooFjrR4s7E5ukBtpk325bHlwPmhGbk+vQrY7lKPQbo3SMJ13eFzlpfW8StNpCp8mpQ==</SignatureValue> <KeyInfo> <X509Data> <X509IssuerSerial> <X509IssuerName>OID.1.2.840.113549.1.9.2=Responsable: ACDMA, OID.2.5.4.45=SAT970701NN3, L=Coyoacán, S=Distrito Federal, C=MX, PostalCode=06300, STREET="Av. Hidalgo 77, Col. Guerrero", E=asisnet@pruebas.sat.gob.mx, OU=Administración de Seguridad de la Información, O=Servicio de Administración Tributaria, CN=A.C. 2 de pruebas(4096)</X509IssuerName> <X509SerialNumber>286524172099382162235533054548081509963388170549</X509SerialNumber> </X509IssuerSerial> <X509Certificate>MIIFxTCCA62gAwIBAgIUMjAwMDEwMDAwMDAzMDAwMjI4MTUwDQYJKoZIhvcNAQELBQAwggFmMSAwHgYDVQQDDBdBLkMuIDIgZGUgcHJ1ZWJhcyg0MDk2KTEvMC0GA1UECgwmU2VydmljaW8gZGUgQWRtaW5pc3RyYWNpw7NuIFRyaWJ1dGFyaWExODA2BgNVBAsML0FkbWluaXN0cmFjacOzbiBkZSBTZWd1cmlkYWQgZGUgbGEgSW5mb3JtYWNpw7NuMSkwJwYJKoZIhvcNAQkBFhphc2lzbmV0QHBydWViYXMuc2F0LmdvYi5teDEmMCQGA1UECQwdQXYuIEhpZGFsZ28gNzcsIENvbC4gR3VlcnJlcm8xDjAMBgNVBBEMBTA2MzAwMQswCQYDVQQGEwJNWDEZMBcGA1UECAwQRGlzdHJpdG8gRmVkZXJhbDESMBAGA1UEBwwJQ295b2Fjw6FuMRUwEwYDVQQtEwxTQVQ5NzA3MDFOTjMxITAfBgkqhkiG9w0BCQIMElJlc3BvbnNhYmxlOiBBQ0RNQTAeFw0xNjEwMjUyMTUyMTFaFw0yMDEwMjUyMTUyMTFaMIGxMRowGAYDVQQDExFDSU5ERU1FWCBTQSBERSBDVjEaMBgGA1UEKRMRQ0lOREVNRVggU0EgREUgQ1YxGjAYBgNVBAoTEUNJTkRFTUVYIFNBIERFIENWMSUwIwYDVQQtExxMQU43MDA4MTczUjUgLyBGVUFCNzcwMTE3QlhBMR4wHAYDVQQFExUgLyBGVUFCNzcwMTE3TURGUk5OMDkxFDASBgNVBAsUC1BydWViYV9DRkRJMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAgvvCiCFDFVaYX7xdVRhp/38ULWto/LKDSZy1yrXKpaqFXqERJWF78YHKf3N5GBoXgzwFPuDX+5kvY5wtYNxx/Owu2shNZqFFh6EKsysQMeP5rz6kE1gFYenaPEUP9zj+h0bL3xR5aqoTsqGF24mKBLoiaK44pXBzGzgsxZishVJVM6XbzNJVonEUNbI25DhgWAd86f2aU3BmOH2K1RZx41dtTT56UsszJls4tPFODr/caWuZEuUvLp1M3nj7Dyu88mhD2f+1fA/g7kzcU/1tcpFXF/rIy93APvkU72jwvkrnprzs+SnG81+/F16ahuGsb2EZ88dKHwqxEkwzhMyTbQIDAQABox0wGzAMBgNVHRMBAf8EAjAAMAsGA1UdDwQEAwIGwDANBgkqhkiG9w0BAQsFAAOCAgEAJ/xkL8I+fpilZP+9aO8n93+20XxVomLJjeSL+Ng2ErL2GgatpLuN5JknFBkZAhxVIgMaTS23zzk1RLtRaYvH83lBH5E+M+kEjFGp14Fne1iV2Pm3vL4jeLmzHgY1Kf5HmeVrrp4PU7WQg16VpyHaJ/eonPNiEBUjcyQ1iFfkzJmnSJvDGtfQK2TiEolDJApYv0OWdm4is9Bsfi9j6lI9/T6MNZ+/LM2L/t72Vau4r7m94JDEzaO3A0wHAtQ97fjBfBiO5M8AEISAV7eZidIl3iaJJHkQbBYiiW2gikreUZKPUX0HmlnIqqQcBJhWKRu6Nqk6aZBTETLLpGrvF9OArV1JSsbdw/ZH+P88RAt5em5/gjwwtFlNHyiKG5w+UFpaZOK3gZP0su0sa6dlPeQ9EL4JlFkGqQCgSQ+NOsXqaOavgoP5VLykLwuGnwIUnuhBTVeDbzpgrg9LuF5dYp/zs+Y9ScJqe5VMAagLSYTShNtN8luV7LvxF9pgWwZdcM7lUwqJmUddCiZqdngg3vzTactMToG16gZA4CWnMgbU4E+r541+FNMpgAZNvs2CiW/eApfaaQojsZEAHDsDv4L5n3M1CC7fYjE/d61aSng1LaO6T1mh+dEfPvLzp7zyzz+UgWMhi5Cs4pcXx1eic5r7uxPoBwcCTt3YI1jKVVnV7/w=</X509Certificate> </X509Data> </KeyInfo> </Signature> </PeticionConsultaRelacionados>
使用示例
require_once 'SWSDK.php'; use SWServices\Cancelation\CancelationService as cancelationService; $params = array( "url"=>"http://services.test.sw.com.mx", "user"=>"cuentaUsuario", "password"=> "contraseña" ); $rfc = "LAN7008173R5"; $uuid = "52c02b64-d12e-4163-b581-bf749238896d"; $xml = file_get_contents('Test\Resources\fileRelations.xml'); cancelationService::Set($params); $consultaRelacionados = cancelationService::ConsultarCFDIRelacionadosXML($xml); var_dump($consultaRelacionados);
通过UUID的相关文档
此模式接收参数:接收方RFC和要查询的UUID。
使用示例
require_once 'SWSDK.php'; use SWServices\Cancelation\CancelationService as cancelationService; $params = array( "url"=>"http://services.test.sw.com.mx", "user"=>"cuentaUsuario", "password"=> "contraseña" ); $rfc = "LAN7008173R5"; $uuid = "52c02b64-d12e-4163-b581-bf749238896d"; cancelationService::Set($params); $consultaRelacionados = cancelationService::ConsultarCFDIRelacionadosUUID($rfc, $uuid); var_dump($consultaRelacionados);
PDF服务
生成PDF
生成PDF
此服务从XML文档和模板生成PDF。可以使用通用模板或更符合需求的个性化模板。
该函数接收以下参数
- 认证数据(url、urlapi、user、password)
- xml(xml必须盖章)
- logo(Base64)
- templateId
- extras(xml内容中的附加数据)
使用示例
require_once 'SWSDK.php'; use SWServices\PDF\PdfService as pdfService; $xml = "<?xml version='1.0' encoding='utf-8'?> <cfdi:Comprobante......"; $logo = "JP39LSM5mdbtAd1..........."; $templateId = "cfdi40"; $params = array( "urlApi" => "https://api.test.sw.com.mx", "url" => "https://services.test.sw.com.mx", "user" => "usuario", "password" => "contraseña" ); $pdfService = pdfService::Set($params); $result = $pdfService::GeneratePDF($xml, $logo, $templateId, null, false); var_dump($result);
包含附加数据的模板
require_once 'SWSDK.php'; use SWServices\PDF\PdfService as pdfService; $xml = "<?xml version='1.0' encoding='utf-8'?> <cfdi:Comprobante......"; $logo = "JP39LSM5mdbtAd1..........."; $templateId = "cfdi40"; $extras =array("DatExtra1"=>"Datos adicionales", "DatoExtra2" => "Datos adicionales"); $params = array( "urlApi" => "https://api.test.sw.com.mx", "url" => "https://services.test.sw.com.mx", "user" => "usuario", "password" => "contraseña" ); $pdfService = pdfService::Set($params); $result = $pdfService::GeneratePDF($xml, $logo, $templateId, $extras, false); var_dump($result);
📌 注意: 根据您所需的凭证类型,存在多种PDF模板,具体如下
有关这些PDF模板的更多信息,请访问以下链接:链接.
重新生成PDF
重新生成PDF
此服务可以生成或重新生成已盖章的CFDI的PDF,并可以保存或替换PDF文件,以便以后从ADT门户进行查看。
该函数接收以下参数
- 凭证发票号码(uuid)
- 附加信息(xml内容之外的额外数据)
使用示例
require_once 'SWSDK.php'; use SWServices\PDF\PdfService as pdfService; $uuid = "604729a6-a1d9-4969-b35f-e7d04c7ad75c"; $params = array( "urlApi" => "https://api.test.sw.com.mx", "url" => "https://services.test.sw.com.mx", "user" => "usuario", "password" => "contraseña" ); $pdfService = pdfService::Set($params); $result = $pdfService::RegeneratePDF($uuid); var_dump($result);
包含附加数据
require_once 'SWSDK.php'; use SWServices\PDF\PdfService as pdfService; //Si se cuentan con distintos templateId, //es necesario especificarlo $extras = array( "extras"=>array( "EDIRECCION1"=>"STERNO PRODUCTS 2483 Harbor Avenue Memphis, TN 38113" ), "templateId"=>"extradata" ); $params = array( "urlApi" => "https://api.test.sw.com.mx", "url" => "https://services.test.sw.com.mx", "user" => "usuario", "password" => "contraseña" ); $pdfService = pdfService::Set($params); $result = $pdfService::RegeneratePDF($uuid,$extras); var_dump($result);
重新发送电子邮件
重新发送电子邮件服务,接收已盖章凭证的uuid以及需要重新发送的电子邮件地址。
创建一个实例
- 用户名和密码
$params = array( "urlApi" => "https://api.test.sw.com.mx", "url" => "https://services.test.sw.com.mx", "user"=>"user@mail.com", "password"=> "password" ); $resend = ResendService::Set($params);
- 令牌
$params = array( "urlApi" => "https://api.test.sw.com.mx", "token" => "T2lYQ0t4L0RHVkR..." ); $resend = ResendService::Set($params);
示例
- 一封电子邮件
$emails = array( "user@mail.com" ); $result = $resend::ResendEmail("506aecd4-fc5f-4581-a0e1-9b185967b212", $emails);
- 多封电子邮件(最多5封)
$emails = array( "user@mail.com", "userB@mail.com" ); $result = $resend::ResendEmail("506aecd4-fc5f-4581-a0e1-9b185967b212", $emails);
证书
管理您账户CSD证书的服务,可以加载、查询和删除证书。要图形化地管理证书,可以从盖章管理员进行操作。
查询证书
查询账户中所有已加载证书的方法。
此方法接受以下参数
- SW服务URL
- 用户名和密码
使用用户名和密码查询证书的库消费示例
<?php require_once 'SWSDK.php'; use SWServices\Csd\CsdService as CsdService; $params = array( "url" => "https://services.test.sw.com.mx", "user" => "usuario", "password" => "contraseña" ); CsdService::Set($params); $response = CsdService::GetListCsd(); var_dump($response); ?>
通过RFC查询证书
通过发送作为参数的证书RFC来获取已加载的证书的方法。
此方法接收以下参数
- SW服务URL
- 用户名和密码
- 要获取的证书RFC
使用用户名和密码通过证书RFC查询证书的库消费示例
<?php require_once 'SWSDK.php'; use SWServices\Csd\CsdService as CsdService; $params = array( "url" => "https://services.test.sw.com.mx", "user" => "usuario", "password" => "contraseña" ); CsdService::Set($params); $response = CsdService::GetListCsdByRfc('EKU9003173C9'); var_dump($response); ?>
通过NoCertificado查询证书
通过发送作为参数的证书编号来获取已加载的证书的方法。
此方法接收以下参数
- SW服务URL
- 用户名和密码
- 要获取的证书编号
使用用户名和密码通过证书编号查询证书的库消费示例
<?php require_once 'SWSDK.php'; use SWServices\Csd\CsdService as CsdService; $params = array( "url" => "https://services.test.sw.com.mx", "user" => "usuario", "password" => "contraseña" ); CsdService::Set($params); $response = CsdService::InfoCsd('20001000000300022816'); var_dump($response); ?>
加载证书
将证书加载到账户中的方法。
此方法接收以下参数
- SW服务URL
- 用户名和密码
- Base64编码的CSD
- Base64编码的密钥
- 证书密码
- 证书类型(默认="stamp")
- 证书状态(默认="true")
使用用户名和密码加载证书的库消费示例
<?php require_once 'SWSDK.php'; use SWServices\Csd\CsdService as CsdService; $b64Cer = base64_encode(file_get_contents('EKU9003173C9.cer')); $b64Key = base64_encode(file_get_contents('EKU9003173C9.key')); $password = "12345678a"; $type = "stamp"; $isActive = true; $params = array( "url" => "https://services.test.sw.com.mx", "user" => "usuario", "password" => "contraseña" ); CsdService::Set($params); $response = CsdService::UploadCsd($isActive, $type, $b64Cer, $b64Key, $password); var_dump($response); ?>
删除证书
从账户中删除证书的方法。
此方法接收以下参数
- SW服务URL
- 用户名和密码
- 要删除的证书编号
使用用户名和密码删除证书的库消费示例
<?php require_once 'SWSDK.php'; use SWServices\Csd\CsdService as CsdService; $params = array( "url" => "https://services.test.sw.com.mx", "user" => "usuario", "password" => "contraseña" ); CsdService::Set($params); $response = CsdService::DisableCsd('20001000000300022763'); var_dump($response); ?>
TimbradoV4
CustomId - Pdf
发行盖章(IssueV4)
issueV4CustomIdPdfV1 接收未盖章的XML内容,以String格式传递,传递一个格式为String的customId参数,然后如果发票和令牌正确,将盖章补丁返回为String(TFD),否则抛出异常。
<?php require_once 'SWSDK.php'; use SWServices\PDF\PdfService as pdfService; use SWServices\Stamp\StampService as StampService; use SWServices\Stamp\EmisionTimbrado as EmisionTimbrado; $prefixOne = date('Y-m-d'); $prefixTwo = rand(0, 555); $customId = "Serie-" . $prefixOne . "-" . $prefixTwo; $resultSpect = "success"; $params = array( "url" => "https://services.test.sw.com.mx", "token" => "T2lYQ0t4L0R...." ); $xml = file_get_contents('./file.xml'); $stamp = EmisionTimbrado::Set($params); $result = $stamp::issueV4CustomIdPdfV1($xml, $customId); var_dump($result); ?>
issueV4CustomIdPdfV2 接收未盖章的XML内容,以String格式传递,传递一个格式为String的customId参数,然后如果发票和令牌正确,将盖章补丁返回为String(TFD),同时将已盖章的凭证也返回为String(CFDI),否则抛出异常。
<?php require_once 'SWSDK.php'; use SWServices\PDF\PdfService as pdfService; use SWServices\Stamp\StampService as StampService; use SWServices\Stamp\EmisionTimbrado as EmisionTimbrado; $prefixOne = date('Y-m-d'); $prefixTwo = rand(0, 555); $customId = "Serie-" . $prefixOne . "-" . $prefixTwo; $resultSpect = "success"; $params = array( "url" => "https://services.test.sw.com.mx", "token" => "T2lYQ0t4L0R...." ); $xml = file_get_contents('./file.xml'); $stamp = EmisionTimbrado::Set($params); $result = $stamp::issueV4CustomIdPdfV2($xml, $customId); var_dump($result); ?>
issueV4CustomIdPdfV3 接收未盖章的XML内容,以String格式传递,传递一个格式为String的customId参数,然后如果发票和令牌正确,将已盖章的凭证返回为String(CFDI),否则抛出异常。
<?php require_once 'SWSDK.php'; use SWServices\PDF\PdfService as pdfService; use SWServices\Stamp\StampService as StampService; use SWServices\Stamp\EmisionTimbrado as EmisionTimbrado; $prefixOne = date('Y-m-d'); $prefixTwo = rand(0, 555); $customId = "Serie-" . $prefixOne . "-" . $prefixTwo; $resultSpect = "success"; $params = array( "url" => "https://services.test.sw.com.mx", "token" => "T2lYQ0t4L0R...." ); $xml = file_get_contents('./file.xml'); $stamp = EmisionTimbrado::Set($params); $result = $stamp::issueV4CustomIdPdfV3($xml, $customId); var_dump($result); ?>
issueV4CustomIdPdfV4 接收未签名的XML内容的字符串格式,传递一个自定义ID参数,该参数也是字符串格式,随后返回所有已盖章的数据,否则抛出异常。
<?php require_once 'SWSDK.php'; use SWServices\PDF\PdfService as pdfService; use SWServices\Stamp\StampService as StampService; use SWServices\Stamp\EmisionTimbrado as EmisionTimbrado; $prefixOne = date('Y-m-d'); $prefixTwo = rand(0, 555); $customId = "Serie-" . $prefixOne . "-" . $prefixTwo; $resultSpect = "success"; $params = array( "url" => "https://services.test.sw.com.mx", "token" => "T2lYQ0t4L0R...." ); $xml = file_get_contents('./file.xml'); $stamp = EmisionTimbrado::Set($params); $result = $stamp::issueV4CustomIdPdfV3($xml, $customId); var_dump($result); ?>
CustomId - 邮件
发行盖章(IssueV4)
issueV4CustomIdEmailV1
接收未签名的XML内容的字符串格式,传递一个自定义ID参数,该参数也是字符串格式,随后如果发票和令牌正确,将返回一个字符串格式的盖章补充(TFD),否则抛出异常。
<?php require_once 'SWSDK.php'; use SWServices\PDF\PdfService as pdfService; use SWServices\Stamp\StampService as StampService; use SWServices\Stamp\EmisionTimbrado as EmisionTimbrado; $prefixOne = date('Y-m-d'); $prefixTwo = rand(0, 555); $customId = "Serie-" . $prefixOne . "-" . $prefixTwo; $email = array("correo@correo.com.mx", "correo@correo.com.mx"); $resultSpect = "success"; $params = array( "url" => "https://services.test.sw.com.mx", "token" => "T2lYQ0t4L0R...." ); $xml = file_get_contents('./file.xml'); $stamp = EmisionTimbrado::Set($params); $result = $stamp::issueV4CustomIdEmailV1($xml, $customId); var_dump($result); ?>
issueV4CustomIdEmailV2 接收未签名的XML内容的字符串格式,传递一个自定义ID参数,该参数也是字符串格式,同时发送一个字符串格式的邮箱参数或最多5个电子邮箱的字符串数组,默认通过此方法生成PDF,随后如果发票和令牌正确,将返回一个字符串格式的盖章补充(TFD),以及已盖章的凭证字符串格式(CFDI),否则抛出异常。
<?php require_once 'SWSDK.php'; use SWServices\PDF\PdfService as pdfService; use SWServices\Stamp\StampService as StampService; use SWServices\Stamp\EmisionTimbrado as EmisionTimbrado; $prefixOne = date('Y-m-d'); $prefixTwo = rand(0, 555); $customId = "Serie-" . $prefixOne . "-" . $prefixTwo; $email = array("correo@correo.com.mx", "correo@correo.com.mx"); $resultSpect = "success"; $params = array( "url" => "https://services.test.sw.com.mx", "token" => "T2lYQ0t4L0R...." ); $xml = file_get_contents('./file.xml'); $stamp = EmisionTimbrado::Set($params); $result = $stamp::issueV4CustomIdEmailV2($xml, $customId); var_dump($result); ?>
issueV4CustomIdEmailV3 接收未签名的XML内容的字符串格式,传递一个自定义ID参数,该参数也是字符串格式,同时发送一个字符串格式的邮箱参数或最多5个电子邮箱的字符串数组,默认通过此方法生成PDF,随后如果发票和令牌正确,将返回一个字符串格式的已盖章凭证(CFDI),否则抛出异常。
<?php require_once 'SWSDK.php'; use SWServices\PDF\PdfService as pdfService; use SWServices\Stamp\StampService as StampService; use SWServices\Stamp\EmisionTimbrado as EmisionTimbrado; $prefixOne = date('Y-m-d'); $prefixTwo = rand(0, 555); $customId = "Serie-" . $prefixOne . "-" . $prefixTwo; $email = array("correo@correo.com.mx", "correo@correo.com.mx"); $resultSpect = "success"; $params = array( "url" => "https://services.test.sw.com.mx", "token" => "T2lYQ0t4L0R...." ); $xml = file_get_contents('./file.xml'); $stamp = EmisionTimbrado::Set($params); $result = $stamp::issueV4CustomIdEmailV3($xml, $customId); var_dump($result); ?>
issueV4CustomIdEmailV4 接收未签名的XML内容的字符串格式,传递一个自定义ID参数,该参数也是字符串格式,同时发送一个字符串格式的邮箱参数或最多5个电子邮箱的字符串数组,默认通过此方法生成PDF,随后返回所有已盖章的数据,否则抛出异常。
<?php require_once 'SWSDK.php'; use SWServices\PDF\PdfService as pdfService; use SWServices\Stamp\StampService as StampService; use SWServices\Stamp\EmisionTimbrado as EmisionTimbrado; $prefixOne = date('Y-m-d'); $prefixTwo = rand(0, 555); $customId = "Serie-" . $prefixOne . "-" . $prefixTwo; $email = array("correo@correo.com.mx", "correo@correo.com.mx"); $resultSpect = "success"; $params = array( "url" => "https://services.test.sw.com.mx", "token" => "T2lYQ0t4L0R...." ); $xml = file_get_contents('./file.xml'); $stamp = EmisionTimbrado::Set($params); $result = $stamp::issueV4CustomIdEmailV4($xml, $customId); var_dump($result); ?>
有关完整服务列表的更多信息,请访问以下链接。
如果您想为库贡献力量或有疑问,请发送邮件至soporte@sw.com.mx。