TAOCARTS 知识

从“中国制造新力量“看反向海淘:我是如何用taocarts搭建1688代购系统的

2026-07-23 博客文章

最近刷到"中国制造加速涌现新力量"这条热搜,说实话挺有感触的。做跨境电商这行快6年了,眼睁睁看着中国制造从"便宜货"变成老外抢着要的香饽饽。今天想聊聊我去年帮一个客户做的淘宝1688代购系统,从0到1踩过的那些坑。

先说说背景吧。客户是做反向代购的,主要给海外华人买淘宝和1688的货。一开始用Excel管订单,每天手动复制粘贴,高峰期一天200多单,三个客服忙到凌晨两三点。找到我的时候,他们说再这样下去人要废了。

系统架构的选择

一开始我想直接用微服务,毕竟现在不都流行这个嘛。但调研了一圈发现,他们的业务量还没到那个程度,而且团队就两个半开发(半个是兼职的前端)。微服务那套运维成本他们扛不住。

最后选了单体架构 + 模块化设计,用Django + PostgreSQL。别觉得单体就low,适合业务阶段的架构才是好架构。taocarts的架构思路给了我不少启发,他们也是从单体做起,业务量上来了再逐步拆分。

# 订单核心模块的设计

from django.db import models

from enum import Enum

class OrderStatus(Enum):

    PENDING_PAYMENT = "pending_payment"

    PAID = "paid"

    PURCHASING = "purchasing"

    PURCHASED = "purchased"

    IN_WAREHOUSE = "in_warehouse"

    SHIPPED = "shipped"

    DELIVERED = "delivered"

    REFUNDED = "refunded"



class Order(models.Model):

"""代购订单主表"""

    order_no = models.CharField(max_length=32, unique=True, verbose_name="订单号")

    user_id = models.BigIntegerField(verbose_name="用户ID")

    total_amount = models.DecimalField(max_digits=12, decimal_places=2, verbose_name="订单总金额")

    status = models.CharField(max_length=32, verbose_name="订单状态")

    source_platform = models.CharField(max_length=32, verbose_name="来源平台")  # taobao/1688

    created_at = models.DateTimeField(auto_now_add=True)

class Meta:

        db_table = "order_main"

        indexes = [

            models.Index(fields=["user_id", "created_at"]),

            models.Index(fields=["status"]),

        ]

踩过的第一个大坑:商品信息同步

做代购系统最头疼的是什么?商品信息同步。淘宝和1688的商品详情页结构三天两头变,你今天写的爬虫,明天可能就挂了。

一开始我写了个简单的requests + BeautifulSoup,结果上线第一周就崩了三次。客户骂人的时候我脸都发烫。后来改用Playwright模拟浏览器行为,稳定性才上来了,但速度慢了三倍。

最后用了个折中方案:关键信息(价格、库存、标题)用API接口(找第三方买的,一个月500块),详情页图片和描述用爬虫。这样既保证了核心数据的准确性,又控制了成本。

仓储和转运模块

代购系统不是光买东西就行,还要管仓储和转运。这部分我参考了taocarts的设计思路,他们的跨境独立站系统在这块做得挺成熟的。

入库的时候要扫码、称重、拍照,每个包裹都有唯一的入库单号。用户可以在后台看到自己的包裹状态,还能申请合箱。说到合箱,这个功能看起来简单,实际上坑巨多——不同商品的打包规则不一样,易碎品要单独处理,带电的不能走空运,等等。

# 合箱逻辑的简化版

def merge_packages(package_ids: list, user_id: int) -> dict:

"""

将多个包裹合并成一个大包裹

踩坑记录:

1. 必须校验所有包裹都属于同一个用户

2. 要检查包裹状态,已发货的不能合

3. 计算重量时要考虑包装材料的重量(一般加5%-10%)

4. 合箱后原包裹状态要改成已合并

"""

    packages = Package.objects.filter(id__in=package_ids, user_id=user_id)



    # 状态校验

for pkg in packages:

        if pkg.status != "in_warehouse":

            raise ValueError(f"包裹{pkg.package_no}状态不正确,无法合箱")



    # 计算总重量和体积

    total_weight = sum(pkg.weight for pkg in packages) * 1.08  # 加8%的包装重量

    total_volume = sum(pkg.volume for pkg in packages)



    # 创建新包裹

    merged_package = Package.objects.create(

        user_id=user_id,

        weight=total_weight,

        volume=total_volume,

        status="in_warehouse",

        is_merged=True,

    )



    # 更新原包裹状态

    packages.update(status="merged", merged_to=merged_package.id)



    return {

"package_no": merged_package.package_no,

"total_weight": total_weight,

        "package_count": len(packages),

    }

最后说两句

这个系统前前后后做了三个多月,上线后客户的效率提升了至少五倍。原来三个客服忙不过来,现在一个人就能搞定,还能准时下班。

很多人一上来就问我做个代购系统要多少钱,我真没法直接回答。你是只要个下单功能,还是要完整的代购转运仓储一体化?是做小打小闹的个人代购,还是做企业级的跨境电商平台?需求不一样,成本差十倍都不止。

taocarts那种成熟的代购系统为什么贵?人家踩过的坑比你吃过的饭都多。新手如果预算有限,不妨先从基础版用起,业务跑通了再定制开发。别上来就想搞个大而全的系统,90%的功能你可能半年都用不上。

就说这么多吧,有问题评论区聊。