Alegra Community

Error al tratar de crear una factura de venta usando la API

Hola, tengo un problema al tratar de crear una factura de venta usando la api usando php, estoy tratando de crear una factura, pero tengo un error cuando trato de pasarle información en el parámetro de payments.

Si yo dejo el campo vacío, me crea la factura pero me queda en estado por cobrar. Pero si le paso información en payments me sale el siguiente error:

object(stdClass)#41522 (2) {
[“message”]=>
string(63) “Ha ocurrido un error, por favor inténtalo de nuevo más tarde.”
[“code”]=>
int(400)
}

Este es el código que le estoy pasando para hacer una prueba donde el array $pagos es el que le paso como parámetro a ‘payments’.

$items[0] = array(
            'id' => 1,
            'price' => $active_price,
            'reference' => 1234,
            'description' => $product_name,
            'tax' => array(),
            'quantity' => $item_quantity,
            'discount' => '',
            'nature' => '',
            );
$items[1] = array(
            'id' => 2,
            'price' => $active_price,
            'reference' => 5678,
            'description' => $product_name,
            'tax' => array(),
            'quantity' => $item_quantity,
            'discount' => '',
            'nature' => '',
            );
   
$b[0] = 'COP';
$pagos = array(
    'date' => $current_date, 
    'account' => 1, 
    'amount' => intval($params['total_order']),
    'paymentMethod' => 'cash',
    'anotations' => '',
    'observations' => '',
    );

$invoices_data = array(
    'date' => $current_date,
    'dueDate' => $current_date,
    'observations' => '',
    'anotation' => '',
    'termsConditions' => '',
    'status' => 'Draft',
    'client' => $params['clientID'],
    'numberTemplate' => 'ZPF-',
    'items' => $items,
    'retentions' => array(),
    'seller' => '1',
    'priceList' => '1',
    'currency' => array('COP'),
    'payments' => $pagos,
    'warehouse' => '1', 
    'paymentMethod (México)' => '',
    'paymentMethod (Costa Rica)' => '',
    'paymentMethod (Colombia)' => 'CASH',
    'paymentForm (Colombia)' => 'CASH',
    'paymentForm (Chile)' => 'CASH',
    'type' => '',
    'accountNumber (México)' => '',
    'cfdiUse' => '',
    'stamp (Colombia)' => array(),
    'stamp (México)' => array(),
    'stamp (Perú)' => array(),
    'stamp (Costa Rica)' => array(),
    'stamp (Argentina)' => array(),
    'stamp (Chile)' => array(),
    'stamp (Panamá)' => array(),
    'paymentType (México)' => '',
    'saleCondition (Costa Rica)' => '',
    'saleCondition (Argentina)' => '',
    'saleCondition (Panamá)' => '',
    'operationType (Perú)' => '',
    'operationType (Colombia)' => '',
    'operationType (Panamá)' => '',
    'saleType (Panamá)' => 'ORDER',
    'economicActivity (Costa Rica)' => array(),
    'economicActivity (Chile)' => array(),
    'remissions' => array(),
    'saleConcept (Argentina)' => '',
    'startDateService (Argentina)' => '',
    'endDateService (Argentina)' => '',
    'costCenter' => '',
    'numberPurchaseOrder' => $params['order_id'].'1',
    'comments' => array(),
);

Me pueden ayudar diciendo en que estoy mal o que me hace falta para hacer la factura?

Hola @Bray_David_Leiton_Ri los pagos que estás enviando no son un array. Lo puedes hacer de dos formas:
1- $pagos[0] = array('date'=> $current_date,....);
2- $pagos = array(array('date'=> $current_date,....));

Con eso la factura se debería crear correctamente.

Gracias, aunque ya hice la prueba como dices y no me funcionó tampoco.

También tienes un error en el array de “$invoice_data”, en la documentación los parámetros que tienen un país entre paréntesis “(Colombia)” se usan para indicar como se deben enviar los datos en esa versión/país. Entonces al momento de enviar esos parámetros lo debes hacer sin los paréntesis, para el caso que comentas deberías enviar los datos así:

$invoices_data = array(
    'date' => $current_date,
    'dueDate' => $current_date,
    'observations' => '',
    'anotation' => '',
    'termsConditions' => '',
    'status' => 'Draft',
    'client' => $params['clientID'],
    'numberTemplate' => 'ZPF-',
    'items' => $items,
    'retentions' => array(),
    'seller' => '1',
    'priceList' => '1',
    'currency' => array('COP'),
    'payments' => $pagos,
    'warehouse' => '1',
    'paymentMethod' => 'CASH',
    'paymentForm' => 'CASH',
    'type' => '',
    'remissions' => array(),
    'costCenter' => '',
    'numberPurchaseOrder' => $params['order_id'].'1',
    'comments' => array(),
);
1 me gusta

Dale, gracias, voy a probar de esa manera, a ver si me funciona.