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

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

3dids .com |

Crear Producto o actualizar en Shopify desde SAGE 200:

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 SAP 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 sage import api  # Asumiendo que tienes una API de SAGE disponible

def create_product_in_shopify(sage_product_id):
    # 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"
    }

    # Leer datos del producto desde SAGE
    sage_product = api.get_product(sage_product_id)
    sage_product_data = {
        "name": sage_product.name,
        "identifier": sage_product.sku,
        "short_description": sage_product.short_description,
        "long_description": sage_product.long_description,
        "seo_title": sage_product.seo_title,
        "seo_description": sage_product.seo_description,
        "tags": sage_product.tags,
        "variants": [],
        "images": []
    }

    # Obtener variantes del producto
    for variant in sage_product.variants:
        variant_data = {
            "title": variant.name,
            "price": str(variant.price),
            "inventory_quantity": variant.stock_level,
            "images": []
        }
        # Obtener imágenes de las variantes
        for image in variant.images:
            variant_data["images"].append(image.url)
        sage_product_data["variants"].append(variant_data)

    # Obtener imágenes del producto principal
    for image in sage_product.images:
        sage_product_data["images"].append(image.url)

    # Crear producto en Shopify
    product_data = {
        "product": {
            "title": sage_product_data["name"],
            "body_html": sage_product_data["long_description"],
            "vendor": "Your Vendor",
            "product_type": "Your Product Type",
            "tags": sage_product_data["tags"],
            "seo_title": sage_product_data["seo_title"],
            "seo_description": sage_product_data["seo_description"],
            "variants": [
                {
                    "title": variant["title"],
                    "price": variant["price"],
                    "sku": sage_product_data["identifier"],
                    "inventory_quantity": variant["inventory_quantity"],
                    "image_ids": []
                } for variant in sage_product_data["variants"]
            ],
            "images": [
                {
                    "src": image
                } for image in sage_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(sage_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)

# Ejemplo de uso
create_product_in_shopify("SAGE_PRODUCT_ID")

Actualizar Producto en Shopify:

python
import requests
import json
from sage import api  # Asumiendo que tienes una API de SAGE disponible

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

    # Leer datos del producto actualizado desde SAGE
    sage_product = api.get_product(sage_product_id)
    sage_product_data = {
        "name": sage_product.name,
        "identifier": sage_product.sku,
        "short_description": sage_product.short_description,
        "long_description": sage_product.long_description,
        "seo_title": sage_product.seo_title,
        "seo_description": sage_product.seo_description,
        "tags": sage_product.tags,
        "variants": [],
        "images": []
    }

    # Obtener variantes del producto
    for variant in sage_product.variants:
        variant_data = {
            "title": variant.name,
            "price": str(variant.price),
            "inventory_quantity": variant.stock_level,
            "images": []
        }
        # Obtener imágenes de las variantes
        for image in variant.images:
            variant_data["images"].append(image.url)
        sage_product_data["variants"].append(variant_data)

    # Obtener imágenes del producto principal
    for image in sage_product.images:
        sage_product_data["images"].append(image.url)

    # Actualizar producto en Shopify
    product_data = {
        "product": {
            "id": shopify_product_id,
            "title": sage_product_data["name"],
            "body_html": sage_product_data["long_description"],
            "vendor": "Your Vendor",
            "product_type": "Your Product Type",
            "tags": sage_product_data["tags"],
            "seo_title": sage_product_data["seo_title"],
            "seo_description": sage_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": sage_product_data["identifier"],
                    "inventory_quantity": variant["inventory_quantity"],
                    "image_ids": []
                } for variant in sage_product_data["variants"]
            ],
            "images": [
                {
                    "src": image
                } for image in sage_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, headers=shopify_headers, data=json.dumps(product_data))
    if response.status_code == 200:
        shopify_product = response.json()["product"]
        for i, variant in enumerate(sage_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)

# Ejemplo de uso
update_product_in_shopify("SAGE_PRODUCT_ID", "SHOPIFY_PRODUCT_ID")

Dónde alojar el script:La mejor forma de alojar estos scripts sería en un servidor que tenga acceso tanto a tu instancia de SAGE como a la API de Shopify. Aquí tienes algunas opciones:

  1. Servidor propio: Puedes alojar estos scripts en tu propio servidor, configurando un entorno de ejecución como Python y asegurándote de que tenga acceso a las APIs necesarias.
  2. Plataforma de integración: Considera usar una plataforma de integración como Zapier, Integromat o incluso un servicio de integración personalizado que pueda ejecutar estos scripts y manejar la comunicación entre SAGE y Shopify.
  3. Servicio en la nube: Puedes usar servicios en la nube como AWS Lambda, Google Cloud Functions o Microsoft Azure Functions para ejecutar estos scripts. Estos servicios te permiten ejecutar código sin necesidad de gestionar servidores.

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