Conector entre Odoo y Shopify : Como crear y actualizar productos de ERP Odoo a Shopify

Conector entre Odoo y Shopify : Como  crear y actualizar productos de ERP Odoo a Shopify

3dids .com |

Crear Producto en Shopify viniendo el dato del ERP Odoo:

 

Desde 3dids te podemos ayudar a hacer el conector. Ejemplo claro de como debería ser el proceso de creación y actualización de productos desde Odoo a Shopify.

Esto no es más que un ejemplo que trata de que tu que eres desarrollador veas la estructura y la adaptes a tu ERP



python
import requests
import json
from odoo import api, models

class ProductTemplate(models.Model):
    _inherit = 'product.template'

    def create_product_in_shopify(self):
        # Configuración de la API de Shopify
        shopify_url = "https://your-store.myshopify.com/admin/api/2023-01/products.json"
        shopify_headers = {
            "X-Shopify-Access-Token": "your_access_token",
            "Content-Type": "application/json"
        }

        for product in self:
            # Leer datos del producto desde Odoo
            odoo_product_data = {
                "name": product.name,
                "identifier": product.default_code,
                "short_description": product.description_sale,
                "long_description": product.description,
                "seo_title": product.seo_title,
                "seo_description": product.seo_description,
                "tags": [tag.name for tag in product.tag_ids],
                "variants": [],
                "images": []
            }

            # Obtener variantes del producto
            for variant in product.product_variant_ids:
                variant_data = {
                    "title": variant.name,
                    "price": str(variant.list_price),
                    "inventory_quantity": variant.qty_available,
                    "images": []
                }
                # Obtener imágenes de las variantes
                for image in variant.image_ids:
                    variant_data["images"].append(image.image_url)
                odoo_product_data["variants"].append(variant_data)

            # Obtener imágenes del producto principal
            for image in product.image_ids:
                odoo_product_data["images"].append(image.image_url)

            # Crear producto en Shopify
            product_data = {
                "product": {
                    "title": odoo_product_data["name"],
                    "body_html": odoo_product_data["long_description"],
                    "vendor": "Your Vendor",
                    "product_type": "Your Product Type",
                    "tags": odoo_product_data["tags"],
                    "seo_title": odoo_product_data["seo_title"],
                    "seo_description": odoo_product_data["seo_description"],
                    "variants": [
                        {
                            "title": variant["title"],
                            "price": variant["price"],
                            "sku": odoo_product_data["identifier"],
                            "inventory_quantity": variant["inventory_quantity"],
                            "image_ids": []
                        } for variant in odoo_product_data["variants"]
                    ],
                    "images": [
                        {
                            "src": image
                        } for image in odoo_product_data["images"]
                    ]
                }
            }

            # Enviar variantes y sus imágenes por separado debido a las limitaciones de la API de Shopify
            response = requests.post(shopify_url, headers=shopify_headers, data=json.dumps(product_data))
            if response.status_code == 201:
                shopify_product = response.json()["product"]
                for i, variant in enumerate(odoo_product_data["variants"]):
                    variant_url = f"https://your-store.myshopify.com/admin/api/2023-01/products/{shopify_product['id']}/variants/{shopify_product['variants'][i]['id']}.json"
                    for image_url in variant["images"]:
                        image_data = {
                            "variant": {
                                "id": shopify_product['variants'][i]['id'],
                                "image": {
                                    "src": image_url
                                }
                            }
                        }
                        image_response = requests.post(variant_url, headers=shopify_headers, data=json.dumps(image_data))
                        if image_response.status_code != 201:
                            print(f"Error al subir imagen de variante en Shopify: {image_response.text}")
                print("Producto creado exitosamente en Shopify")
            else:
                print("Error al crear el producto en Shopify:", response.text)

    @api.model
    def update_product_in_shopify(self):
        # Configuración de la API de Shopify
        shopify_url = "https://your-store.myshopify.com/admin/api/2023-01/products/{product_id}.json"
        shopify_headers = {
            "X-Shopify-Access-Token": "your_access_token",
            "Content-Type": "application/json"
        }

        for product in self:
            # Leer datos del producto actualizado desde Odoo
            odoo_product_data = {
                "name": product.name,
                "identifier": product.default_code,
                "short_description": product.description_sale,
                "long_description": product.description,
                "seo_title": product.seo_title,
                "seo_description": product.seo_description,
                "tags": [tag.name for tag in product.tag_ids],
                "variants": [],
                "images": []
            }

            # Obtener variantes del producto
            for variant in product.product_variant_ids:
                variant_data = {
                    "title": variant.name,
                    "price": str(variant.list_price),
                    "inventory_quantity": variant.qty_available,
                    "images": []
                }
                # Obtener imágenes de las variantes
                for image in variant.image_ids:
                    variant_data["images"].append(image.image_url)
                odoo_product_data["variants"].append(variant_data)

            # Obtener imágenes del producto principal
            for image in product.image_ids:
                odoo_product_data["images"].append(image.image_url)

            # Actualizar producto en Shopify
            product_data = {
                "product": {
                    "id": product.shopify_product_id,  # Asumiendo que tienes un campo para almacenar el ID de Shopify
                    "title": odoo_product_data["name"],
                    "body_html": odoo_product_data["long_description"],
                    "vendor": "Your Vendor",
                    "product_type": "Your Product Type",
                    "tags": odoo_product_data["tags"],
                    "seo_title": odoo_product_data["seo_title"],
                    "seo_description": odoo_product_data["seo_description"],
                    "variants": [
                        {
                            "id": variant.shopify_variant_id,  # Asumiendo que tienes un campo para almacenar el ID de la variante de Shopify
                            "title": variant["title"],
                            "price": variant["price"],
                            "sku": odoo_product_data["identifier"],
                            "inventory_quantity": variant["inventory_quantity"],
                            "image_ids": []
                        } for variant in odoo_product_data["variants"]
                    ],
                    "images": [
                        {
                            "src": image
                        } for image in odoo_product_data["images"]
                    ]
                }
            }

            # Enviar variantes y sus imágenes por separado debido a las limitaciones de la API de Shopify
            response = requests.put(shopify_url.format(product_id=product.shopify_product_id), headers=shopify_headers, data=json.dumps(product_data))
            if response.status_code == 200:
                shopify_product = response.json()["product"]
                for i, variant in enumerate(odoo_product_data["variants"]):
                    variant_url = f"https://your-store.myshopify.com/admin/api/2023-01/products/{shopify_product['id']}/variants/{variant['shopify_variant_id']}.json"
                    for image_url in variant["images"]:
                        image_data = {
                            "variant": {
                                "id": variant['shopify_variant_id'],
                                "image": {
                                    "src": image_url
                                }
                            }
                        }
                        image_response = requests.post(variant_url, headers=shopify_headers, data=json.dumps(image_data))
                        if image_response.status_code != 201:
                            print(f"Error al subir imagen de variante en Shopify: {image_response.text}")
                print("Producto actualizado exitosamente en Shopify")
            else:
                print("Error al actualizar el producto en Shopify:", response.text)

Dónde alojar los scripts:

Para alojar estos scripts, te recomendaría las siguientes opciones:

  1. Dentro de Odoo: Si tienes acceso al código fuente de Odoo, puedes agregar estos scripts como métodos de un modelo personalizado. Esto te permitirá ejecutar las funciones directamente desde Odoo.
  2. Servidor externo: Puedes alojar estos scripts en un servidor externo que tenga acceso a tu instancia de Odoo y a la API de Shopify. Esto te permitirá ejecutar los scripts de manera programada o a demanda.
  3. Plataforma de integración: Considera usar una plataforma de integración como Render  Zapier, Integromat o incluso un servicio de integración personalizado que pueda ejecutar estos scripts y manejar la comunicación entre Odoo y Shopify.

Recuerda que necesitarás ajustar los scripts según tu configuración específica de Odoo y Shopify, y asegurarte de manejar adecuadamente las credenciales de API y la autenticación.