Store Platforms

Dịch vụ tích hợp Odoo Shopify: Đồng bộ gì, lỗi ở đâu?

Hướng dẫn tích hợp Odoo Shopify: xác định hệ thống quản lý tồn kho, đơn hàng, giới hạn API, lỗi webhook và câu hỏi cần hỏi nhà cung cấp.

Ảnh đại diện Long Nguyen

Long Nguyen

Lập trình viên Fullstack · Kỹ sư AI · Nhà nghiên cứu

• • 6 phút đọc •

Dịch vụ tích hợp Odoo Shopify thực sự bao gồm những gì?

Dịch vụ tích hợp Odoo Shopify kết nối cửa hàng Shopify với Odoo để đơn hàng, tồn kho, khách hàng, giao hàng và hoàn tiền được chuyển qua lại mà không cần nhân viên nhập thủ công. Bản thân việc đồng bộ khá đơn giản. Phần phức tạp thực sự là xác định hệ thống nào sở hữu từng loại dữ liệu và xử lý ra sao khi hai hệ thống không khớp nhau.

Đây là bản đồ dữ liệu chúng tôi dùng làm điểm xuất phát cho mọi dự án. Hướng đồng bộ và hệ thống sở hữu có thể khác nhau tùy doanh nghiệp, nhưng mỗi dòng đều phải có câu trả lời rõ ràng trước khi viết bất kỳ đoạn mã nào.

Dữ liệu Hướng thường dùng Hệ thống sở hữu Điểm dễ lỗi nhất
Sản phẩm và giá Odoo sang Shopify (hoặc ngược lại nếu Shopify là nơi quản lý nội dung bán hàng) Chỉ một hệ thống Biến thể, SKU bị thiếu hoặc trùng
Tồn kho Odoo sang Shopify Odoo Hàng đã giữ chỗ, nhiều địa điểm kho
Đơn hàng Shopify sang Odoo Shopify cho đến khi hoàn tất giao hàng Chỉnh sửa hoặc hủy đơn sau khi nhập
Khách hàng Shopify sang Odoo Shopify đối với tài khoản trên website Khách thanh toán không đăng nhập tạo đối tác trùng
Hoàn tất đơn và mã vận đơn Odoo sang Shopify Kho Odoo Giao hàng từng phần
Hoàn tiền và đổi trả Shopify sang Odoo (phiếu ghi có) Shopify Quyết định nhập lại kho, đảo thuế
Thanh toán và khoản chi trả Cổng thanh toán sang kế toán Odoo Cổng thanh toán Phí và khoản chi trả gộp không khớp với đơn hàng

Xác định nguồn dữ liệu chính trước tiên

Đồng bộ hai chiều trên cùng một trường dữ liệu là nguyên nhân khiến phần lớn tích hợp xuống cấp. Nếu cả Odoo và Shopify đều có thể chỉnh sửa tên sản phẩm, sớm muộn một hệ thống cũng ghi đè dữ liệu của hệ thống kia vào thời điểm không phù hợp. Quy tắc bền vững là: mỗi trường chỉ có đúng một hệ thống được quyền ghi, còn hệ thống kia chỉ đọc dữ liệu.

Với phần lớn cửa hàng, điều đó có nghĩa Odoo quản lý tồn kho, giá vốn và trạng thái hoàn tất đơn; Shopify quản lý đơn hàng trên website, khách hàng thanh toán và việc ghi nhận thanh toán. Nội dung sản phẩm mới là phần cần cân nhắc: nếu đội ngũ của bạn viết mô tả và quản lý hình ảnh trên Shopify, hãy để Shopify sở hữu các dữ liệu đó và chỉ nhập vào Odoo những gì bộ phận vận hành cần (SKU, mã vạch, khối lượng, giá vốn).

Nên dùng connector có sẵn hay tích hợp tùy chỉnh?

Odoo có tài liệu về connector Shopify riêng cho các phiên bản gần đây, trong khi các marketplace cũng cung cấp nhiều connector của bên thứ ba. Trước khi cho rằng một giải pháp phù hợp, hãy đối chiếu phạm vi tính năng với edition và phiên bản Odoo của bạn, vì mức độ hỗ trợ khác nhau giữa các connector và từng bản phát hành. Connector dựng sẵn thường là lựa chọn phù hợp khi quy trình của bạn tiêu chuẩn. Khi quy trình có nhiều ngoại lệ, phát triển tùy chỉnh sẽ xứng đáng với chi phí bỏ ra.

Tình huống Connector dựng sẵn Tích hợp tùy chỉnh
Một cửa hàng Shopify, một kho, thuế tiêu chuẩn Thường là đủ Không cần thiết
Nhiều cửa hàng hoặc nhiều địa điểm tồn kho Kiểm tra kỹ giới hạn mapping Thường cần thiết
Sản phẩm combo, bộ sản phẩm hoặc sản phẩm làm theo đơn Hiếm khi xử lý gọn gàng Thường cần thiết
Giá B2B, bán sỉ hoặc quy tắc thuế tùy chỉnh Tùy module Thường cần thiết
Odoo Community tự lưu trữ Xác minh connector có hỗ trợ edition của bạn Phù hợp, sử dụng external API của Odoo
Lượng đơn lớn hoặc danh mục sản phẩm nhiều Kiểm thử giới hạn Shopify trước Được thiết kế để đáp ứng các giới hạn đó

Nếu trường hợp của bạn thuộc cột bên phải, một giải pháp được thiết kế theo phạm vi cụ thể thường tiết kiệm hơn việc cố ép connector hoạt động. Đó là phần việc phía sau dịch vụ phát triển và tích hợp Odoo của chúng tôi: xây dựng đồng bộ theo sản phẩm, kho và quy tắc kế toán của bạn thay vì dùng mapping chung chung.

Giới hạn Shopify API ảnh hưởng đến thiết kế tích hợp

Shopify giới hạn tần suất gọi API, và các giới hạn này quyết định cách thiết kế việc đồng bộ danh mục sản phẩm cũng như đơn hàng. Đối với GraphQL Admin API, tài liệu giới hạn tốc độ của Shopify quy định tốc độ khôi phục theo từng gói và giới hạn mỗi truy vấn ở 1.000 điểm chi phí.

Gói Shopify Tốc độ khôi phục GraphQL
Standard 100 điểm mỗi giây
Advanced 200 điểm mỗi giây
Shopify Plus 1.000 điểm mỗi giây
Commerce Components 2.000 điểm mỗi giây

Có hai hệ quả quan trọng khi thiết kế. Thứ nhất, việc đẩy toàn bộ danh mục trên gói Standard là một tác vụ chạy chậm theo nhịp, không phải quá trình gửi dồn dập. Vì vậy, lần nhập dữ liệu đầu tiên cần chia lô và sử dụng cursor có thể tiếp tục. Thứ hai, cùng trang tài liệu đó mô tả REST Admin API là một request bucket xử lý ở tốc độ hai request mỗi giây, đồng thời Shopify liệt kê REST là legacy. Các tích hợp mới nên được xây dựng trên GraphQL.

Webhook là chưa đủ: cần thêm reconciliation

Webhook báo cho Odoo biết một đơn hàng đã được tạo hoặc thanh toán gần như theo thời gian thực. Hướng dẫn webhook của Shopify nêu rõ ứng dụng không nên chỉ dựa vào webhook: việc gửi sự kiện không được đảm bảo, sự kiện có thể đến không đúng thứ tự và có thể bị gửi trùng. Các biện pháp được tài liệu đề xuất là loại trùng dựa trên header chứa webhook id, sắp xếp sự kiện theo timestamp và chạy tác vụ nền để truy vấn lại các đối tượng vừa được cập nhật.

Trên thực tế, quy trình này có ba lớp: xác minh chữ ký, xử lý mỗi webhook id đúng một lần và chạy reconciliation theo lịch để yêu cầu Shopify trả về các đơn hàng được cập nhật kể từ lần chạy thành công gần nhất. Hai lớp đầu có thể triển khai như sau:

import base64, hashlib, hmac

def verify_shopify_webhook(raw_body: bytes, hmac_header: str, app_secret: str) -> bool:
    digest = hmac.new(app_secret.encode('utf-8'), raw_body, hashlib.sha256).digest()
    expected = base64.b64encode(digest).decode('utf-8')
    return hmac.compare_digest(expected, hmac_header)

def should_process(webhook_id: str, seen_ids: set) -> bool:
    # In production keep ids in a database table with a unique constraint.
    if webhook_id in seen_ids:
        return False
    seen_ids.add(webhook_id)
    return True

Hãy xác minh dựa trên request body nguyên bản, không phải đối tượng JSON được serialize lại, nếu không chữ ký sẽ không khớp. Reconciliation là yếu tố biến một quy trình đồng bộ chỉ hoạt động tốt trong bản demo thành hệ thống có thể vượt qua cả một cuối tuần bị thất lạc sự kiện.

Đồng bộ tồn kho: nguyên nhân bán vượt số lượng

Tình trạng bán vượt tồn kho hiếm khi bắt nguồn từ một quy trình đồng bộ bị hỏng. Nguyên nhân thường là đẩy sai con số. Odoo phân biệt tồn kho thực tế với lượng hàng đã được giữ cho các đơn khác, vì vậy số lượng bạn công bố trên Shopify nên là lượng thực sự có thể bán, trừ đi một mức đệm an toàn nếu tốc độ xử lý đơn của bạn chậm.

  • Mapping địa điểm một cách rõ ràng. Mỗi kho hoặc địa điểm tồn kho trong Odoo có bán hàng trực tuyến cần được ánh xạ tới một địa điểm trên Shopify. Các địa điểm không được mapping sẽ âm thầm bị loại khỏi số lượng có thể bán.
  • Ưu tiên số lượng tuyệt đối thay vì delta. Đẩy toàn bộ số lượng có thể bán giúp tự khắc phục sau khi bỏ lỡ một sự kiện. Chỉ đẩy phần chênh lệch sẽ khiến dữ liệu lệch vĩnh viễn khi một lần cập nhật bị thất lạc.
  • Kích hoạt theo biến động kho, không chỉ theo bộ hẹn giờ. Hãy cập nhật khi một giao dịch kho được xác nhận, sau đó để tác vụ định kỳ sửa mọi sai lệch.
  • Xử lý tình huống tranh chấp thời điểm. Một đơn hàng có thể phát sinh giữa lúc bạn đọc tồn kho và lúc ghi số lượng mới. Một mức đệm nhỏ cho các sản phẩm bán nhanh luôn ít tốn kém hơn một đơn hàng bị hủy.

Đơn hàng, thuế, thanh toán và hoàn tiền trong Odoo

Nhập một đơn hàng thành sales order khá đơn giản. Khiến đơn hàng đó đối soát được trong kế toán mới là nơi tích hợp tạo ra giá trị thực sự.

  • Phí giao hàng và giảm giá cần có sản phẩm hoặc dòng riêng trong Odoo, nếu không tổng tiền trên hóa đơn sẽ không khớp với số tiền khách đã trả.
  • Thuế nên được mapping tới các bản ghi thuế và fiscal position trong Odoo theo từng điểm đến, thay vì tính lại độc lập. Hai hệ thống cùng tính thuế riêng sẽ tạo ra chênh lệch dù chỉ vài đồng, và kế toán sẽ nhận ra.
  • Khoản chi trả từ cổng thanh toán thường được gửi theo lô và đã trừ phí. Hãy đối soát theo khoản chi trả, không đối soát riêng từng đơn hàng.
  • Hoàn tiền nên tạo phiếu ghi có và có quyết định rõ ràng về việc nhập lại kho, vì hoàn tiền không phải lúc nào cũng có nghĩa sản phẩm đã được trả về.
  • Chỉnh sửa đơn hàng sau khi nhập (thay đổi địa chỉ, hủy đơn, thêm sản phẩm) cần có quy tắc cụ thể: cập nhật đơn hàng trong Odoo cho đến khi đơn được giao, sau đó yêu cầu điều chỉnh thủ công.
  • Giao hàng từng phần trong Odoo sẽ tạo ra nhiều lần giao, và mỗi lần cần đẩy mã vận đơn riêng lên Shopify.

Mapping SKU và biến thể

Biến thể trên Shopify tương ứng với biến thể sản phẩm trong Odoo, còn SKU, thường đi kèm mã vạch, là khóa liên kết giữa hai hệ thống. Nếu SKU ở phía Shopify bị bỏ trống hoặc trùng nhau, không có tích hợp nào có thể ghép bản ghi một cách đáng tin cậy. Hãy làm sạch SKU trước lần đồng bộ đầu tiên, không phải sau đó. Với combo và kit, cần quyết định ngay từ đầu: bán chúng như một sản phẩm Shopify duy nhất rồi tách thành các thành phần trong Odoo, hoặc quản lý chúng như một sản phẩm kit. Bổ sung cách xử lý này về sau đồng nghĩa với việc phải làm lại các đơn hàng lịch sử.

Câu hỏi nên đặt ra cho nhà cung cấp tích hợp Odoo Shopify

  • Hệ thống nào sở hữu từng trường dữ liệu, và quy định đó được ghi lại ở đâu?
  • Điều gì xảy ra khi webhook bị bỏ lỡ, bị trùng hoặc đến không đúng thứ tự?
  • Việc nhập danh mục sản phẩm và lịch sử đơn hàng ban đầu được điều tiết thế nào theo giới hạn của Shopify?
  • Thuế, phí giao hàng, giảm giá và khoản chi trả từ cổng thanh toán được mapping vào kế toán ra sao?
  • Hoàn tiền, hủy đơn và giao hàng từng phần được đồng bộ ngược như thế nào?
  • Ai nhìn thấy lỗi? Có hàng đợi lỗi hiển thị rõ ràng kèm chức năng thử lại hay chỉ có log?
  • Giải pháp có chạy được trên edition và môi trường hosting Odoo của bạn không, và ai sẽ bảo trì sau khi nâng cấp Odoo?

Nhà cung cấp trả lời cụ thể được những câu hỏi này thường là đơn vị đã từng triển khai thực tế. Đơn vị chỉ trả lời bằng một danh sách tính năng thì chưa chắc đã có kinh nghiệm tương ứng.

Những yếu tố quyết định phạm vi và thời gian triển khai

Chi phí và thời gian phụ thuộc vào các trường hợp ngoại lệ nhiều hơn số lượng trường dữ liệu. Theo mức độ ảnh hưởng tương đối, các yếu tố chính gồm: nhiều cửa hàng hoặc địa điểm tồn kho, sản phẩm combo và sản phẩm làm theo đơn, giá B2B, quy tắc thuế hoặc lập hóa đơn tùy chỉnh, dữ liệu lịch sử cần di chuyển, cùng phiên bản và môi trường hosting Odoo của bạn. Chi phí được báo theo phạm vi, vì vậy hãy mô tả các trường hợp ngoại lệ thay vì yêu cầu một mức giá cố định.

Nếu muốn đánh giá quy trình riêng, hãy cho chúng tôi biết về cấu hình Shopify và Odoo của bạn để chúng tôi xác định phạm vi đồng bộ phù hợp.

CÂU HỎI THƯỜNG GẶP

Câu hỏi thường gặp

Dịch vụ tích hợp Odoo Shopify bao gồm những gì?

Dịch vụ này kết nối Shopify và Odoo để đơn hàng, khách hàng, tồn kho, giao hàng và hoàn tiền được chuyển tự động. Một dịch vụ bài bản cũng xác định hệ thống sở hữu từng trường dữ liệu, xử lý webhook bị bỏ lỡ hoặc bị trùng, đồng thời mapping thuế, phí giao hàng và khoản chi trả vào kế toán Odoo.

Nên dùng connector Odoo Shopify có sẵn hay tích hợp tùy chỉnh?

Hãy dùng connector dựng sẵn nếu bạn có một cửa hàng, một kho và thuế tiêu chuẩn, đồng thời connector hỗ trợ edition và phiên bản Odoo của bạn. Nên chọn giải pháp tùy chỉnh khi có nhiều cửa hàng hoặc địa điểm, sản phẩm combo, giá B2B, quy tắc thuế riêng hoặc lượng đơn lớn.

Nên để Odoo hay Shopify quản lý tồn kho?

Trong phần lớn trường hợp là Odoo. Odoo nắm thông tin về hàng đã giữ chỗ, kho và hàng nhập về. Hãy công bố trên Shopify số lượng có thể bán, tốt nhất dưới dạng số tuyệt đối kèm một mức đệm an toàn tùy chọn, để lần đẩy tiếp theo có thể tự sửa sai nếu bỏ lỡ một lần cập nhật.

Webhook Shopify có đủ đáng tin cậy để đồng bộ đơn hàng sang Odoo không?

Không nếu chỉ sử dụng webhook. Tài liệu Shopify cho biết việc gửi webhook không được đảm bảo, sự kiện có thể đến không đúng thứ tự hoặc bị gửi hai lần. Hãy xác minh chữ ký, xử lý mỗi webhook id đúng một lần và chạy tác vụ theo lịch để lấy lại các đơn hàng vừa được cập nhật.

Tích hợp Odoo Shopify mới nên dùng REST hay GraphQL Admin API?

GraphQL. Shopify liệt kê REST Admin API là legacy, còn GraphQL cung cấp các giới hạn dựa trên chi phí theo từng gói để bạn thiết kế phù hợp. Mỗi truy vấn bị giới hạn ở 1.000 điểm, vì vậy các request lớn cần được chia nhỏ.

Cập nhật cùng Netalith

Nhận kiến thức công nghệ, cập nhật sản phẩm và ưu đãi đặc biệt qua email.