odoo与小红书对接笔记

由于业务需要,公司内部的ERP系统需要与小红书对接,介于odoo当前的市场覆盖率,apps store里自然是没有与此相关的现成模块可用了,既然没有现成的轮子可用,那么就只能自己造轮子了。

小红书接口

小红书的接口大部分都可以从小红书大学的开放平台上找到。这里我们主要的目的是将小红书的订单同步到我们本地的ERP系统中。

产品的匹配

小红书有自己的一套SKU编码,要与本地的ERP做映射关系,这样才能保证产品同步的一致性。这里我们使用了包装,跟ERP中的SKU做了一对一的映射。

小红书的物流模式

小红书支持多种物流模式,其中第三方保税模式是无法从系统中读取到订单状态的,只能利用小红书的回调接口将订单变化时推送到我们的系统中。所幸的是,我们目前的业务使用的一种是直邮,一种是小红书的保税仓(即RED STANDARD模式)。

用户信息

小红书对用户的隐私设置比较严格,只能获取到未发货的订单的用户信息,一旦订单发货,用户信息就变成了脱敏信息。

订单处理

小红书提供了两个与订单相关的接口,一个是批量查询接口,一个是查询某个订单的详细信息。因此我们的同步策略可以设置为先用批量查询接口同步批量订单信息,然后根据不同的订单状态筛选,针对那些没有完成的订单,定时轮询。

一旦订单有了发货时间,就将Odoo中的销售订单设置为确认状态,等订单完成,再自动将与之相关的出库单完成。

编码思路

小红书是一个平台,我们的店是其中的店铺,与接口相关的设置与店铺绑定,因此我们需要先创建店铺这个对象:

1
2
3
4
5
6
7
class account(models.Model):
_name = "xiaohongshu.account"

name = fields.Char("店铺名称")
app_key = fields.Char("APP KEY", help="OPENAPI的key")
app_secret = fields.Char("APP SECRET", help="OPENAPI的密钥")
...

appkey和appsecret是调用小红书开放平台的key和密钥。

然后我们使用odoo的定时任务,自动执行同步订单的操作:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@api.model
def _get_orders(self):
"""
获取小红书的订单
"""
shops = self.search([])
for shop in shops:
_logger.info(f"同步小红书店铺:{shop.name}的订单..")
ark = ARK(shop.app_key, shop.app_secret)
# 先同步待配货和配货中的订单
# self._get_order_info(ark)
# 再同步已发货的订单
self._get_order_info(ark, status="shipped")
# 已接收的订单
self._get_order_info(ark, status="received")

为了与店铺的库位绑定,我们需要在店铺上指定销售的出库路线。

你的支持我的动力