Podemos crear un CFDI con complemento de pago haciendo uso de los siguientes parámetros:
Parámetro | Tipo | Requerido | Detalles |
---|---|---|---|
Receptor | array | Requerido | Indica el UID del receptor/cliente previamente creado en factura.com. Ver listado de atributos posibles para este nodo. Ejemplo: |
TipoDocumento | string | Requerido | Es necesario enviar la clave pago en este campo. Ejemplo: |
Conceptos | array | Requerido | Es un arreglo de objetos, en el que debe definirse un solo objeto con la siguiente información. Ejemplo: |
UsoCFDI | string | Requerido | Indica siempre la clave P01 correspondiente a Por definir. Ejemplo: |
Serie | number | Requerido | Indica id de la serie con la que deseas timbrar el documento. Ésta debe estar dada de alta en tu panel de Factura.com y coincidir con el tipo de CFDI que deseas timbrar. Para obtenerlo Inicia sesión y dirígete al Menú lateral - Configuraciones - Series y folios Ejemplo: |
CfdiRelacionados | array | Opcional | En caso que tu complemento sustituya a otro envía un arreglo con el/los UUID's con los que está relacionado. Ver listado de atributos posibles para este nodo. Ejemplo: "CfdiRelacionados": { |
Moneda | string | Requerido | Se debe registrar siempre el valor "XXX". Ejemplo: |
NumOrder | number | Opcional | Indica el número de orden o pedido. Este dato es solo para control interno. Ejemplo: |
Fecha | string | Opcional | Indica una fecha con formato (Y-m-d\TH: m :s). Es posible enviar hasta 72 horas de atraso a la fecha actual, sin embargo no están permitidas las fechas futuras. Ejemplo: |
EnviarCorreo | bolean | Opcional | Indica si deseas que el CFDI se envíe a tu cliente por correo electrónico. Por default esta opción es true. Ejemplo: |
Pagos | Array | Requerido | Indica los datos del complemento de pago. |
Importante
Es necesario que envíes los valores (precios, cálculo de impuestos, subtotales, etc) de acuerdo a tus necesidades. Esto incluye número de decimales y redondeos.
Nodo: Pagos
Es el nodo en el que se ingresa la información correspondiente complemento de pagos.
A continuación se presentan los atibutos que debe incluir el nodo Pagos:
Parámetro | Tipo | Requerido | Detalles |
---|---|---|---|
typeComplement | string | Requerido | Indica el tipo de complemento, en este caso es pagos. Ejemplo: |
FechaPago | string | Requerido | Indica la fecha y hora en la que el beneficiario recibe el pago, debe estar expresada en el siguiente formato: aaaa-mm-ddThh:mm:ss. Ejemplo: |
FormaDePagoP | string | Requerido | Indica la clave de la forma de pago. Ésta puedes consultarla en el Catálogo de formas de pago. Nota: debe ser distinta a la clave 99 - Por definir. Ejemplo: |
MonedaP | string | Requerido | Indica la clave de la moneda del pago. Ésta puedes consultarla en el Catálogo de monedas Ejemplo: |
TipoCambioP | string | Opcional | Indica el tipo de cambio vigente al momento de recibir el pago. Ejemplo: Si la moneda es diferente a MXN el campo es requerido. |
Monto | Number | Requerido | Indica el importe del pago, éste debe ser mayor a 0. Ejemplo: |
NumOperacion | string | Opcional | Indica el número de orden o pedido. Este dato es solo para control interno. Ejemplo: |
RfcEmisorCtaOrd | string | Opcional | Si lo deseas, indica el RFC del banco de la cuenta de origen de la transferencia. Ejemplo: |
NomBancoOrdExt | string | Opcional | Si lo deseas, indica el nombre del banco de la cuenta ordenante. Ejemplo: |
CtaOrdenante | string | Opcional | Si lo deseas, indica el número de la cuenta con la que se realizó el pago, o la CLABE interbancaria de la cuenta desde donde se hizo la transferencia. Ejemplo: |
RfcEmisorCtaBen | string | Opcional | Si lo deseas, indica el RFC del banco de la cuenta de destino de la transferencia. Ejemplo: |
CtaBeneficiario | string | Opcional | Si lo deseas, indica el número de la cuenta o la CLABE interbancaria de la cuenta desde donde se recibió el pago. Ejemplo: |
TipoCadPago | string | Opcional | Indica la clave del tipo de cadena de pago. Consulta las claves correspondientes a Forma de pago válidas. |
relacionados | array | Requerido | Indica al menos un documento relacionado para tu complemento de pago. |
Construcción de la URL
Host: https://factura.com (producción) / http://devfactura.in (sandbox)
Endpoint: api/v3/cfdi33/complemento/pagos/create
Ejemplo: https://factura.com/api/v3/cfdi33/complemento/pagos/create
Ejemplo:
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://factura.com/api/v3/cfdi33/complemento/pagos/create");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_HEADER, FALSE);
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode([
"Receptor" => [
"UID" => "55c0fdc675XXX"
],
"TipoDocumento" => "pago",
"UsoCFDI" => "P01",
"Redondeo" => "2",
"FormaPago" => "03",
"MetodoPago" => "PUE",
"Moneda" => "XXX",
"Serie" => 1,
"EnviarCorreo" => "true",
"Conceptos" => [[
"ClaveProdServ" => "84111506",
"Cantidad" => "1",
"ClaveUnidad" => "ACT",
"Descripcion" => "Pago",
"ValorUnitario" => "0",
"Complemento" => [[
"typeComplement" => "pagos",
"FechaPago" => "2020-03-04T12:00:00",
"FormaDePagoP" => "03",
"MonedaP" => "MXN",
"Monto" => "30000.00",
"relacionados" => [
[
"IdDocumento" => "202d87c1-1b31-40ff-96fe-b8b05a1c1xxx",
"ImpSaldoAnt" => "30000.00",
"ImpPagado" => "30000.00",
"ImpSaldoInsoluto" => "0",
"MetodoDePagoDR" => "PUE",
"MonedaDR" => "MXN",
"TipoCambioDR": 0,
"NumParcialidad" => "1",
"Folio" => 1001,
"Serie" => "ABR",
]
],
]]
]],
]));
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
"Content-Type: application/json",
"F-PLUGIN: " . '9d4095c8f7ed5785cb14c0e3b033eeb8252416ed',
"F-Api-Key: ". 'Ingresa API KEY',
"F-Secret-Key: " . 'Ingresa SECRET KEY'
));
$response = curl_exec($ch);
curl_close($ch);
var_dump($response);
{
"Receptor":{
"UID":"55c0fdc675XXX"
},
"TipoDocumento":"pago",
"UsoCFDI":"P01",
"Redondeo":"2",
"FormaPago":"03",
"MetodoPago":"PUE",
"Moneda":"XXX",
"Serie":1,
"EnviarCorreo":"true",
"Conceptos":[
{
"ClaveProdServ":"84111506",
"Cantidad":"1",
"ClaveUnidad":"ACT",
"Descripcion":"Pago",
"ValorUnitario":"0",
"Complemento":[
{
"typeComplement":"pagos",
"FechaPago":"2020-03-04T12:00:00",
"FormaDePagoP":"03",
"MonedaP":"MXN",
"Monto":"30000.00",
"relacionados":[
{
"IdDocumento":"202d87c1-1b31-40ff-96fe-b8b05a1c1xxx",
"ImpSaldoAnt":"30000.00",
"ImpPagado":"30000.00",
"ImpSaldoInsoluto":"0",
"MetodoDePagoDR":"PUE",
"MonedaDR":"MXN",
"NumParcialidad":"1",
"Folio": 1001,
"Serie":"ABR"
}
]
}
]
}
]
}
Recuerda que
Para probar el código de ejemplo es necesario que reemplaces el texto Ingresa API KEY por el API KEY de tu cuenta, e Ingresa SECRET KEY por el SECRET KEY correspondiente.
Así como cambiar los UID de los CFDIs relacionados y de receptor.
Respuesta:
{
"response": "success",
"message": "Facturacreadayenviadasatisfactoriamente",
"UUID": "11299a64-db3f-4dfd-8ccb-5013ba034fXX",
"uid": "5c11578d2f71d",
"SAT": {
"UUID": "11299a64-db3f-4dfd-8ccb-5013ba034fXXX",
"FechaTimbrado": "2018-12-12T12: 46: 40",
"NoCertificadoSAT": "20001000000300022323",
"Version": "1.1",
"SelloSAT": "On\/VuLDaF13cXUnMV79lKkvaKMW4IGkTd7QvBK+G9c4hmsYGWRfAGfYfUoh2Ab2IhRhw6VSP2IJAij8Ad0oSThW5+FOWRVax6jX0SHXFUWC8IXN5xuK2t6qVqQ5iRZt8ZVjTovz6Q8nP09cGBB46ikwWb9W9LTALl+ZtF2K6fQ0NnNXJy8a+GeMTKe\/UpVnoPoLC179gkHTJZCJzYGUCcOlccSCE5Bxz6MzJQxGTGqmJi9vNuEpcH2tYwO9VzSOXL4foPt+oa5Jqc5r4c++gah97+1+NGuMUvaQX6kMq8PFUq5YXKo83sO2Flj54Ux68XsCLDv3Twc1h1FI4yCVXXXX==",
"SelloCFD": "X5rm9\/shEu3u6oNT0TOdjOMfKD3kob9RBoB+FdHcD3wQhCp4ksA\/YtgwW+dTF10ezyxsEQnc6V9XteNRe4sHyzUcedERUh1XWp+JTM247Rg2NHrGBecAYHPOFgB218ERSrCavaD949uPBR1GamXnNAdkL5YLxgbfjPLfMzE6sli0NdgsBuCES2hrvsU9FA0wLTenTP6c6B7kZd7kGVbKBRFixkB+MYvWtML1D2WK+XXXXX+IviFoJtSTd3OAFEBspy90t779l8Tgk4J+zs2Ug=="
},
"INV": {
"Serie": "PA",
"Folio": 71
},
"invoice_uid": "5c11578d2f7XX"
}
{
"response": "error",
"message": {
"message": "401 - El rango de la fecha de generaci\u00f3n no debe de ser mayor a 72 horas para la emisi\u00f3n del timbre.",
"messageDetail": "Comprobante.Fecha: Fecha de emisi\u00f3n: 2018-05-16T13:04:20 Fecha del Servidor: 2018-12-12T13:02:24 La fecha de emision no se encuentra en el rango permitido: 2018-12-09T13:02:24 - 2018-12-12T14:07:24",
"data": null,
"status": "error"
},
"xmlerror": "\n<\/cfdi:Conceptos><\/pago10:Pago><\/pago10:Pagos><\/cfdi:Complemento><\/cfdi:Comprobante>\n"
}
Sobre errores
El mensaje de error puede variar dependiendo el nodo en el que haya información incorrecta.
Te sugerimos leer cuidadosamente el mensaje del error ya que en el mismo se indica donde es necesario corregir la información.
Updated 12 days ago