BRIDGE API - REST - Importación de Pedidos
Este servicio permitirá crear desde fuentes externas, un pedido.
- Se invoca de la siguiente manera: https://[direccion_ip]:[puerto]/order/create - Ejemplo: https://200.100.100.100:8090/order/create
- Se invoca via POST.
Tener en cuenta:
- Primero se debe invocar al servicio de autenticación para obtener un token.
- Cuando se llama a cualquier servicio este token se envía como un parámetro más de la llamada en el header (x-access-token).
- Si al llamar al servicio el token expiró, se recibirá respuesta de token inválido y se deberá volver a pedir uno nuevo.
JSON ejemplo con cliente persona
{ "externalNumber": "00001", "notes": "", "creationDate": "2020-07-01 08:51:00", "channelCode": "web", "currencyCode": "peso", "netAmount": 3000, "manualDiscountAmount": 0, "orderTypeCode": "web", "isPaid": false, "party": { "code": "0243145377", "firstName": "Martin", "lastName": "Malievac", "email": "[email protected]", "typeCode": "Person", "identificationType": 1, "identifier": "24314537", "birthYearNumber": 1975, "birthMonthNumber": 1, "birthDayNumber": 3, "partyContactMethods": [ { "name": "Personal", "address": { "firstLine": "Almafuerte 4430", "secondLine": "Puerta 10, Piso 2", "betweenStreets": "Armenia y Rivadavia" "cityCode": "MUN", "stateCode": "BsAs", "countryCode": "AR", "postalCode": "1605" }, "emailAddress": "[email protected]", "telephone": { "countryCode": "54", "areaCode": "11", "telephoneNumber": "36637487", "extensionNumber": "-" }, "principalForDelivery": true, "principalForBilling": true }, { "name": "Trabajo", "address": { "firstLine": "Venezuela 3158", "secondLine": "Piso 6. Interno 066", "betweenStreets": "Colectora Panamericana y Estanislao del Campo" "cityCode": "VMA", "stateCode": "BsAs", "countryCode": "AR", "postalCode": "1603" }, "emailAddress": "[email protected]", "telephone": { "countryCode": "54", "areaCode": "11", "telephoneNumber": "41100000", "extensionNumber": "066" }, "principalForDelivery": false, "principalForBilling": false } ] }, "detail": [ { "itemCode": "ABC001", "description": "SAMSUNG S10", "storeCode": "UNICENTER", "locationCode": "ventas2", "orderedQty": 1, "unitPrice": 1000, "deliveryOrPickup": "delivery", "deliveryCompany": "Andreani", "packageId": "12345670A", "pickupLocationCode": "-", "requiredDate": "2020-07-10 00:00:00", "partyContactMethodName": "Personal", "serializedUnits": [ { "serialNumber": "123456789", "importDocNumber": "12345", "customsNumber": "123455", "customsDate": "2020-07-10 00:00:00", "unitCount": 1 }, { "serialNumber": "22222222", "importDocNumber": "33333", "customsNumber": "44444", "customsDate": "2020-07-10 00:00:00", "unitCount": 1 }, ], "priceModifiers": [ { "percent": 5, "amount": 50, "reasonText": "Segunda Unidad" } ] }, { "itemCode": "S20", "description": "SAMSUNG S20", "storeCode": "WEB", "locationCode": "ventas2", "orderedQty": 2, "unitPrice": 2000, "netAmount": 2000, "deliveryOrPickup": "pickup", "deliveryCompany": "-", "pickupLocationCode": "Unicenter", "requiredDate": "2020-07-10 00:00:00", "sellerID":"jose", "sellerName":"Jose Perez", "pickupInformation": "Retira por la tarde, luego de las 6." } ], "transaction": { "id": "5f19d8989eefbe5418406887", "storeCode": "unicenter", "terminalCode": "20", "operatorCode": "martinm", "trxNumber": 4, "trxDate": "2020-07-10 00:00:00" }, "payments": [ { "tender": "peso", "amount": 2000 }, { "tender": "VI", "amount": 2950, "planDescriptor": "9 meses sin intereses", "sellerName": "MIRGOR", "authorizationCode": "1", "couponNumber": "1", "lotNumber": "1", "installments": "9", "referenceNumber": "1" } ] }
Descripción de los campos:
Importante: los campos que poseen este ícono BRIDGE API - REST - Consulta de Maestros: https://share.linx.com.br/x/D5d8Cg)
, son valores tipificados que deben respetar los valores expuestos por BRIDGE en sus servicios (verCampo | Tipo | Descripción | Requerido | Ejemplos | Validación (código) | |
---|---|---|---|---|---|---|
externalNumber | String | Código de la orden del originante | SI | 000001 | 991: el código de orden es requerido. 996: Ya existe el código de orden originante [Código] para el canal [Código de Canal] | |
notes | String | Comentarios sobre la orden | NO | Enviar por la tarde | ||
creationDate | String | Fecha de creación | SI | 2020-07-01 08:51:00 Formato: yyyy-MM-dd HH:mm:ss | 992: la fecha de creación es requerida. | |
channelCode | String | Canal de Origen | NO | magento: este código será asignado por Napse de acuerdo al canal. ver servicio channel/all | 993: el canal de origen es requerido. | |
currencyCode | String | Moneda | SI | peso ver servicio currency/all | 994: la moneda es requerida. | |
netAmount: | Number | Monto final del pedido, incluyendo el costo de entrega, menos los descuentos. | SI | 1000 | 995: el monto final del pedido es requerido. | |
manualDiscountAmount | Number | Importe de descuentos a la transacción | NO | Informar 0 si no existe ninguno | ||
orderTypeCode | String | Código del tipo de orden | NO | Por default: 'web' Tipos posibles:
ver servicio orderType/all | ||
isPaid | Boolean | Indicador de cobrado | NO | Valida si viene este parámetro o los pagos | ||
originStore | String | Tienda que se defina como online | NO | Tienda que se define como online (por configuración) para determinar el tipo de escenario (compra en linea retiro en tienda, compra en linea envio a domicilio, etc) | ||
orderReference (orden de referencia). Sólo si la orden es de devolución (orderTypeCode == "return") | ||||||
internalNumberOriginal | String | Código Interno de la Orden | NO | bridge0000000299 | 999: Número de orden original no válido (si viene informado y no existe en la collection Order) | |
processStock | Boolean | Indica si un pedido de devolución mueve stock o no | No (por defecto es true) | true o false | ||
party (cliente asociado a la transacción). Requerido | ||||||
code | String | Código del cliente (BRIDGE genera el código con el tipo de documento concantenado con el nro de documento como una de las opciones) Ej: "code" : "0330505817423", (para un cliente CUIT=03, nro 305058description17423) |
(se pasa a opcional. Si no viene informado se creará el código del cliente con el método que aplique Bridge) | 024314537 | 997: el código del cliente es requerido. | |
firstName | String | Nombre del Cliente | SI (solo si es typeCode = 'Person') | Martin | 997: el nombre de la persona o empresa, es requerido. | |
lastName | String | Apellido del cliente | SI (solo si es typeCode = 'Person') | Malievac | 997: el apellido es requerido para clientes de tipo "Person" | |
name | String | Razón social | SI (sólo si es typeCode = 'Organization') | IBM | ||
String | Correo del cliente | SI | [email protected] | 997: el correo electrónico es requerido. | ||
typeCode | String | Tipo de cliente (persona física o jurídica/empresa) | SI identificationType | Valores posibles:
| Error: “El campo party.typeCode debe coincidir con Person u Organization” | |
identificationType | Number | Tipo de documento | SI | Valores posibles: 1: DNI ver servicio partyIdentificationType/all ----------- Para Uruguay Valores posibles: 1: NIE 2: RUC 3: CEDULA 4: OTRO 5: PASAPORTE 6: DNI UY 7: NIFE | 997: el tipo de identificación es requerido. | |
identifier | String | Número de documento o identificación NOTA: en el caso de CUIT o CUIL informar sin guiones (ej: 30505817423) | SI | 24314537 ------------------ Para Uruguay: Longitud por tipo de identificación
| 997: el número de identificación es requerido. | |
birthYearNumber | Number | Año de nacimiento | NO | 1975 | ||
birthMonthNumber | Number | Mes de nacimiento | NO | 3 | ||
birthDayNumber | Number | Día de nacimiento | NO | 1 | ||
partyRoleAssignment (asignación de tipo de cliente)
| ||||||
partyRole | String | Código del tipo de cliente | NO | "partyRoleAssignment": [{ "partyRole": "EMPLE"} ], Puede ser una lista de tipo de clientes (debe ser uno de los códigos habilitados en la tabla partyRole.code) | ||
partyContactMethods (direcciones del cliente). Requerido
| ||||||
name | String | Nombre del método de contacto | SI | Personal, Trabajo, etc. Este dato debe ser único, en caso de encontrarse repetido dentro de la lista, se informará: "No puede realizar un pedido con dos métodos de contacto con el mismo nombre" | 1002: el nombre del método de contacto es requerido. | |
address.firstLine | String | Calle y número | SI | Almafuerte 1000 | 1003: la dirección es requerida. | |
address.secondLine | String | Otra info | NO | Piso 10, Puerta 12 | ||
adress.betweenStreets | String | Entre Calles | NO | |||
address.cityCode | String | Ciudad | SI | MUN. Importante: código del listado de ciudades existentes, ver servicio city/all | 1004: la ciudad es requerida. | |
address.stateCode | String | Provincia | SI | BsAs. Importante: código del listado de provincias existentes, ver servicio state/all | 1005: la provincia es requerida. | |
address.countryCode | String | Pais | SI | ARG. Importante: código del listado de países existentes, ver servicio country/all | 1006: el país es requerido. | |
emailAddress | String | Email asociado a ese método de contacto | SI | Se puede poner el principal si no es diferente | 1007: el correo electrónico en el método de contacto, es requerido. | |
telephone.countryCode | String | código de País | NO | 54 | 1008: el código de país del teléfono es requerido. | |
telephone.areaCode | String | código de área | NO | 11 | 1009: el código de área del teléfono es requerido. | |
telephone.telephoneNumber | String | número de teléfono | SI | 36637777 | 1010: el número de teléfono es requerido. | |
extensionNumber | String | extensión | NO | 066 | ||
principalForDelivery | Boolean | NO | Opcional: true/false. En caso de enviar más de una dirección 'marcada' para delivery se va a tomar una sola. Idem para la dirección de facturación. | |||
principalForBilling | Boolean | NO | Opcional: true/false. En caso de enviar más de una dirección 'marcada' para delivery se va a tomar una sola. Idem para la dirección de facturación. | |||
taxRegistrations (Datos fiscales, sólo requerido para un cliente del tipo "Organization". En el caso de Argentina se espera que se informen uno para la condición ante el IVA y de aplicar el de Ingresos Brutos, caso contrario no se podrá calcular percepciones) En el caso de otros países se debe encontrar configurado como Cliente impuestos - impuestos Ibb son requeridos = no (Configuración/sistema/tienda/clientes) cuando se integra con Bridge NOTA:
| ||||||
aliqEffectiveDate | Date | Fecha de vigencia desde para la alícuota de IB de la jurisdicción informada (esto es lo que se considera como información de padrón del IB) Sino no informar | NO | 2020-07-01 08:51:00 Formato: yyyy-MM-dd HH:mm:ss | ||
aliqExpirationDate | Date | Fecha de vigencia desde para la alícuota de IB de la jurisdicción informada (esto es lo que se considera como información de padrón del IB) Sino no informar | NO | 2020-07-31 08:51:00 Formato: yyyy-MM-dd HH:mm:ss | ||
aliquot | Number | Alícuota de IB de la jurisdicción informada (esto es lo que se considera como información de padrón del IB) Sino no informar | NO | 4.00 | ||
inscEffectiveDate | Date | Fecha de inicio de vigencia de la condición fiscal informada NOTA: considerar que BRIDGE valida la vigencia en la facturación | SI | 2020-07-01 08:51:00 Formato: yyyy-MM-dd HH:mm:ss | ||
inscExpirationDate | Date | Fecha de fin de vigencia de la condición fiscal informada NOTA: considerar que BRIDGE valida la vigencia en la facturación | SI | 2030-07-01 08:51:00 Formato: yyyy-MM-dd HH:mm:ss | ||
taxJurisdictionCode | String | Código de la jurisdicción | SI | ver servicio taxJurisdiction/all | ||
taxTypeCode | String | Código del tipo de impuesto | SI | Valores posibles:
| ||
taxCategoryCode | String | Código de la categoría impositiva (de IVA o de IB) | SI | ver servicio taxJurisdictionTaxType/all | ||
name | String | Nombre de la razón social y tipo de impuesto (es descriptivo del registro) | SI | IBM - IVA | ||
number | String | Número de la condición fiscal informada (CUIT o Nro de Ingresos Brutos para ARG) | SI | 30663205621 | ||
detail (Detalle del pedido). Debe haber al menos | ||||||
itemCode | String | SKU del producto | SI | SAM01 ver servicio item/all o /item/[código] | 1011: el código del producto es requerido. | |
barcode | String | Código de barras del artículo | No | Es un dato opcional. Si viene informado se debe considerar que es el sku-barcode para el pedido (a partir de v7.5) | ||
storeCode | String | Código de tienda desde donde saldrá el stock. | SI | UNICENTER ver servicio store/all | 1012: el código de tienda del stock es requerido. | |
locationCode | String | Código de depósito desde donde saldrá el stock | NO | VENTAS2. Se toma el código erp. ver servicio location/all | Si no se informa, toma el default del ítem. | |
description | String | Descripción del producto |
(se pasa a opcional) Si viene informado se toma ese valor, sino el del maestro | Samsung Galaxy S2 | 1013: la descripción del producto es requerida. | |
orderedQty | Number | Cantidad pedida | SI | 1 | 1014: la cantidad pedida es obligatoria. | |
unitPrice | Number | Precio unitario | SI | 1000 | 1015: el precio unitario es requerido. | |
deliveryOrPickup | String | Si la linea será con retiro en tienda o envío | SI | delivery o pickup | 1016: es requerido informar si la línea es para delivery o retiro. | |
deliveryCompany | String | Codigo de la compañía que realizará el envío | SI (si el método es delivery) | oca ver servicio orderDeliveryCompany/all | ||
packageId | String | Código del paquete de delivery (este código es el que se utilizará para asociar los datos del shipping) | SI (si el método es delivery) | 01 | ||
pickupLocationCode | String | Código de la locación en donde retirará | SI (si eligió la opción pickup) | UNICENTER. El código debe estar estipulado. ver servicio orderPickupLocation/all | 1017: el código del punto de retiro es requerido. | |
pickupInformation | String | Descripción de quien hará el retiro | Si, si eligió la opción pickup | Juan Perez retirará, teléfono: XXXXX | 1018: si eligió la opción de retiro, indicar los datos de la persona que hará el retiro. | |
requiredDate | String | Fecha de envío requerida o de retiro en tienda | NO | Formato: yyyy-MM-dd HH:mm:ss | ||
partyContactMethodName | String | Dirección de envío del cliente | SI (si eligió como opción delivery) | Personal, debe existir entre una de las direcciones informadas para el cliente | 1019: el nombre de la dirección de envío al cliente es inválido. | |
sellerID | String | Id del vendedor | NO | josem | (debe ser un usuario existente en BRIDGE, tabla user.name) Si no existe no se asocia pero el pedido se crea | |
sellerName | String | Nombre del vendedor | NO | José Martinez | ||
serializedUnits: en caso de que BRIDGE no realice el surtido del pedido (ej: MELI Fulfillment), se detallan los números de serie ó si se realizó una venta en tienda física (POS) con envío a domicilio y ya fueron indicados los nro de series | ||||||
SerialNumber | String | Nro de serie del item | SI | Requerido sólo si se envía lista de series | ||
importDocNumber | String | Nro de despacho | NO | |||
customsNumber | String | Aduana | NO | |||
customsDate | String | Fecha de despacho | NO | |||
unitCount | Number | Cantidad (para informar items con nro de serie es cantidad = 1) | SI | Requerido sólo si se envía lista de series | ||
transaction: este campo se usa en el caso de que la transacción haya sido facturada en bridge, no se usa en caso de que la orden venga de canales externos. | ||||||
id | String | El ID de mongodb de la transacción | SI | |||
storeCode | String | El código de tienda BRIDGE | SI | |||
terminalCode | String | El código de terminal BRIDGE | SI | |||
operatorCode | String | El código de operador BRIDGE | SI | |||
trxNumber | Number | El número de transacción BRIDGE | SI | |||
trxDate | Date | La fecha de la transacción BRIDGE | SI | Formato: yyyy-MM-dd HH:mm:ss | ||
retail.priceModifiers : descuentos otorgados a los productos, esto se encuentra dentro de la colección detail | ||||||
percent | Number | Porcentaje de descuento | SI (si es informada la línea) | 5 | 1020: si informa un descuento, debe informar el porcentaje. | |
amount | Number | Monto de descuento | SI (si es informada la línea) | 1000 | 1021: si informa un descuento, debe informar el monto. | |
reasonText | String | Razón del descuento | SI | Oferta del día | 1022: si informa descuento, debe informar la razón. | |
payments (pagos asociados al pedido) | ||||||
tender | String | Código del medio de pago | SI | peso. Importante: ver servicio tender/all para los códigos de pago permitidos. | 1022: debe informar un medio de pago válido. | |
amount: | Number | Monto del pago | SI | 1000 | 1022: debe informar el monto del pago. | |
planDescriptor | String | Descripción del plan de pagos elegido | currencyCode | 9 meses sin intereses | 1023: debe informar el plan de pagos. | |
sellerName | String | Nombre de la entidad | SI (para pagos con tarjeta) | Mirgor | 1024: debe informar el nombre del merchant. | |
authorizationCode | String | Codigo de autorización de la tarjeta | SI (para pagos con tarjeta) |
| 1025: debe informar el código de autorización de la tarjeta. | |
couponNumber | String | Número de cupón | SI (para pagos con tarjeta) | 1 | 1026: debe informar el número de cupón | |
lotNumber | String | Número de Lote | SI (para pagos con tarjeta) | 1 | 1027: debe informar número de lote. | |
installments | String | Cuotas | SI (para pagos con tarjeta) | 9 | 1028: debe informar la cantidad de cuotas. | |
referenceNumber | String | Referencia de la tarjeta | SI (para pagos con tarjeta) | 44444444, en el caso de MercadoPago, allí va el id de la cuenta. | 1029: debe informar código de referencia de la tarjeta. | |
surcharge | Number | Monto de recargo (es un dato adicional. el monto del pago ya debería incluirlo. Este campos es solo informativo) | opcional (para tarjetas) | 990.0 Ejemplo de una venta con pago que incluye un recargo: Si se vende un ítem cuyo pago tuvo un recargo financiero, el monto del pago debe incluirlo y puede ser informado como dato adicional el porcentaje de recargo y monto de recargo
| ||
planSurcharge | Number | Porcentaje de recargo aplicado (es un dato adicional, esto no recalcula sobre lo informado en el monto de pago) | opcional (para tarjetas) | 10.0 |
Respuesta del servicio:
{ "ack": 0, "message": "El pedido ha ingresado con éxito.", "internalNumber": "bridge0000000012" }
- ack es el código de respuesta, en caso de ser un error, mirar tabla a continuación.
- message: descripción del error en caso de existir.
- internalNumber: en caso de haberse creado con éxito, el número de orden asignado por Bridge.
Código de Error | Descripción |
---|---|
0 | El pedido ha ingresado con éxito. |
900 | El pedido no posee stock suficiente en la/s tienda/s para ser surtido. |
901 | Debe informar un cliente. |
902 | Debe informar para el cliente, al menos una dirección de envío. |
903 | Debe informar al menos un producto en el pedido. |
904 | La sumatoria de los pagos, debe ser igual al monto del pedido. |
905 | No puede realizar un pedido que sea surtido de diferentes tiendas. |
9999 | Error desconocido |
EJEMPLO de JSON: CLIENTE ORGANIZACION/EMPRESA
Para poder recibir un pedido con un cliente organización o empresa se debe considerar el envío del party con sus datos fiscales. Se adjunta un ejemplo