lunasoft/sw-sdk-php

SW 服务 PHP 库

安装次数: 26,647

依赖: 0

建议者: 0

安全: 0

星标: 14

关注者: 10

分支: 18

开放问题: 10

语言:XSLT

dev-master 2023-12-11 19:23 UTC

README

以下是一个用于通过消费 SW sapien® 服务来对 CFDI 4.0 进行盖章的 PHP 库。

内容

兼容性

  • 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:在项目目录中打开 CMDPowerShell 并输入以下内容
composer install

这样就可以下载之前在 require 中编写的依赖项,在我们的例子中是 SDK

如果不使用 composer

可以通过手动实现来使用类,使用 SWSDK.php 文件而不是 vendor.php 文件

	include('SWSDK.php');

实现

该库有两个主要服务,即身份验证和 CFDI (XML) 的盖章。

支持服务器代理的新功能

如果您公司有服务器代理,并且希望库使用它,则必须传递一个额外的参数 "proxy",包含服务器代理的主机和端口。

    $params = array(
        "url"=>"http://services.test.sw.com.mx",
        "proxy"=> "server.domain.com:8888"
    );

身份验证

身份验证服务主要用于获取 token,该 token 将用于盖章已经发出的 CFDI (xml),为了使用此服务,需要有一个 用户名密码 来获取 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 接收已发出(盖章)的 XML 内容,格式为 String 或也可以是 Base64,如果发票和 token 正确,则返回盖章补丁字符串(TFD),否则抛出异常。

CFDI 盖章 V1

StampV1 接收已发出(盖章)的 XML 内容,格式为 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 内容,格式为 String,如果发票和令牌正确,则返回盖章补丁的字符串(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 的对象,其中包含 TFDCFDI

{
  "data": {
    "tfd": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjxjZmRpOkNvbXByb2JhbnRlIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3d3dy5zYXQuZ29iLm14L2NmZC8zIGh0dHA6Ly93...",
    "cfdi": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjxjZmRpOkNvbXByb2JhbnRlIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3d3dy5zYXQuZ29iLm14L2NmZC8zIGh0dHA6Ly93..."
  },
  "status": "success"
}

使用令牌/凭证在 base64 格式下盖章 XML

如果想要使用 V2 的 base64 模式,这意味着可以发送先前盖章的 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 格式的 TFDCFDI

{
  "data": {
    "tfd": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjxjZmRpOkNvbXByb2JhbnRlIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3d3dy5zYXQuZ29iLm14L2NmZC8zIGh0dHA6Ly93...",
    "cfdi": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjxjZmRpOkNvbXByb2JhbnRlIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3d3dy5zYXQuZ29iLm14L2NmZC8zIGh0dHA6Ly93..."
  },
  "status": "success"
}

盖章 CFDI V3

StampV3 接收已发出(盖章)的 XML 内容,格式为 String,如果发票和令牌正确,则返回盖章的字符串(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 内容,格式为 String,如果发票和令牌正确,则返回盖章的字符串(CFDI),以及其他字段,例如:cadenaOriginalSATnoCertificadoSATnoCertificadoCFDIuuid 等,否则抛出异常。

使用用户名和密码在字符串格式下盖章 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
如果想要使用 V4 的 base64 模式,这意味着可以发送先前盖章的 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"
}
盖章发行

盖章发行 接收格式为 StringXML 内容,如果发票和令牌正确,则生成盖章,并返回盖章的字符串(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

这个盖章版本返回 TFDCFDI

使用示例

    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

这个盖章版本返回 CFDICadenaOriginalSATnoCertificadoSatnoCertificadoCFDIUUIDselloSATselloCFDIfechaTimbradoQRCode

使用示例

    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格式税务印章 接收格式为 StringJSON 内容,然后如果 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

此版本的税务印章返回 TFDCFDI

使用示例

    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

这个盖章版本返回 CFDICadenaOriginalSATnoCertificadoSatnoCertificadoCFDIUUIDselloSATselloCFDIfechaTimbradoQRCode

使用示例

    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 取消

正如其名所示,此服务仅接收带有要取消的 UUID 的已盖章 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 消息

  • 收据:SAT 在取消 CFDI 时返回的收据 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状态

查询Status SAT 接收URL Soap发行人RFC接收人RFC总数UUID参数,格式为,然后在该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);

查询待接受/拒绝的请求

此服务返回一个UUID列表[数组],这些UUID对应于待接受或拒绝的RFC请求。同样,此服务仅接收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表示接受或拒绝取消请求。

此方法接收以下参数

  • Url服务SW
  • 用户名和密码或令牌
  • 接收者证书Base64
  • 接收者密钥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表示接受或拒绝取消请求。

此方法接收以下参数

  • Url服务SW
  • 用户名和密码或令牌
  • 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表示接受或拒绝取消请求。

此方法接收以下参数

  • Url服务SW
  • 用户名和密码或令牌
  • 接受/拒绝取消所需数据的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表示接受或拒绝取消请求。

此方法接收以下参数

  • Url服务SW
  • 用户名和密码或令牌
  • 接收者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=&quot;Av. Hidalgo 77, Col. Guerrero&quot;, 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
  • extra(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门户中查看。

该函数接收以下参数

  • 凭证 fiscal 识别号(uuid)
  • extra(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证书的服务,可以上传、查询和删除证书。可以通过管理员盖章图形化地管理证书。

查询证书

查询账户中所有已上传证书的方法。

此方法接收以下参数

  • Url服务SW
  • 用户名和密码

通过用户名和密码查询证书的库消费示例

<?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参数来获取已上传的证书的方法。

此方法接收以下参数

  • Url服务SW
  • 用户名和密码
  • 要获取的证书的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查询证书

通过发送证书号参数来获取已上传的证书的方法。

此方法接收以下参数

  • Url服务SW
  • 用户名和密码
  • 要获取的证书的编号

通过用户名和密码查询证书编号的库消费示例

<?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);
?>
上传证书

上传账户中的证书的方法。

此方法接收以下参数

  • Url服务SW
  • 用户名和密码
  • CSD Base64
  • Key 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);
?>
删除证书

删除账户中证书的方法。

此方法接收以下参数

  • Url服务SW
  • 用户名和密码
  • 要删除的证书编号

通过用户名和密码删除证书的库消费示例

<?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

Emisión Timbrado (IssueV4)

issueV4CustomIdPdfV1 接收未盖章的XML内容的字符串格式,传递一个参数customId,格式为字符串,随后如果发票和令牌正确,则返回一个字符串格式的盖章补丁(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内容的字符串格式,传递一个参数customId,格式为字符串,随后如果发票和令牌正确,则返回一个字符串格式的盖章补丁(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;
    $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 参数,随后如果发票和令牌正确,将返回已盖章的凭证,格式为字符串(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 内容,格式为 String,传递一个格式为 String 的 customId 参数,随后将返回盖章的所有数据,否则将抛出异常。

<?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 - 邮箱

Emisión Timbrado (IssueV4)

issueV4CustomIdEmailV1

接收未盖章的 XML 内容,格式为 String,传递一个格式为 String 的 customId 参数,随后如果发票和令牌正确,将返回盖章的补充信息,格式为字符串(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 内容,格式为 String,传递一个格式为 String 的 customId 参数,同时传递一个格式为 String 的参数 email 或最多 5 个电子邮箱的 Array,默认生成 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 内容,格式为 String,传递一个格式为 String 的 customId 参数,同时传递一个格式为 String 的参数 email 或最多 5 个电子邮箱的 Array,默认生成 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 内容,格式为 String,传递一个格式为 String 的 customId 参数,同时传递一个格式为 String 的参数 email 或最多 5 个电子邮箱的 Array,默认生成 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