ggarzam / sw-sdk-php
SW服务PHP库
Requires (Dev)
- phpunit/phpunit: ^9.5
This package is auto-updated.
Last update: 2024-09-29 01:02:28 UTC
README
以下您将找到我们为SmarterWeb提供的CFDI 3.3 Timbrado服务SDK所需的文档,该服务通过API REST提供。当前状态
兼容性
- CFDI 3.3
- PHP 5.6 或 PHP 7 的版本
依赖项
安装
为了使用我们的SDK来消费SmarterWeb提供的REST服务,首先需要安装PHP版本5.6或7,然后安装PHP包管理器Composer。
安装Composer
- 步骤1:访问以下网页 https://composer.php.ac.cn/
- 步骤2:点击 下载
- 步骤3:点击 Composer-Setup.exe,这将打开浏览器窗口以便保存composer文件
- 步骤4:执行下载的 Composer-Setup.exe 文件并按照安装步骤操作
准备开发环境
- 步骤1:我们需要创建一个名为 composer.json 的调用文件,并在其中输入我们想要使用的库,例如示例中的 lunasoft/sw-sdk-php
{
"name": "richbarusta/implement",
"authors": [
{
"name": "Rich Barusta",
"email": "ricardo.barusta@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”,包括服务器代理的主机和端口。
$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"=>"demo", "password"=> "123456789" ); 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 V1盖章
StampV1 接收已发出(盖章)的XML内容的字符串,然后如果发票和token正确,它会在字符串(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"=>"demo", "password"=> "123456789" ); $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"=>"T2lYQ0t4L0RHVkR4dHZ5Nkk1VHNEakZ3Y0J4Nk9GODZuRyt4cE1wVm5tbXB3YVZxTHdOdHAwVXY2NTdJb1hkREtXTzE3dk9pMmdMdkFDR2xFWFVPUXpTUm9mTG1ySXdZbFNja3FRa0RlYURqbzdzdlI2UUx1WGJiKzViUWY2dnZGbFloUDJ6RjhFTGF4M1BySnJ4cHF0YjUvbmRyWWpjTkVLN3ppd3RxL0dJPQ.T2lYQ0t4L0RHVkR4dHZ5Nkk1VHNEakZ3Y0J4Nk9GODZuRyt4cE1wVm5tbFlVcU92YUJTZWlHU3pER1kySnlXRTF4alNUS0ZWcUlVS0NhelhqaXdnWTRncklVSWVvZlFZMWNyUjVxYUFxMWFxcStUL1IzdGpHRTJqdS9Zakw2UGRiMTFPRlV3a2kyOWI5WUZHWk85ODJtU0M2UlJEUkFTVXhYTDNKZVdhOXIySE1tUVlFdm1jN3kvRStBQlpLRi9NeWJrd0R3clhpYWJrVUMwV0Mwd3FhUXdpUFF5NW5PN3J5cklMb0FETHlxVFRtRW16UW5ZVjAwUjdCa2g0Yk1iTExCeXJkVDRhMGMxOUZ1YWlIUWRRVC8yalFTNUczZXdvWlF0cSt2UW0waFZKY2gyaW5jeElydXN3clNPUDNvU1J2dm9weHBTSlZYNU9aaGsvalpQMUxrUndzK0dHS2dpTittY1JmR3o2M3NqNkh4MW9KVXMvUHhZYzVLQS9UK2E1SVhEZFJKYWx4ZmlEWDFuSXlqc2ZRYXlUQk1ldlZkU2tEdU10NFVMdHZKUURLblBxakw0SDl5bUxabDFLNmNPbEp6b3Jtd2Q1V2htRHlTdDZ6eTFRdUNnYnVvK2tuVUdhMmwrVWRCZi9rQkU9.7k2gVCGSZKLzJK5Ky3Nr5tKxvGSJhL13Q8W-YhT0uIo" ); 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"=>"demo", "password"=> "123456789" ); $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":{
"cfdi":"<?xml version=\"1.0\" encoding=\"utf-8\"?><cfdi:Comprobante xsi:schemaLocation=\"http://www.sat.gob.mx/cfd/3 http://www.sat.gob.mx/sitio_internet/cfd/3/cfdv33.xsd http:/...",
"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"=>"T2lYQ0t4L0RHVkR4dHZ5Nkk1VHNEakZ3Y0J4Nk9GODZuRyt4cE1wVm5tbXB3YVZxTHdOdHAwVXY2NTdJb1hkREtXTzE3dk9pMmdMdkFDR2xFWFVPUXpTUm9mTG1ySXdZbFNja3FRa0RlYURqbzdzdlI2UUx1WGJiKzViUWY2dnZGbFloUDJ6RjhFTGF4M1BySnJ4cHF0YjUvbmRyWWpjTkVLN3ppd3RxL0dJPQ.T2lYQ0t4L0RHVkR4dHZ5Nkk1VHNEakZ3Y0J4Nk9GODZuRyt4cE1wVm5tbFlVcU92YUJTZWlHU3pER1kySnlXRTF4alNUS0ZWcUlVS0NhelhqaXdnWTRncklVSWVvZlFZMWNyUjVxYUFxMWFxcStUL1IzdGpHRTJqdS9Zakw2UGRiMTFPRlV3a2kyOWI5WUZHWk85ODJtU0M2UlJEUkFTVXhYTDNKZVdhOXIySE1tUVlFdm1jN3kvRStBQlpLRi9NeWJrd0R3clhpYWJrVUMwV0Mwd3FhUXdpUFF5NW5PN3J5cklMb0FETHlxVFRtRW16UW5ZVjAwUjdCa2g0Yk1iTExCeXJkVDRhMGMxOUZ1YWlIUWRRVC8yalFTNUczZXdvWlF0cSt2UW0waFZKY2gyaW5jeElydXN3clNPUDNvU1J2dm9weHBTSlZYNU9aaGsvalpQMUxrUndzK0dHS2dpTittY1JmR3o2M3NqNkh4MW9KVXMvUHhZYzVLQS9UK2E1SVhEZFJKYWx4ZmlEWDFuSXlqc2ZRYXlUQk1ldlZkU2tEdU10NFVMdHZKUURLblBxakw0SDl5bUxabDFLNmNPbEp6b3Jtd2Q1V2htRHlTdDZ6eTFRdUNnYnVvK2tuVUdhMmwrVWRCZi9rQkU9.7k2gVCGSZKLzJK5Ky3Nr5tKxvGSJhL13Q8W-YhT0uIo" ); 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":{
"cfdi":"<?xml version=\"1.0\" encoding=\"utf-8\"?><cfdi:Comprobante xsi:schemaLocation=\"http://www.sat.gob.mx/cfd/3 http://www.sat.gob.mx/sitio_internet/cfd/3/cfdv33.xsd http:/...",
"tfd":"<tfd:TimbreFiscalDigital xsi:schemaLocation=\"http://www.sat.gob.mx/TimbreFiscalDigital http://www.sat.gob.mx/sitio_internet/cfd/TimbreFiscalDigital/TimbreFiscalDigitalv11.xsd...","status":"success"}
使用令牌/凭据在base64格式上盖章XML
如果需要,可以使用v2的base64模式,这意味着可以发送已盖章的xml,格式为base64,库将返回与v2正常使用相同的响应结构,TFD和CFDI也是base64格式。
<?php require_once 'vendor/autoload.php'; use SWServices\Stamp\StampService as StampService; $params = array( "url"=>"http://services.test.sw.com.mx", "token"=>"T2lYQ0t4L0RHVkR4dHZ5Nkk1VHNEakZ3Y0J4Nk9GODZuRyt4cE1wVm5tbXB3YVZxTHdOdHAwVXY2NTdJb1hkREtXTzE3dk9pMmdMdkFDR2xFWFVPUXpTUm9mTG1ySXdZbFNja3FRa0RlYURqbzdzdlI2UUx1WGJiKzViUWY2dnZGbFloUDJ6RjhFTGF4M1BySnJ4cHF0YjUvbmRyWWpjTkVLN3ppd3RxL0dJPQ.T2lYQ0t4L0RHVkR4dHZ5Nkk1VHNEakZ3Y0J4Nk9GODZuRyt4cE1wVm5tbFlVcU92YUJTZWlHU3pER1kySnlXRTF4alNUS0ZWcUlVS0NhelhqaXdnWTRncklVSWVvZlFZMWNyUjVxYUFxMWFxcStUL1IzdGpHRTJqdS9Zakw2UGRiMTFPRlV3a2kyOWI5WUZHWk85ODJtU0M2UlJEUkFTVXhYTDNKZVdhOXIySE1tUVlFdm1jN3kvRStBQlpLRi9NeWJrd0R3clhpYWJrVUMwV0Mwd3FhUXdpUFF5NW5PN3J5cklMb0FETHlxVFRtRW16UW5ZVjAwUjdCa2g0Yk1iTExCeXJkVDRhMGMxOUZ1YWlIUWRRVC8yalFTNUczZXdvWlF0cSt2UW0waFZKY2gyaW5jeElydXN3clNPUDNvU1J2dm9weHBTSlZYNU9aaGsvalpQMUxrUndzK0dHS2dpTittY1JmR3o2M3NqNkh4MW9KVXMvUHhZYzVLQS9UK2E1SVhEZFJKYWx4ZmlEWDFuSXlqc2ZRYXlUQk1ldlZkU2tEdU10NFVMdHZKUURLblBxakw0SDl5bUxabDFLNmNPbEp6b3Jtd2Q1V2htRHlTdDZ6eTFRdUNnYnVvK2tuVUdhMmwrVWRCZi9rQkU9.7k2gVCGSZKLzJK5Ky3Nr5tKxvGSJhL13Q8W-YhT0uIo" ); 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":{
"cfdi":"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjxjZmRpOkNvbXByb2JhbnRlIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3d3dy5zYXQuZ29iLm14L2NmZC8zIGh0dHA6Ly93...",
"tfd":"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"=>"demo", "password"=> "123456789" ); $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 xsi:schemaLocation=\"http://www.sat.gob.mx/cfd/3 http://www.sat.gob.mx/sitio_internet/cfd/3/cfdv33.xsd http:/...",
"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"=>"T2lYQ0t4L0RHVkR4dHZ5Nkk1VHNEakZ3Y0J4Nk9GODZuRyt4cE1wVm5tbXB3YVZxTHdOdHAwVXY2NTdJb1hkREtXTzE3dk9pMmdMdkFDR2xFWFVPUXpTUm9mTG1ySXdZbFNja3FRa0RlYURqbzdzdlI2UUx1WGJiKzViUWY2dnZGbFloUDJ6RjhFTGF4M1BySnJ4cHF0YjUvbmRyWWpjTkVLN3ppd3RxL0dJPQ.T2lYQ0t4L0RHVkR4dHZ5Nkk1VHNEakZ3Y0J4Nk9GODZuRyt4cE1wVm5tbFlVcU92YUJTZWlHU3pER1kySnlXRTF4alNUS0ZWcUlVS0NhelhqaXdnWTRncklVSWVvZlFZMWNyUjVxYUFxMWFxcStUL1IzdGpHRTJqdS9Zakw2UGRiMTFPRlV3a2kyOWI5WUZHWk85ODJtU0M2UlJEUkFTVXhYTDNKZVdhOXIySE1tUVlFdm1jN3kvRStBQlpLRi9NeWJrd0R3clhpYWJrVUMwV0Mwd3FhUXdpUFF5NW5PN3J5cklMb0FETHlxVFRtRW16UW5ZVjAwUjdCa2g0Yk1iTExCeXJkVDRhMGMxOUZ1YWlIUWRRVC8yalFTNUczZXdvWlF0cSt2UW0waFZKY2gyaW5jeElydXN3clNPUDNvU1J2dm9weHBTSlZYNU9aaGsvalpQMUxrUndzK0dHS2dpTittY1JmR3o2M3NqNkh4MW9KVXMvUHhZYzVLQS9UK2E1SVhEZFJKYWx4ZmlEWDFuSXlqc2ZRYXlUQk1ldlZkU2tEdU10NFVMdHZKUURLblBxakw0SDl5bUxabDFLNmNPbEp6b3Jtd2Q1V2htRHlTdDZ6eTFRdUNnYnVvK2tuVUdhMmwrVWRCZi9rQkU9.7k2gVCGSZKLzJK5Ky3Nr5tKxvGSJhL13Q8W-YhT0uIo" ); 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 xsi:schemaLocation=\"http://www.sat.gob.mx/cfd/3 http://www.sat.gob.mx/sitio_internet/cfd/3/cfdv33.xsd http:/...",
"status":"success"}
使用令牌/凭据在base64格式上盖章XML
如果需要,可以使用v3的base64模式,这意味着可以发送已盖章的xml,格式为base64,库将返回与v3正常使用相同的响应结构,CFDI也是base64格式。
<?php require_once 'vendor/autoload.php'; use SWServices\Stamp\StampService as StampService; $params = array( "url"=>"http://services.test.sw.com.mx", "token"=>"T2lYQ0t4L0RHVkR4dHZ5Nkk1VHNEakZ3Y0J4Nk9GODZuRyt4cE1wVm5tbXB3YVZxTHdOdHAwVXY2NTdJb1hkREtXTzE3dk9pMmdMdkFDR2xFWFVPUXpTUm9mTG1ySXdZbFNja3FRa0RlYURqbzdzdlI2UUx1WGJiKzViUWY2dnZGbFloUDJ6RjhFTGF4M1BySnJ4cHF0YjUvbmRyWWpjTkVLN3ppd3RxL0dJPQ.T2lYQ0t4L0RHVkR4dHZ5Nkk1VHNEakZ3Y0J4Nk9GODZuRyt4cE1wVm5tbFlVcU92YUJTZWlHU3pER1kySnlXRTF4alNUS0ZWcUlVS0NhelhqaXdnWTRncklVSWVvZlFZMWNyUjVxYUFxMWFxcStUL1IzdGpHRTJqdS9Zakw2UGRiMTFPRlV3a2kyOWI5WUZHWk85ODJtU0M2UlJEUkFTVXhYTDNKZVdhOXIySE1tUVlFdm1jN3kvRStBQlpLRi9NeWJrd0R3clhpYWJrVUMwV0Mwd3FhUXdpUFF5NW5PN3J5cklMb0FETHlxVFRtRW16UW5ZVjAwUjdCa2g0Yk1iTExCeXJkVDRhMGMxOUZ1YWlIUWRRVC8yalFTNUczZXdvWlF0cSt2UW0waFZKY2gyaW5jeElydXN3clNPUDNvU1J2dm9weHBTSlZYNU9aaGsvalpQMUxrUndzK0dHS2dpTittY1JmR3o2M3NqNkh4MW9KVXMvUHhZYzVLQS9UK2E1SVhEZFJKYWx4ZmlEWDFuSXlqc2ZRYXlUQk1ldlZkU2tEdU10NFVMdHZKUURLblBxakw0SDl5bUxabDFLNmNPbEp6b3Jtd2Q1V2htRHlTdDZ6eTFRdUNnYnVvK2tuVUdhMmwrVWRCZi9rQkU9.7k2gVCGSZKLzJK5Ky3Nr5tKxvGSJhL13Q8W-YhT0uIo" ); 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::StampV3($xml,true); var_dump($result); } catch(Exception $e) { header('Content-type: text/plain'); echo $e->getMessage(); } ?>
前面的示例中,响应是类型为 JSON 的对象,其中包含base64格式的 CFDI。
{"data":{
"cfdi":"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjxjZmRpOkNvbXByb2JhbnRlIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3d3dy5zYXQuZ29iLm14L2NmZC8zIGh0dHA6Ly93...",
"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"=>"demo", "password"=> "123456789" ); $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 xsi:schemaLocation=\"http://www.sat.gob.mx/cfd/3 http://www.sat.gob.mx/sitio_internet/cfd/3/cfdv33.xsd http://www.sat.gob.mx/nomina12 http://www.sat.gob.mx/sitio_internet/cfd/nomina/nomina12.xsd\" xmlns:nomina12=\"http://www.sat.gob.mx/nomina12\" Version=\"3.3\"..."
},
"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"=>"T2lYQ0t4L0RHVkR4dHZ5Nkk1VHNEakZ3Y0J4Nk9GODZuRyt4cE1wVm5tbXB3YVZxTHdOdHAwVXY2NTdJb1hkREtXTzE3dk9pMmdMdkFDR2xFWFVPUXpTUm9mTG1ySXdZbFNja3FRa0RlYURqbzdzdlI2UUx1WGJiKzViUWY2dnZGbFloUDJ6RjhFTGF4M1BySnJ4cHF0YjUvbmRyWWpjTkVLN3ppd3RxL0dJPQ.T2lYQ0t4L0RHVkR4dHZ5Nkk1VHNEakZ3Y0J4Nk9GODZuRyt4cE1wVm5tbFlVcU92YUJTZWlHU3pER1kySnlXRTF4alNUS0ZWcUlVS0NhelhqaXdnWTRncklVSWVvZlFZMWNyUjVxYUFxMWFxcStUL1IzdGpHRTJqdS9Zakw2UGRiMTFPRlV3a2kyOWI5WUZHWk85ODJtU0M2UlJEUkFTVXhYTDNKZVdhOXIySE1tUVlFdm1jN3kvRStBQlpLRi9NeWJrd0R3clhpYWJrVUMwV0Mwd3FhUXdpUFF5NW5PN3J5cklMb0FETHlxVFRtRW16UW5ZVjAwUjdCa2g0Yk1iTExCeXJkVDRhMGMxOUZ1YWlIUWRRVC8yalFTNUczZXdvWlF0cSt2UW0waFZKY2gyaW5jeElydXN3clNPUDNvU1J2dm9weHBTSlZYNU9aaGsvalpQMUxrUndzK0dHS2dpTittY1JmR3o2M3NqNkh4MW9KVXMvUHhZYzVLQS9UK2E1SVhEZFJKYWx4ZmlEWDFuSXlqc2ZRYXlUQk1ldlZkU2tEdU10NFVMdHZKUURLblBxakw0SDl5bUxabDFLNmNPbEp6b3Jtd2Q1V2htRHlTdDZ6eTFRdUNnYnVvK2tuVUdhMmwrVWRCZi9rQkU9.7k2gVCGSZKLzJK5Ky3Nr5tKxvGSJhL13Q8W-YhT0uIo" ); 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 xsi:schemaLocation=\"http://www.sat.gob.mx/cfd/3 http://www.sat.gob.mx/sitio_internet/cfd/3/cfdv33.xsd http://www.sat.gob.mx/nomina12 http://www.sat.gob.mx/sitio_internet/cfd/nomina/nomina12.xsd\" xmlns:nomina12=\"http://www.sat.gob.mx/nomina12\" Version=\"3.3\"..."
},
"status": "success"
}
使用令牌/凭据在base64格式上盖章XML
如果需要,可以使用v4的base64模式,这意味着可以发送已盖章的xml,格式为base64,库将返回与v4正常使用相同的响应结构,CFDI也是base64格式。
<?php require_once 'vendor/autoload.php'; use SWServices\Stamp\StampService as StampService; $params = array( "url"=>"http://services.test.sw.com.mx", "token"=>"T2lYQ0t4L0RHVkR4dHZ5Nkk1VHNEakZ3Y0J4Nk9GODZuRyt4cE1wVm5tbXB3YVZxTHdOdHAwVXY2NTdJb1hkREtXTzE3dk9pMmdMdkFDR2xFWFVPUXpTUm9mTG1ySXdZbFNja3FRa0RlYURqbzdzdlI2UUx1WGJiKzViUWY2dnZGbFloUDJ6RjhFTGF4M1BySnJ4cHF0YjUvbmRyWWpjTkVLN3ppd3RxL0dJPQ.T2lYQ0t4L0RHVkR4dHZ5Nkk1VHNEakZ3Y0J4Nk9GODZuRyt4cE1wVm5tbFlVcU92YUJTZWlHU3pER1kySnlXRTF4alNUS0ZWcUlVS0NhelhqaXdnWTRncklVSWVvZlFZMWNyUjVxYUFxMWFxcStUL1IzdGpHRTJqdS9Zakw2UGRiMTFPRlV3a2kyOWI5WUZHWk85ODJtU0M2UlJEUkFTVXhYTDNKZVdhOXIySE1tUVlFdm1jN3kvRStBQlpLRi9NeWJrd0R3clhpYWJrVUMwV0Mwd3FhUXdpUFF5NW5PN3J5cklMb0FETHlxVFRtRW16UW5ZVjAwUjdCa2g0Yk1iTExCeXJkVDRhMGMxOUZ1YWlIUWRRVC8yalFTNUczZXdvWlF0cSt2UW0waFZKY2gyaW5jeElydXN3clNPUDNvU1J2dm9weHBTSlZYNU9aaGsvalpQMUxrUndzK0dHS2dpTittY1JmR3o2M3NqNkh4MW9KVXMvUHhZYzVLQS9UK2E1SVhEZFJKYWx4ZmlEWDFuSXlqc2ZRYXlUQk1ldlZkU2tEdU10NFVMdHZKUURLblBxakw0SDl5bUxabDFLNmNPbEp6b3Jtd2Q1V2htRHlTdDZ6eTFRdUNnYnVvK2tuVUdhMmwrVWRCZi9rQkU9.7k2gVCGSZKLzJK5Ky3Nr5tKxvGSJhL13Q8W-YhT0uIo" ); 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"
}
盖章发行
盖章发行 接收字符串格式的XML内容,然后如果发票和令牌正确,生成盖章,并返回盖章的凭证字符串(CFDI)。否则,抛出异常。
盖章发行V1
这个盖章版本仅返回 TFD。
使用示例
use SWServices\Stamp\EmisionTimbrado as EmisionTimbrado; $params = array( "url"=>"http://services.test.sw.com.mx", "user"=>"demo", "password"=> "123456789" $xml = file_get_contents('Tests/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"=>"demo", "password"=> "123456789" $xml = file_get_contents('Tests/Resources/file.xml'); EmisionTimbrado::Set($params); $resultadoIssue = EmisionTimbrado::EmisionTimbradoV2($xml); var_dump($resultadoIssue); );
盖章发行V3
这个盖章版本仅返回 CFDI。
使用示例
use SWServices\Stamp\EmisionTimbrado as EmisionTimbrado; $params = array( "url"=>"http://services.test.sw.com.mx", "user"=>"demo", "password"=> "123456789" $xml = file_get_contents('Tests/Resources/file.xml'); EmisionTimbrado::Set($params); $resultadoIssue = EmisionTimbrado::EmisionTimbradoV3($xml); var_dump($resultadoIssue); );
盖章发行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"=>"demo", "password"=> "123456789" $xml = file_get_contents('Tests/Resources/file.xml'); EmisionTimbrado::Set($params); $resultadoIssue = EmisionTimbrado::EmisionTimbradoV4($xml); var_dump($resultadoIssue); );
盖章发行JSON
JSON电子发票开具 接收格式为 String 的 JSON 内容,随后如果 JSON 和令牌正确,则生成 XML 的组装和盖章,然后以 string 格式(CFDI)返回已盖章的凭证,否则在盖章时将显示错误。
JSON电子发票开具 V1
这个盖章版本仅返回 TFD。
使用示例
use SWServices\JSonIssuer\JsonEmisionTimbrado as JsonEmisionTimbrado; $params = array( "url"=>"http://services.test.sw.com.mx", "user"=>"demo", "password"=> "123456789" $json = file_get_contents("Tests/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"=>"demo", "password"=> "123456789" $json = file_get_contents("Tests/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"=>"demo", "password"=> "123456789" $json = file_get_contents("Tests/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"=>"demo", "password"=> "123456789" $json = file_get_contents("Tests/Resources/cfdi.json"); JsonEmisionTimbrado::Set($params); $resultadoJson = JsonEmisionTimbrado::jsonEmisionTimbradoV4($json); var_dump($resultadoJson); );
CFDI 3.3 取消
CSD 取消
必须包含以下数据
- 证书 (.cer)
- 密钥 (.key)
- 密钥文件密码
- 发票人RFC
- UUID
- 原因
- 替代凭证号
步骤 1:获取访问令牌,或者使用无限令牌
首先需要在我们的服务中进行身份验证,以获取访问令牌,或者如果需要,可以使用无限令牌。
步骤 2:发送必要数据
发送取消所需的必要数据,当然包括之前生成的访问令牌。
请注意,由于 .cer 和 .key 文件是二进制的,因此必须以 base64 格式发送,以便我们可以在服务器上处理它们。
<?php include('./SWSDK.php'); use SWServices\Cancelation\CancelationService as CancelationService; $rfc=""; $password=""; $uuid=" "; $motivo="02"; $foliosustitucion=" "; $b64Cer="MIIFuzCCA6OgAwIBAgIU........."; $b64Key="MIIFDjBABgkqhkiG9w0B........."; $url="http://services.test.sw.com.mx/"; $token=" "; $params = array( "url"=>$url, "token"=>$token, "uuid"=>$uuid, "password"=>$password, "rfc"=>$rfc, "motivo"=>$motivo, "cerB64"=>$b64Cer, "keyB64"=>$b64Key ); try { header('Content-type: application/json'); $cancelationService = CancelationService::Set($params); $result = $cancelationService::CancelationByCSD(); 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("../Tests/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
- 原因
- 替代凭证号
步骤 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, "uuid"=>$uuid, "password"=>$password, "rfc"=>$rfc, "motivo"=>$motivo, "foliosustitucion"=>$foliosustitucion, "pfxB64"=>$b64Pfx, ); try { header('Content-type: application/json'); $cancelationService = CancelationService::Set($params); $result = $cancelationService::CancelationByPFX(); echo json_encode($result); } catch(Exception $e) { header('Content-type: text/plain'); echo $e->getMessage(); } ?>
通过 UUID 取消
必须包含以下数据
- 发票人RFC
- UUID
- 原因
- 替代凭证号
步骤 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"=>" ", "rfc"=>$rfc, "uuid"=>$uuid, "motivo"=>$motivo, "foliosustitucion"=>$foliosustitucion ); try { header('Content-type: application/json'); $cancelationService = CancelationService::Set($params); $result = $cancelationService::CancelationByUUID(); 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"
}
取消凭证页码响应代码
查询 CFDI 3.3 余额
此服务接收令牌并生成构成余额查询的元素
- 客户余额 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'=> 'T2lYQ0t4L0RHVkR4dHZ5Nkk1VHNEakZ3Y0J4Nk9GODZuRyt4cE1wVm5tbXB3YVZxTHdOdHAwVXY2NTdJb1hkREtXTzE3dk9pMmdMdkFDR2xFWFVPUXpTUm9mTG1ySXdZbFNja3FRa0RlYURqbzdzdlI2UUx1WGJiKzViUWY2dnZGbFloUDJ6RjhFTGF4M1BySnJ4cHF0YjUvbmRyWWpjTkVLN3ppd3RxL0dJPQ.T2lYQ0t4L0RHVkR4dHZ5Nkk1VHNEakZ3Y0J4Nk9GODZuRyt4cE1wVm5tbFlVcU92YUJTZWlHU3pER1kySnlXRTF4alNUS0ZWcUlVS0NhelhqaXdnWTRncklVSWVvZlFZMWNyUjVxYUFxMWFxcStUL1IzdGpHRTJqdS9Zakw2UGRiMTFPRlV3a2kyOWI5WUZHWk85ODJtU0M2UlJEUkFTVXhYTDNKZVdhOXIySE1tUVlFdm1jN3kvRStBQlpLRi9NeWJrd0R3clhpYWJrVUMwV0Mwd3FhUXdpUFF5NW5PN3J5cklMb0FETHlxVFRtRW16UW5ZVjAwUjdCa2g0Yk1iTExCeXJkVDRhMGMxOUZ1YWlIUWRRVC8yalFTNUczZXdvWlF0cSt2UW0waFZKY2gyaW5jeElydXN3clNPUDNvU1J2dm9weHBTSlZYNU9aaGsvalpQMUxrUndzK0dHS2dpTittY1JmR3o2M3NqNkh4MW9KVXMvUHhZYzVLQS9UK2E1SVhEZFJKYWx4ZmlEWDFuSXlqc2ZRYXlUQk1ldlZkU2tEdU10NFVMdHZKUURLblBxakw0SDl5bUxabDFLNmNPbEp6b3Jtd2Q1V2htRHlTdDZ6eTFRdUNnYnVvK2tuVUdhMmwrVWRCZi9rQkU9.7k2gVCGSZKLzJK5Ky3Nr5tKxvGSJhL13Q8W-YhT0uIo', ); 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\ServicioConsultaSAT as consultaCfdiSAT; $soapUrl = "http://consultaqrfacturaelectronicatest.sw.com.mx/ConsultaCFDIService.svc"; $re = "LAN8507268IA"; $rr = "LAN7008173R5"; $tt = 5800.00; $uuidV = "6ab07bef-4446-43ea-a3fd-04a804309457"; $consultaCfdi = consultaCfdiSAT::ServicioConsultaSAT($soapUrl, $re, $rr, $tt, $uuidV); 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"=>"demo", "password"=> "123456789" ); $rfc = "LAN7008173R5"; cancelationService::Set($params); $consultaPendientes = cancelationService::PendientesPorCancelar($rfc); var_dump($consultaPendientes);
接受/拒绝取消
接受/拒绝 是一个服务,接收方可以通过该服务接受或拒绝从待办事项列表中获得的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"=>"demo", "password"=> "123456789" ); $cerB64 = base64_encode(file_get_contents('Tests\Resources\CSD_Pruebas_CFDI_LAN7008173R5.cer')); $keyB64 = base64_encode(file_get_contents('Tests\Resources\CSD_Pruebas_CFDI_LAN7008173R5.key')); $password = "12345678a"; $rfc = "LAN7008173R5"; $uuids[0]=array("6ab07bef-4446-43ea-a3fd-04a804309457","Rechazo"); cancelationService::Set($params); $aceptarRechazar = cancelationService::AceptarRechazarCancelacionCSD($rfc, $cerB64, $keyB64, $password, $uuids); var_dump($aceptarRechazar);
使用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"=>"demo", "password"=> "123456789" ); $pfxB64 = base64_encode(file_get_contents('Tests\Resources\CSD_Pruebas_CFDI_LAN7008173R5.pfx')); $password = "12345678a"; $rfc = "LAN7008173R5"; $uuids[0]=array("6ab07bef-4446-43ea-a3fd-04a804309457","Rechazo"); cancelationService::Set($params); $aceptarRechazar = cancelationService::AceptarRechazarCancelacionPFX($rfc, $pfxB64, $password, $uuids); var_dump($aceptarRechazar);
使用XML接受/拒绝
此模式接收参数包括接受/拒绝的XML,其中已指定UUID及其对应响应。
要发送的XML
<SolicitudAceptacionRechazo Fecha="2018-09-20T14:48:09" RfcPacEnviaSolicitud="AAA010101AAA" RfcReceptor="LAN7008173R5" xmlns="http://cancelacfd.sat.gob.mx" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <Folios> <UUID>FD74D156-B9B0-44A5-9906-E08182E8363E</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/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>QlfpYnalZKv6WAv33vZwMME7noA=</DigestValue> </Reference> </SignedInfo> <SignatureValue>dwhdSsuP64IFJMuR0sogqxpcQqlN9zq4tBXK6KHGTPMlC/xSXEi30L5SD6ogeCHpu3G2NzaXrE6wRxc8kRLOuSy/LxVEPUJi5HgYnfJMBWSq/EVccf2DD6JY4ihAtgdko7E26liY3RcqczfF9ujh98FC3eu9i1IJCJ9isIZYPqTvthwOtKEQVFvSfeA0wE7aVz1z1wBVur0wnIFHz13//SUHRgHMWrJ9m5pLuH5zVv+MU80dmmrNQ7EXz3krCDj7JMh6/I1ftgYsJMsUzwhcYgy7v9FTGrz3tkn/j8Gq1dWWYcqTtqHUcQtSpdCLgw6d9KojpUsqN5WVVb+HFe2uCA==</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> </SolicitudAceptacionRechazo>
使用示例
require_once 'SWSDK.php'; use SWServices\Cancelation\CancelationService as cancelationService; $params = array( "url"=>"http://services.test.sw.com.mx", "user"=>"demo", "password"=> "123456789" ); $xml = file_get_contents('Tests\Resources\fileAcceptReject.xml'); cancelationService::Set($params); $aceptarRechazar = cancelationService::AceptarRechazarCancelacionXML($xml); var_dump($aceptarRechazar);
使用UUID接受/拒绝
此模式接收参数包括接收方RFC、UUID以及要采取的操作。重要的是,对应于RFC的证书必须在印章管理员中。
使用示例
require_once 'SWSDK.php'; use SWServices\Cancelation\CancelationService as cancelationService; $params = array( "url"=>"http://services.test.sw.com.mx", "user"=>"demo", "password"=> "123456789" ); $rfc = "LAN7008173R5"; $uuid = "6ab07bef-4446-43ea-a3fd-04a804309457"; $accion = "Rechazo"; cancelationService::Set($params); $aceptarRechazar = cancelationService::AceptarRechazarCancelacionUUID($rfc, $uuid, $accion); 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"=>"demo", "password"=> "123456789" ); $cerB64 = base64_encode(file_get_contents('Tests\Resources\CSD_Pruebas_CFDI_LAN7008173R5.cer')); $keyB64 = base64_encode(file_get_contents('Tests\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"=>"demo", "password"=> "123456789" ); $pfxB64 = base64_encode(file_get_contents('Tests\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"=>"demo", "password"=> "123456789" ); $rfc = "LAN7008173R5"; $uuid = "52c02b64-d12e-4163-b581-bf749238896d"; $xml = file_get_contents('Tests\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"=>"demo", "password"=> "123456789" ); $rfc = "LAN7008173R5"; $uuid = "52c02b64-d12e-4163-b581-bf749238896d"; cancelationService::Set($params); $consultaRelacionados = cancelationService::ConsultarCFDIRelacionadosUUID($rfc, $uuid); var_dump($consultaRelacionados);