API de Yunbit

Funcionamiento general de la API

Cada endpoint dispone de un formato de acceso genérico (para PUT,GET,POST,DELETE), y en algunos casos existen recursos especializados que, aunque intentamos que sigan el mismo patrón de acceso, puede variar en la forma de pasarle parámetros.

Por norma general dispondremos del siguiente formato para cada verbo HTTP:

PUT /EndpointREST/{format}

Los endpoint PUT nos permiten crear o insertar nuevos registros o actualizarlos. Para insertar un registro debemos añadir en formato JSON los campos y sus valores en el body de la petición, sin el campo “id”.

Si quisiéramos actualizar un registro, sería de la misma manera pero indicando el campo “id” y el valor del registro que se desea actualizar.

GET/POST /EndpointREST/{format}/{id}/{pag}/{tpag}

Los endpoint GET/POST nos permiten obtener registros. Se puede indicar solo {format} para obtener todos los registros. {format}/{id} para obtener un registro. O paginar los resultados con {format}//{pag}/{tpag}. Para que el paginador funcione correctamente debes indicar esa doble barra inclinada entre {format} y {pag} ({format}//{pag}). {pag} indica el número de la página a mostrar y {tpag} cuantos elementos por página se mostrarán.

La mayoría de endpoints son paginables, y en la respuesta aparecerá el siguiente elemento que podréis consultar sobre el total de elementos, el tamaño de página usado, etc.:

_pages":[

{

"totalRecords": 3116,

"records": 10,

"tampage": "10",

"page": "0",

"npages": 312,

"nextpage": 1

En el caso de endpoints con muchos registros o muchos campos siempre recomendamos paginar los resultados.

Si el endpoint consultado se envía por POST es posible filtrar los resultados enviando un formulario con el campo y el valor a buscar.

DELETE /Endpoint REST/{id}

Los endpoints para eliminar registros. Aunque tenemos disponible este verbo HTTP para borrar registros, lo habitual es desactivarlos indicando en el campo “status” el valor “0”, ya que muchos de los endpoints tienen este campo. En el caso de pedidos lo mejor es anularlos, pues hay varios procesos que se deben ejecutar (recálculo de stock, anulación de facturas, etc.).

Valores por defecto

En los endpoints será habitual que haya ciertos campos comunes que tendrán un valor por defecto, normalmente porque solo hay un registro (y por tanto un identificador), o porque se ha tomado la decisión que el valor indicado será el valor por defecto (aunque haya otros elementos de su tipo disponibles).

idMetagroup/idMetagrupo/customer: cw5fc79ea0d5dca. Se puede obtener accediendo a /MetaGroupREST/{format}

fkIva:

  • IVA 10%: cw58f868e7b05f4cw5fc79ea0d5dca
  • IVA 21%: cw58f868efd7febcw5fc79ea0d5dca

fkManufacturer: cw5fe2206f81d41 

Artículos

PUT /ArticleREST/{format}/{id}

Ejemplo de respuesta:

"Article":{

"customer": "cw5d51549d49698", <-- Metagrupo

"name": "TEST", <-- Nombre del artículo

"reference": null,

"pubDate": null,

"weight": null,

"unitPrice": null,

"status": "1", <-- Por defecto se marca a 1 (Activo), 0 si se desactiva

"flags": "cw5e5cf0641a519", <-- Condición en el que se encuentra el artículo. Obligatorio. Ese identificador corresponde con "Nuevo"

"fkIva": "cw5d530f9722705", <-- Iva. Es obligatorio 

"fkManufacturer": null, <-- Fabricante. Obligatorio

"width": null,

"height": null,

"depth": null,

"sellNoStock": "",

"furl": "test-test-nuevo",

"created": "2020-09-22 12:38:00",

"fkUser": "cw5d5154f0e42ec",

"obs": null,

"fkFamily": null,

"partNumber": "TEST", <-- Referencia o identificador único del artículo

"hasReference": "0",

"enableNoStockPrice": "1",

"noStockPrice": null,

"noStockTerm": 0,

"warranty": 0,

"isSpecial": "0",

"fkProvider": null,

"increaseGuarantee": "0",

"urgent": "1",

"noStockUrgentPrice": "0.00",

"pasiveSubject": 0,

"pasiveSubjectExpireDate": null,

"furlEn": "test-test-nuevo",

"checkStock": "1", ← Obligatorio

"longDescription": null,

"thickness": null,

"diameter": null,

"stockMinSell": "1.0000",

"stockLimit": null,

"shortDescription": null,

"rawMaterialCalculate": "0",

"margin": null,

"labour": null,

"plating": null,

"packaging": null,

"idParent": null, ← Id del artículo Maestro. Si no tiene maestro debe ser el mismo id del artículo

"innerDiameter": null,

"webMultiple": "1.0000",

"fkMeasurementUnits": "cw592d7fbc62af2", <-- Unidad de medida. Obligatorio

"widen": 0,

"bath": null,

"finish": null,

"stockMinPurchase": "1.0000",

"maxStock": null,

"type": "0",

"fkDefStore": "cw5f69d3c64bfdb", <-- Almacén/tienda por defecto. Obligatorio

"generic": "0",

"model": null,

"series": null,

"isRentable": "0",

"rentPrice": "0.00",

"rentMinDays": 0,

"articlesContainedToPurchase": "0",

"webStatus": null,

"volume": null,

"articlesContainedToPreparation": "0",

"articlesContainedToEntry": "0",

"availability": "1",

"fkIvaReceived": null,

"assemblyOnEntry": "0",

"publishdate": null,

"fkLicense": null,

"preview": "0",

"PRESALE": null,

"PRESALE_LIMIT_DATE": null,

"STOCK_MAX_SELL": null,

"countries_accepted": null,

"countries_denied": null,

"warrantyPurchase": 0,

"AvailableToBuy": "1",

"OrdersWithReturns": "0",

"presaleLimitUnits": null,

"articlesContainedToInventory": "0",

"barcode": null,

"isbn": null,

"ismn": null,

"ibic": null,

"tem": null,

"showPricesInWeb": null,

"pos": null,

"lifePotential": null,

"unitPriceVat": null,

"woPreparation": "1",

"electricalReference": null,

"specialStorageConditions": null,

"requiresConfiguration": "0",

"id": "cw5f69d4061439f",

}

  • Si un artículo es un maestro,  solo rellenarse cuando sea un artículo hijo. El valor de este campo debe ser el campo “id” del artículo maestro.
  • En el caso de que un artículo sea su propio maestro, en el campo “idParent” se pondrá el valor del campo “id” del mismo artículo.
  • /ArticleREST
  • Documento de campos: https://cloud.yunbit.es/doc/apiDoc/eCommerce/Articulos/ArticleTypes.raml
  • Todos los artículos tienen el campo “availables” que indica el stock disponible en ese momento.
  • Stock: GET ArticleStock/byArticle/{format}/{id}

Condiciones

Tipo de IVA a aplicar.

GET /IncomeVatTypeREST/{format}/{id}/{pag}/{tpag}

Fabricantes

Fabricantes de los artículos

GET /ManufacturerREST/{format}

Unidades de Medida

Tarifas

Para la gestión de tarifas a través de API disponemos de los siguientes endpoints.

Endpoints

  • Tarifas: RateAPI
  • Excepciones de tarifa: RateException
  • Empresas: El endpoint habitual de empresas vincula la tarifa con la empresa en el campo fkRate

Excepciones de tarifa

La descripción de los campos del endpoint se puede encontrar aquí https://wiki.yunbitsoftware.com/cargador-de-excepciones-de-tarifas/

Proveedores

PUT /CrmCompanyREST/{format}

GET/POST /CrmCompanyREST/{format}/{id}/{pag}/{tpag}

  • En el artículo hay que indicar un proveedor, que será una empresa del tipo “Proveedor”. Si no existe hay que crearlo.
  • /CrmCompanyREST
  • Documento de campos: https://cloud.yunbit.es/doc/apiDoc/directory/CRM/CrmCompanyTypes.raml
  • Para crear un proveedor, además de los datos habituales, hay que indicar en el campo “CAT” el valor “|Proveedor|”.

Almacén

Stock

Alta de stock

      Se puede crear un registro de stock indicando los siguientes campos

  • *idStore: Id del almacén
  • *created: Fecha de creación del registro
  • *idArticle: Id del artículo
  • *status: Por defecto a 1 (Activo). Si fuera a cero quedaría desactivado.
  • *basePrice: El precio que tiene el artículo
  • *cost: Coste real del artículo
  • *barCode: Código de barras
  • idMasterArticle: Si el artículo tiene un artículo padre.
  • *multiplier: Unidades
  • idArticleStock: Identificador del SSN (Número de serie) relacionado
  • idContainer: Identificador del contenedor

Se suele crear un registro por almacén con las unidades existentes en este indicadas en el campo “multiplier”. Si está activo el control por número de serie habría que crear un registro por cada número de serie, y por tanto siempre podría haber más de un registro por almacén.

Si además el stock está contenido en cajas, pales y/o lotes, también habría que indicarlo. Además de crear las entradas correspondientes en /ArticleContainersREST, /ContainersREST y /ContainerObjectsREST.

Por último, si las ubicaciones del almacén están activadas sería necesario indicar la ubicación donde se entrará el stock, o donde se encuentre en ese momento. Si todo el proceso de ubicaciones se realiza por la API sería necesario añadir las entradas correspondientes en /StoresLocationsREST, /StoresLocationsDefinitionsREST y /StoresLocationsStockREST.

Modificación de stock

       El stock puede ser modificado usando el mismo servicio. Si existe una orden de compra se deberá gestionar también está.

Obtener el stock disponible

      El stock disponible se puede obtener desde el endpoint /ArticleStockREST/availables/{format}/{idArticle}/{idStore}

Categorías

Aquí tenemos tres endpoints:

  • Categorías: Nos devuelve todas las categorías.
  • Relación de categorías con categorías: Las relaciones entre las categorías, la jerarquía la marca el campo nivel de la categoría.
  • Relaciones de categorías con artículos: Define la pertenencia de los artículos con las categorías.

GET|PUT /CategoryREST/{format}

  • Dónde {format} puede ser JSON o XML
  • Este endpoint devolvería todas las categorías, también es el usado para insertar con PUT.

GET /CategoryREST/{format}/{id}

  • Dónde {format} puede ser JSON o XML
  • Donde {id} es el identificador de la categoría
  • Este endpoint devolvería la categoría indicada con {id}.

GET|PUT /CategoriesRelCategoryREST/{format}

  • Dónde {format} puede ser JSON o XML
  • Este endpoint devolvería todas las relaciones entre categorías, también es el usado para insertar con PUT.

GET /CategoriesRelCategoryREST/{format}/{id}

  • Dónde {format} puede ser JSON o XML
  • Donde {id} es el identificador de la relación
  • Este endpoint devolvería los datos de la relación indicada con {id}.

GET /CategoriesRelCategoryREST/category/{format}/{id}

  • Dónde {format} puede ser JSON o XML
  • Donde {id} es el identificador de la categoría
  • Este endpoint devolvería todas las relaciones que tuviera la categoría indicada.

GET|PUT /CategoriesRelArticleREST/{format}

  • Dónde {format} puede ser JSON o XML
  • Este endpoint devolvería todas las relaciones entre categorías y artículos, también es el usado para insertar con PUT.

GET /CategoriesRelArticleREST/{format}/{id}

  • Dónde {format} puede ser JSON o XML
  • Donde {id} es el identificador de la relación
  • Este endpoint devolvería los datos de la relación indicada con {id}.

GET /CategoriesRelArticleREST/category/{format}/{id}

  • Dónde {format} puede ser JSON o XML
  • Donde {id} es el identificador de la categoría
  • Este endpoint devolvería los datos de relación en los que apareciera la categoría indicada en {id}.

GET /CategoriesRelArticleREST/article/{format}/{id}

  • Dónde {format} puede ser JSON o XML
  • Donde {id} es el identificador del artículo
  • Este endpoint devolvería los datos de relación del artículo indicado en {id}.

Ejemplos, hay que indicar las credenciales de autenticación siempre:

GET/CategoryREST/JSON

Esto devolverá el listado completo de categorías. Como el resultado es muy grande no os indico el resultado, pero dentro de “Category” habría un array con las categorías.

GET/CategoryREST/JSON/cw5d656bc93b3cd

Esto devuelve una categoría.

Salida truncada:

Inserción:

PUT/CategoryREST/{format}

Body:

Inserción:

PUT/CategoryREST/{format}

Body:

{

  "fkFamily":"",

  "fkInvoiceCat":"",

  "fkInvoiceSubCat": "",

  "fkInvoiceDepartment": "",

  "fkInvoiceReceivedCat": "",

  "fkInvoiceReceivedSubcat": "",

  "customer": "cw5d656bc93b3cd", ← Obligatorio

  "name": "Categoría 1", ← Obligatorio

  "furl": "",

  "level": "0", ← Obligatorio

  "created": "2020-11-18", ← Obligatorio

  "fkUser": "",

  "fkMenu": "",

  "position": "",

  "fkInvSentCat": "",

  "fkInvSentSubCat": ""

}

Response:

PUT/CategoriesRelCategoryREST/JSON

Body:

{

  "fkCategoryParent":"123", ← Identificador de la categoría padre

  "fkCategoryChild":"456" ← Identificador de la categoría hija

}

Response:

PUT/CategoriesRelArticleREST/JSON

Obtener los datos de las categorías hijas de una categoría padre dada:

Hay que llamar a GET /CategoriesRelCategoryREST/category/{format}/{id}, que al pasarle el id de la categoría padre os devolverá un listado de identificadores de categorías hijas. 

Para obtener los datos de estas categorías tendríais que llamar a GET /CategoryREST/{format}/{id} con el {id} de la categoría hija, que correspondería al campo fkCategoryChild en la petición anterior.

Características

FeatureREST

GET/PUT /FeatureREST/{format}/{id}

  • Dónde {format} puede ser JSON o XML

Ejemplo de GET

FeatureValuesNameREST

  • Define los nombres de los valores de las características. Por ejemplo, para la característica “Color” aquí habría que indicar los valores correspondientes: rojo, verde, azul, etc.
  • /FeatureValuesNameREST
  • Documento de campos: https://cloud.yunbit.es/doc/apiDoc/eCommerce/Features/FeatureValuesNameTypes.raml
  • Los nombres de los valores de las características pueden ser traducibles para mostrarlas en múltiples idiomas añadiendo un registro relacionado. Para ello:

GET/PUT /FeatureValuesNameREST/{format}/{id}

  • Dónde {format} puede ser JSON o XML

Ejemplo:

Relación de artículos con características

GET /FeaturesRelArticleREST/{format}/{id}

FeaturesRelArticle":{

"idParent": "cw5a8c22c419f33",

"fkArticle": "cw5a859ed0e0bc2",

"pos": 1,

"codeGeneration": "0",

"allowedValues": null,

"id": "cw5a8c22c41e0bf",

"idFeatures_id": "cw5a8c22c419f33",

"idFeatures_reference": "UBICACION",

"idFeatures_name": "Ubicación",

"idFeatures_multiple": "0",

"idFeatures_showInDetailsPage": "0",

"idFeatures_useAsFilter": "1",

"idArticles_id": null,

"idArticles_customer": null,

"idArticles_name": null,

"idArticles_reference": null,

"idArticles_pubDate": null,

"idArticles_weight": null,

"idArticles_unitPrice": null,

"idArticles_status": null,

"idArticles_flags": null,

"idArticles_fkIva": null,

"idArticles_fkManufacturer": null,

"idArticles_width": null,

"idArticles_height": null,

"idArticles_depth": null,

"idArticles_sellNoStock": null,

"idArticles_furl": null,

"idArticles_created": null,

"idArticles_fkUser": null,

"idArticles_obs": null,

"idArticles_fkFamily": null,

"idArticles_partNumber": null,

"idArticles_hasReference": null,

"idArticles_enableNoStockPrice": null,

"idArticles_noStockPrice": null,

"idArticles_noStockTerm": null,

"idArticles_warranty": null,

"idArticles_isSpecial": null,

"idArticles_fkProvider": null,

"idArticles_increaseGuarantee": null,

"idArticles_urgent": null,

"idArticles_noStockUrgentPrice": null,

"idArticles_pasiveSubject": null,

"idArticles_pasiveSubjectExpireDate": null,

"idArticles_furlEn": null,

"idArticles_checkStock": null,

"idArticles_longDescription": null,

"idArticles_thickness": null,

"idArticles_diameter": null,

"idArticles_stockMinSell": null,

"idArticles_stockLimit": null,

"idArticles_shortDescription": null,

"idArticles_rawMaterialCalculate": null,

"idArticles_margin": null,

"idArticles_labour": null,

"idArticles_plating": null,

"idArticles_packaging": null,

"idArticles_idParent": null,

"idArticles_innerDiameter": null,

"idArticles_webMultiple": null,

"idArticles_fkMeasurementUnits": null,

"idArticles_widen": null,

"idArticles_bath": null,

"idArticles_finish": null,

"idArticles_stockMinPurchase": null,

"idArticles_maxStock": null,

"idArticles_type": null,

"idArticles_fkDefStore": null,

"idArticles_generic": null,

"idArticles_model": null,

"idArticles_series": null,

"idArticles_isRentable": null,

"idArticles_rentPrice": null,

"idArticles_rentMinDays": null,

"idArticles_articlesContainedToPurchase": null,

"idArticles_webStatus": null,

"idArticles_volume": null,

"idArticles_articlesContainedToPreparation": null,

"idArticles_articlesContainedToEntry": null,

"idArticles_availability": null,

"idArticles_fkIvaReceived": null,

"idArticles_assemblyOnEntry": null,

"idArticles_publishdate": null,

"idArticles_fkLicense": null,

"idArticles_preview": null,

"idArticles_PRESALE": null,

"idArticles_PRESALE_LIMIT_DATE": null,

"idArticles_STOCK_MAX_SELL": null,

"idArticles_countries_accepted": null,

"idArticles_countries_denied": null,

"idArticles_warrantyPurchase": null,

"idArticles_AvailableToBuy": null,

"idArticles_OrdersWithReturns": null,

"idArticles_presaleLimitUnits": null,

"idArticles_articlesContainedToInventory": null,

"idArticles_barcode": null,

"idArticles_isbn": null,

"idArticles_ismn": null,

"idArticles_ibic": null,

"idArticles_tem": null,

"idArticles_showPricesInWeb": null,

"idArticles_pos": null

}

Obtener las características de un artículo:

GET /FeaturesRelArticleREST/article/{format}/{id}:

"FeaturesRelArticle":[

{

"idParent": "cw5a8c22c41396a",

"fkArticle": "cw5a859ed0e0bc2",

"pos": 0,

"codeGeneration": "0",

"allowedValues": null,

"id": "cw5a8c22c41986b",

"idFeatures_id": "cw5a8c22c41396a",

"idFeatures_reference": "COMPOSITOR",

"idFeatures_name": "Compositor",

"idFeatures_multiple": "0",

"idFeatures_showInDetailsPage": "1",

"idFeatures_useAsFilter": "1",

"idArticles_id": null,

"idArticles_customer": null,

"idArticles_name": null,

"idArticles_reference": null,

"idArticles_pubDate": null,

"idArticles_weight": null,

"idArticles_unitPrice": null,

"idArticles_status": null,

"idArticles_flags": null,

"idArticles_fkIva": null,

"idArticles_fkManufacturer": null,

"idArticles_width": null,

"idArticles_height": null,

"idArticles_depth": null,

"idArticles_sellNoStock": null,

"idArticles_furl": null,

"idArticles_created": null,

"idArticles_fkUser": null,

"idArticles_obs": null,

"idArticles_fkFamily": null,

"idArticles_partNumber": null,

"idArticles_hasReference": null,

"idArticles_enableNoStockPrice": null,

"idArticles_noStockPrice": null,

"idArticles_noStockTerm": null,

"idArticles_warranty": null,

"idArticles_isSpecial": null,

"idArticles_fkProvider": null,

"idArticles_increaseGuarantee": null,

"idArticles_urgent": null,

"idArticles_noStockUrgentPrice": null,

"idArticles_pasiveSubject": null,

"idArticles_pasiveSubjectExpireDate": null,

"idArticles_furlEn": null,

"idArticles_checkStock": null,

"idArticles_longDescription": null,

"idArticles_thickness": null,

"idArticles_diameter": null,

"idArticles_stockMinSell": null,

"idArticles_stockLimit": null,

"idArticles_shortDescription": null,

"idArticles_rawMaterialCalculate": null,

"idArticles_margin": null,

"idArticles_labour": null,

"idArticles_plating": null,

"idArticles_packaging": null,

"idArticles_idParent": null,

"idArticles_innerDiameter": null,

"idArticles_webMultiple": null,

"idArticles_fkMeasurementUnits": null,

"idArticles_widen": null,

"idArticles_bath": null,

"idArticles_finish": null,

"idArticles_stockMinPurchase": null,

"idArticles_maxStock": null,

"idArticles_type": null,

"idArticles_fkDefStore": null,

"idArticles_generic": null,

"idArticles_model": null,

"idArticles_series": null,

"idArticles_isRentable": null,

"idArticles_rentPrice": null,

"idArticles_rentMinDays": null,

"idArticles_articlesContainedToPurchase": null,

"idArticles_webStatus": null,

"idArticles_volume": null,

"idArticles_articlesContainedToPreparation": null,

"idArticles_articlesContainedToEntry": null,

"idArticles_availability": null,

"idArticles_fkIvaReceived": null,

"idArticles_assemblyOnEntry": null,

"idArticles_publishdate": null,

"idArticles_fkLicense": null,

"idArticles_preview": null,

"idArticles_PRESALE": null,

"idArticles_PRESALE_LIMIT_DATE": null,

"idArticles_STOCK_MAX_SELL": null,

"idArticles_countries_accepted": null,

"idArticles_countries_denied": null,

"idArticles_warrantyPurchase": null,

"idArticles_AvailableToBuy": null,

"idArticles_OrdersWithReturns": null,

"idArticles_presaleLimitUnits": null,

"idArticles_articlesContainedToInventory": null,

"idArticles_barcode": null,

"idArticles_isbn": null,

"idArticles_ismn": null,

"idArticles_ibic": null,

"idArticles_tem": null,

"idArticles_showPricesInWeb": null,

"idArticles_pos": null

}

]

Artículos compuestos

Una vez creado los artículos se pueden crear artículos compuestos.

Para ello primero hay que crear un artículo que contendrá los elementos correspondientes.

En segundo lugar se relacionará este artículo con los artículos que lo componen.

PUT /CompositeArticleREST/{format}

GET/POST /CompositeArticleREST/{format}/{id}/{pag}/{tpag}

Documentación de los campos: https://cloud.yunbit.es/doc/apiDoc/eCommerce/Articulos/CompositeArticleTypes.raml

En el artículo, bien al crearlo o modificarlo puedes indicar que los artículos que lo componen se desglosen:

  • articlesContainedToPurchase: Desglosar en compras con Artículos contenidos (1/0)
  • articlesContainedToPreparation: Desglosar artículo con artículos contenidos durante la preparación (1/0)
  • articlesContainedToEntry: Desglosar artículo comprado durante la entrada (1/0)
  • assemblyOnEntry: Fabricación del artículo continente en la entrada de los contenidos (1/0)

Empresas y contactos

      Un pedido está vinculado con un contacto de un cliente. Para nosotros, un cliente es una empresa, y un contacto un empleado de esa empresa. En el caso de particulares tanto la empresa como el contacto serán el mismo. Por tanto, primero hay que crear el cliente, y después los posibles contactos que existan.

  • Servicio de clientes: /CrmCompanyREST, con el valor “|Cliente|” en el campo “category”. Si el cliente ya existiese, o tuviera un valor en “category” distinto (por ejemplo “|Proveedor|”) es necesario que se mantenga el valor existente, con lo que quedaría “|Proveedor|Cliente|”.
  • También es necesario rellenar los campos defaultAddressInvoice, defaultContactInvoice, defaultAddressInvoiceToSend y defaultContactInvoiceToSend. Los defaultAddress* deben tener el identificador de la dirección que se crea de facturación, los defaultContact el id del contacto. Son necesarios para la generación automática de la factura al crear el pedido.
  • Documento de campos: https://cloud.yunbit.es/doc/apiDoc/directory/CRM/CrmCompanyTypes.raml
  • Servicio de contactos: /ContactREST.
  • Documento de campos: https://cloud.yunbit.es/doc/apiDoc/directory/CRM/ContactTypes.raml
  • El campo customerConsent del contacto debe tener el valor “1”, indica que consiente la gestión de la solicitud, para el ecommerce permitiría la gestión del pedido.
  • El campo prospectConsent permite el envío de información periódica si se le da el valor “1”.
  • Para ambos campos están los campos de fechas: customerConsentDate y prospectConsentDate.

Además, cada cliente tendrá sus propias direcciones que se añadirán al pedido:

Pedidos 

Para la creación del pedido es necesario primero que esté creado el cliente /CrmCompanyREST), el contacto (/ContactsREST) y el carrito (/ShoppingCartREST) con sus artículos (/ShoppingCartsArticleREST).

A continuación hay que realizar una petición a /OrderREST/generate con los parámetros indicados en el endpoint (más abajo). 

Carro de la compra

      Un pedido está relacionado con un carro de la compra y sus conceptos.

      Tenéis las definiciones de campos en los enlaces indicados. Si tenéis alguna duda consultadnos. Las peticiones PUT funcionan igual a los ejemplos de las categorías. El campo “Id” solo se indica si es una actualización, si no, no debe aparecer en el Body de la petición.

PUT /ShoppingCartREST

Obtener todos los carritos

GET /ShoppingCartREST/{format}//{pag}/{tpag}

Obtener los datos de un carrito

GET /ShoppingCartREST/{format}/{id}

Insertar un artículo en un carrito

PUT /ShoppingCartsArticleREST

Explicación de campos

"inStock": "1", ← Indicar "1" si el artículo en el momento de insertarlo en el carrito tenía stock. En caso contrario indicar un "0"

  "grossUnitStockPrice": "246.46", <-- Precio bruto unitario de stock

  "unitStockBasePrice": "143.00", <-- Precio base unitario de stock

  "unitStockPrice": "143.00", <-- Precio unitario de stock

  "grossUnitNoStockPrice": "246.46", <-- Precio bruto unitario sin stock

  "unitNoStockBasePrice": "143.00", <-- Precio base unitario sin stock

  "unitNoStockPrice": "143.00", <-- Precio unitario sin stock

  "rechargo": "-10.00", <-- Recargo de equivalencia sin símbolos de euro o porcentaje

  "rechargoType": "0", <-- Tipo de recargo de equivalencia. Para indicar un tipo porcentual, el valor es "0", para indicar un tipo directo (euros), "1".

  "totalStockBasePrice": "143.00", <-- Precio base total de stock

  "totalStockPrice": "143.00", <-- Precio total de stock

  "totalNoStockBasePrice": "0", <-- Precio base total sin stock

  "totalNoStockPrice": "0" <-- Precio total sin stock

Nosotros trabajamos con dos precios: precios de stock y precios sin stock. Algunos de nuestros clientes trabajan con dos precios dependiendo del stock disponible de un artículo, si hay stock el artículo tiene un precio, si no hay stock tiene un precio diferente.

Si este no es vuestro caso los campos "unitStockPrice"/"unitNoStockPrice", "unitStockBasePrice"/"unitNoStockBasePrice" y "grossUnitStockPrice"/"grossUnitNoStockPrice" deberían coincidir en su valor. Por ejemplo, el valor de "unitStockPrice" debe ser igual al valor de "unitNoStockPrice".

Para los totales se pueden dar tres casos

  1. Si el número de unidades vendidas están disponibles (hay stock), entonces los campos "totalNoStockPrice" y "totalNoStockBasePrice" tendrán el valor "0", los otros dos campos de total serán los que tengan el valor correcto.
  2. Si el número de unidades vendidas no están disponibles (no hay stock), entonces los campos "totalStockPrice" y "totalStockBasePrice" tendrán el valor "0", los otros dos campos de total serán los que tengan el valor correcto.
  3. Si disponemos de 5 unidades de stock pero se han vendido 7 unidades, entonces los campos "totalStockPrice" y "totalStockBasePrice" tendrán el valor de las cinco unidades que haya en stock, y "totalNoStockPrice" y "totalNoStockBasePrice" tendrán el valor de las restantes dos unidades de las que no hay stock.

Métodos de pago

Efectivo / Contrarreenbolso0
Transferencia bancaria1
Domiciliación2
Tarjeta de crédito/debito3
Pagaré4
Talón5
Confirming6
Carta de cŕedito7
Cheque8
CESCE9
American ExpressA
AgenteB
RAndorraC
ValeD
Devolución del valeT
ContrarreembolsoE
LeasingL
RentingR
PaypalP
Paga Más tardeF
Tarjeta regaloG
AplazameH

Obtener los artículos de un carrito

GET /ShoppingCartsArticleREST/shoppingCart/{format}/{idCart}

Pedidos

  • La creación del pedido se basa en los datos existentes en el carrito. Por tanto es necesario crear primero el carrito y sus conceptos antes de generar el pedido
  • Una vez creado el carrito, a /OrderREST/generate se le pasan cuatro parámetros: cartId (identificador del carrito), userId (identificador del cliente), swlang (idioma (es,en, etc.)), metagroup (identificador del metagrupo), con lo que se generará el pedido, se reservará stock (o se creará una orden de compra si no hubiera stock), se generará las facturas correspondientes, etc. 
  • El recurso /OrderREST/generate genera un pedido en estado “En proceso” o “Pendiente de mercancía”. Si se quiere otro estado es necesario generar el pedido sin usar este recurso.

POST /OrderREST/generate

Body Form:

cartId: “bc00019261a00fd” ← Obligatorio. Identificador del carrito (ShoppingCartsREST)

userId: “cw5ceeecf5cebd9” ← Obligatorio. Identificador del usuario (ContactREST)

swlang: “es” ← Obligatorio. Idioma de las notificaciones

metagroup: “cw5ced461c0d4af”. ← Obligatorio.

Si el artículo del carrito no tuviera los precios indicados, o se desea modificar los totales en vez de que el sistema los obtenga de los artículos del carrito habría que indicarlos con los siguientes parámetros:

orderTotalDiscount: “10” <-- Valor real del descuento total del pedido. Cero si no hay descuento.

orderBasePrice: “100” <-- Precio base total del pedido sin impuestos. Subtotal

orderTotalTax: “21” <-- Importe de los impuestos aplicables al pedido.

orderTotalSurcharge: “0” <-- Importe de recargo de equivalencia total

orderTotalPrice: “121” <-- Total con impuestos ya sumados.

orderType: “cw5f3a93ae273da” ← Opcional. Tipo de pedido. Si no se indica en la petición el sistema buscará el tipo de pedido “web”.

Si se está generando un pedido que corresponde al cliente de un cliente es necesario también indicar el identificador del cliente:

userId: “cw5ceeecf5cebd9” ← Obligatorio. Su valor corresponderá con el cliente.

idClientOfClient: “cw622208040b6ab” ← Será el identificador del cliente de userId

Respuesta:

Estados disponibles en los pedidos

EstadoValue
Pendiente de pago0
Pendiente de mercancía4
En proceso3
En preparación5
Preparado6
Enviado7
Entregado9

Opciones de transporte

Compañías de transporte

GET /ShippingCompanyREST/{format}/{id}

PUT /ShippingCompanyREST/{format}

Servicios de transporte

GET /ShippingServiceREST/{format}/{id}

PUT /ShippingServiceREST/{format}

Webhooks

El listado de web hooks es el siguiente:

WEBHOOKS ASOCIADOS A OBJETOS

  • AddressesDelete - BCCompanyAddresses - Borrar
  • AddressesInsert - BCCompanyAddresses - Inserción
  • AdressesModify - BCCompanyAddresses - Modificación
  • ArticlesDelete - Articles - Borrar
  • ArticlesInsert - Articles - Inserción
  • ArticlesModify - Articles - Modificación
  • ArticleStocksDelete - ArticleStocks - Borrar
  • ArticleStocksInsert - ArticleStocks - Inserción
  • ArticleStocksModify - ArticleStocks - Modificación
  • CompaniesDelete - Companies - Borrar
  • CompaniesInsert - Companies - Inserción
  • CompaniesModify - Companies - Modificación
  • ContactsDelete - Contacts - Borrar
  • ContactsInsert - Contacts - Inserción
  • ContactsModify - Contacts - Modificación
  • OrdersInsert - Orders - Inserción
  • OrdersModify - Orders - Modificación
  • PurchaseOrdersInsert - PurchaseOrders - Inserción
  • PurchaseOrdersModify - PurchaseOrders - Modificación
  • RateExceptionsDelete - RateExceptions - Borrar
  • RateExceptionsInsert - RateExceptions - Inserción
  • RateExceptionsModify - RateExceptions - Modificación
  • RMAInsert - RMA - Inserción
  • RMAModify - RMA - Modificación
  • OrdersChangeStatus - Orders - Cambio de valor en campo status
  • PurchaseOrdersChangeStatus - PurchaseOrders - Cambio de valor en campo status
  • RMAChangeStatus - RMA - Cambio de valor en campo status
  • WorkOrdersChangeStatus - WorkOrders - Cambio de valor en campo status
  • TraceabilityInsert - Traceability - Inserción

Respuesta

La llamada al URL es de tipo POST y se incluyen los siguientes parámetros:

  • object: nombre del objeto que ha desencadenado la llamada
  • objectid: valor de la clave primaria para dicho objeto
  • event: evento que ha desencadenado la llamada. Valores: I para inserción, M para modificación, D para borrado, F para cambio de valor en campo
    • Sólo si el evento es de tipo F:
      • field: nombre del campo asociado al evento
      • fieldBefore: valor del campo antes de modificar
      • fieldAfter: valor del campo después de modificar

Proceso para obtener el stock disponible desde los webhooks

Webhook OrdersModify, OrdersChangeStatus:

  Con el identificador que recibes haces una consulta a GET /OrdersArticleREST/byOrder/{format}/{idOrder} para obtener los artículos (también podrías hacer la misma consulta usando POST /OrdersArticleREST/{format} y {idOrder} y su valor en el body del formulario). Con los artículos haces una petición por artículo a GET /ArticleStockREST/availables/{format}/{idArticle}/{idStore} para obtener el stock disponible de esos artículos. El {idArticle} sería el campo {id}, y el {idStore} el campo {idStore} que te devuelve /OrdersArticleREST/byOrder.

Webhook TraceabilityInsert:

      El identificador que recibes corresponde al endpoint /ecomTraceabilityREST, por tanto tendrás que llamar primero a este endpoint con el identificador recibido GET /ecomTraceabilityREST/{format}/{id} con lo que obtendrás el registro de la trazabilidad con el mensaje de qué a cambiado. Para obtener el artículo usamos el campo {idParent} devuelto en la petición anterior para consultar el registro de stock en el endpoint GET /ArticleStockREST/{format}/{id}, en el que tendrémos los campos {idArticle} e {idStore} para usarlos en el endpoint GET /ArticleStockREST/availables/{format}/{idArticle}/{idStore}.

Webhook WorkOrdersChangeStatus:

       El identificador que recibes es el de una orden de trabajo de tipo entrada. Lo primero que hay que hacer es obtener los códigos de barras entrados a través de GET /WorkOrderSSNREST/workOrder/{format}/{id}. Con el valor del campo {fkSN} de cada registro obtenido consultamos el artículo y almacén al que corresponde a través de GET /ArticleStockREST/{format}/{id}, que nos devolverá el registro con el {idArticle} e {idStore} que podrás pasar a GET /ArticleStockREST/availables/{format}/{idArticle}/{idStore} para obtener los disponibles.

Conocer los movimientos de stock de un artículo

      En cualquier momento puedes consultar /ecomTraceabilityREST para obtener el listado de cambios que se hayan realizado en el stock de un artículo a través de POST /ecomTraceabilityREST/{format} y en el body indicar la clave {idParent} con el valor del id del artículo a consultar.

Multicliente

De cara a trabajar con varios clientes dentro de Yunbit tenemos que tener en cuenta los siguientes factores.

IDs a crear

  • Categorías de empresas:
    • CLIENTETEAMTODAY_PROPIA
    • CLIENTETEAMTODAY
    • CLIENTETEAMTODAY_B2C
    • CLIENTETEAMTODAY_ECI
    • CLIENTETEAMTODAY_ECI_WEB
    • BYNIUMA
    • CORNERS BYNIUMA
    • MULTIMARCA TRUCCO Y NAELLE

Ya están creadas recuerda poner | al principio y al final.

  • Tipos de pedidos:
    • PROPIA_BYNIUMA = cw6155c7aeb0786
    • MULTIMARCA = Este ya existe y el ID es cw614459fa9a119
    • B2C_BYNIUMA = cw6155c7dc63a9a
    • ECI_BYNIUMA = cw6155c86b4027c
    • ECIWEB_BYNIUMA = cw6155c77f8e4d5
  • Compañías de transporte:
    • SEUR
    • DHL
  • Servicios de transporte:
    • SEUR Normal…

Empresas

Si tiene albarán personalizado indicar el siguiente ID en el campo idProposalTemplateAlbaran como se indica en la sección Albaranes de Empresas

Artículos

En la inserción de artículos comunicamos el cliente relacionado con el artículo en el campo fkClient, el campo debe estar relleno con el id de la empresa en Yunbit. En el endpoint de Artículos Maestros.

Los artículos actuales hay que vincularlos a GJB, dinos si lo haces tu o lo hacemos nosotros. 

Pedidos

En la inserción de pedidos comunicamos el cliente relacionado con el pedido en el campo “idClientOfClient”

En el endpoint de Órdenes de Compra

OCOs

En la inserción de OCOs comunicamos el cliente relacionado con la OCO en el campo “idClient”

En el endpoint de Órdenes de Compra

Añadir etiquetas no generadas en Yunbit

Para poder añadir etiquetas se tendra que una peticion PUT a https://cloud.yunbit.es/eCommerce/ShippingLabelREST/JSON con los siguientes parametros en el cuerpo:

'idOrder' : Identificador del pedido.

'type' : formato de la etiqueta (ZPL, PDF, TPL)

'documentum' : Fichero pasado a base64 de ( PDF, ZPL, TPL)

‘fileName’: Nombre de la etiqueta con su extensión.

Artículo perteneciente a la/s categoría/s: Última actualización: 26 de mayo del 2022, 12:53h
« Volver atrás Sugerencias

    Sugerencias

    Envíenos sus sugerencias para esta sección, ya sean mejoras en su funcionalidad, usabilidad o contenido. Valoraremos su opinión y comentarios e intentaremos mejorar en la medida de lo posible. Gracias por utilizar nuestros servicios.

    Nota: Todos los campos son obligatorios.

    Información básica sobre protección de datos

    La entidad responsable del tratamiento es YUNBIT, S.L. La finalidad para la cual se recaban los datos es recabar información para mejorar esta wiki. La legitimación para captar la información es el propio consentimiento del interesado al enviar la sugerencia. Los datos no serán cedidos a terceros, salvo obligación legal. Los usuarios disponen del derecho a acceder, rectificar y suprimir los datos, así como otros derechos, como se explica en la información adicional. Puede consultar la información adicional y detallada sobre Protección de Datos aquí: Política de privacidad

    Otros artículos de la categoría Contenido útil

    Out1