Integrar en nuestro proyecto el archivo sw-services.prg el cual contiene los métodos a ser utilizados para los servicios REST.
El servicio de Autenticación es utilizado principalmente para obtener el token el cual será utilizado para poder timbrar nuestro CFDI (xml) ya emitido (sellado), para poder utilizar este servicio es necesario que cuente con un usuario y contraseña para posteriormente obtenga el token, usted puede utilizar los que están en este ejemplo para el ambiente de Pruebas.
Obtener Token
SET PROCEDURE TO 'sw-services.prg' ADDITIVE
cURL = 'http://services.test.sw.com.mx'
cUser = 'demo'
cPassword = '123456789'
Response = Authentication(cURL, cUser, cPassword)
messagebox(Response) && respuesta del servicio web
GetTokenValue(Response) && obtener solo el valor de data->token
El método de timbrado recibe el contenido de un XML ya emitido (sellado) en formato String y un string con la versión a la cual se estará enviando. Este valor puede ser "V1", "V2", "V3", "V4". Para una completa referencia de las respuestas de cada versión de timbrado, acudir al enlace.
Ejemplo de timbrado
SET PROCEDURE TO 'sw-services.prg' ADDITIVE
cURL = 'http://services.test.sw.com.mx/'
cUser = 'demo'
cPassword = '123456789'
cXML = STRCONV(FILETOSTR(GETFILE('xml')),11)
cToken = GetTokenValue(Authentication(cURL, cUser, cPassword))
cVersion = 'V3'
cResponse= Stamp(cURL, cToken, cXML, cVersion)
? cResponse
MESSAGEBOX(cResponse)
El método de timbrado recibe el contenido de un XML sin sellar en formato String y un string con la versión a la cual se estará enviando. Este valor puede ser "V1", "V2", "V3", "V4". Para una completa referencia de las respuestas de cada versión de timbrado, acudir al enlace.
Ejemplo de timbrado
SET PROCEDURE TO 'sw-services.prg' ADDITIVE
cURL = 'http://services.test.sw.com.mx/'
cUser = 'demo'
cPassword = '123456789'
cXML = STRCONV(FILETOSTR(GETFILE('xml')),11)
cToken = GetTokenValue(Authentication(cURL, cUser, cPassword))
cVersion = 'V3'
cResponse= Issue(cURL, cToken, cXML, cVersion)
? cResponse
MESSAGEBOX(cResponse)
Cancelacion Se utiliza para cancelar documentos xml y se puede hacer mediante varios metodos Cancelación CSD, Cancelación PFX, Cancelacion XML y Cancelación UUID.
Como su nombre lo indica, este método recibe todos los elementos que componen el CSD los cuales son los siguientes:
- Certificado (.cer) en Base64
- Key (.key) en Base64
- Password del archivo key
- UUID
- RFC emisor
- Motivo
- FolioSustitucion
Ejemplo de uso
SET PROCEDURE TO 'sw-services.prg' ADDITIVE
cURL = 'http://services.test.sw.com.mx/'
cUser = 'demo'
cPassword = '123456789'
cToken = GetTokenValue(Authentication(cURL, cUser, cPassword))
cPfx = STRCONV(FILETOSTR(GETFILE('cer')), 13)
cKey = STRCONV(FILETOSTR(GETFILE('key')), 13)
cPasswordCsd = '12345678a'
cUUID = '5d42df44-0b9f-4bb6-8bf0-3622cb3b2543'
cRFC = 'LAN8507268IA'
cMotivo = '02'
cFosustitucion = ' '
cResponse= CancelationByCSD(cURL, cToken, cUUID, cCer, cKey, cRFC, cPasswordCsd, cMotivo, cFosustitucion)
? cResponse
MESSAGEBOX(cResponse)
Como su nombre lo indica, este método un PFX que se genera a partir de los archivos CSD.
Necesario:
- PFX (.pfx) en Base64
- Password del archivo PFX
- UUID
- RFC emisor
- Motivo
- FolioSustitución
Ejemplo de uso
SET PROCEDURE TO 'sw-services.prg' ADDITIVE
cURL = 'http://services.test.sw.com.mx/'
cUser = 'demo'
cPassword = '123456789'
cToken = GetTokenValue(Authentication(cURL, cUser, cPassword))
cPfx = STRCONV(FILETOSTR(GETFILE('pfx')), 13)
cPasswordCsd = '12345678a'
cUUID = '5d42df44-0b9f-4bb6-8bf0-3622cb3b2543'
cRFC = 'LAN8507268IA'
cMotivo = '01'
cFosustitucion = '0e6eba79-b61c-42f1-8935-471909450b9a'
cResponse= CancelationByPFX(cURL, cToken, cUUID, cPfx, cRFC, cPassword, cMotivo, cFosustitucion)
? cResponse
MESSAGEBOX(cResponse)
Como su nombre lo indica, este método un XML que se genera con los UUID que se desean cancelar y después se sella utilizando el estándar xmldsig.
Necesario:
- XML
Ejemplo de uso
SET PROCEDURE TO 'sw-services.prg' ADDITIVE
cURL = 'http://services.test.sw.com.mx/'
cUser = 'demo'
cPassword = '123456789'
cToken = GetTokenValue(Authentication(cURL, cUser, cPassword))
cXml = STRCONV(FILETOSTR(GETFILE('xml')),11)
cResponse= CancelationByXML(cURL, cToken, cXML)
? cResponse
MESSAGEBOX(cResponse)
Como su nombre lo indica, este método solo recibe un UUID y Rfc Emisor, pero será necesario almacenar los CSD en el administrador de timbres. Aquí una guía.
Necesario:
- UUID
- RFC emisor
- Motivo
- FolioSustitución
Ejemplo de uso
SET PROCEDURE TO 'sw-services.prg' ADDITIVE
cURL = 'http://services.test.sw.com.mx/'
cUser = 'demo'
cPassword = '123456789'
cToken = GetTokenValue(Authentication(cURL, cUser, cPassword))
cPfx = STRCONV(FILETOSTR(GETFILE('pfx')), 13)
cPasswordCsd = '12345678a'
cUUID = '5d42df44-0b9f-4bb6-8bf0-3622cb3b2543'
cRFC = 'LAN8507268IA'
cMotivo = '02'
cFosustitucion = ' '
cResponse= CancelationByPFX(cURL, cToken, cUUID, cPfx, cRFC, cPassword, Motivo, cFosustitucion)
? cResponse
MESSAGEBOX(cResponse)
Este servicio recibe el token y genera los elementos que componen la consulta de saldos. Se obtiene un JSON de respuesta con los datos de la consulta realizada.
SET PROCEDURE TO 'sw-services.prg' ADDITIVE
cURL = 'http://services.test.sw.com.mx'
cUser = 'demo'
cPassword = '123456789'
cToken = GetTokenValue(Authentication(cURL, cUser, cPassword))
Respuesta = AccountBalance(cURL, cToken)
? Respuesta
MESSAGEBOX(Respuesta)
Validaciones varias que son de utilidad.
Este servicio verifica integridad, estatus en el SAT, estructura válida.
SET PROCEDURE TO 'sw-services.prg' ADDITIVE
cURL = 'http://services.test.sw.com.mx'
cUser = 'demo'
cPassword = '123456789'
cXML = STRCONV(FILETOSTR(GETFILE('xml')),11)
cToken = GetTokenValue(Authentication(cURL, cUser, cPassword))
Respuesta = ValidateXML(cURL, cToken, cXML)
? Respuesta
MESSAGEBOX(Respuesta)
Este método recibe RFC emisor, RFC receptor, total y UUID de la factura a la cual consultaremos su Estatus en el SAT. Se retorna un string (Xml) con la respuesta del servicio del SAT.
Ejemplo de uso
SET PROCEDURE TO 'sw-services.prg' ADDITIVE
cURL = 'https://consultaqr.facturaelectronica.sat.gob.mx/ConsultaCFDIService.svc'
cRfcEmisor = 'LSO1306189R5'
cRfcReceptor = 'XAXX010101000'
cTotal = '603.20'
cUUID = '1fe614f5-74c5-4792-8456-eef4e6afebf2'
cSello = 'HD7zg=='
xmlResponse = EstatusCFDI(cUrl, cRfcEmisor, cRfcReceptor, cTotal, cUUID, cSello)
? xmlResponse
MESSAGEBOX(xmlResponse)