最近在对接电商供应链,说说开放平台API接口

B2B电商开放平台的设计需要从以下几面去思考:

  1. 开放平台API接口的接入,主要是从功能需求的角度,设计满足业务需求的接口及对应的字段;

  2. 平台与商家之间信息的对接,对接的方法有哪些?对接过程中需要可能会遇到什么问题;

  3. 同步开关及权限的设计,处理信息自动同步和手动设置之间的矛盾。

一、开放平台API接口的设计

1. 商品

商品方面的同步,主要是考虑到:

  1. 商品的上传;

  2. 商品价格同步;

  3. 商品批号同步;

  4. 商品上下架同步。

1.1.1 商品的上传

商品上传同步的目的在于把商家需要出售的商品同步到平台,平台把商家上传的商品显示在前端页面,下单成功之后,商品明细信息跟着订单信息一起传给商家。

商品上传过程中需要处理的问题:

  • 商品上传的信息需要包含“ERP商品ID”作为该商品的唯一标识;

  • 很多平台都会存在基础商品,例如药品,食品,水果等;如果出售的标的是可以明确定义的,商家只是作为一个经销商存在的情况下,平台可以统一定义基础商品;

  • 在存在基础商品的情况下,商家的上传的商品信息需要与平台的基础商品匹配生成出售的SKU。

匹配的方法可以分为两种:

  1. 可以根据商品的条码,批准文号,规格,厂家等进行匹配,但是要求根据这些条件能完全确定这个商品和基础商品是同一个商品;

  2. 对于一些商品来说,没有确定的规格供程序完成商品的匹配的时候,需要人工介入进行判断,然后在上传的时候直接附加上“基础商品ID”,通过“基础商品ID”直接进行关联。

正常情况下,商品上传之后不能马上上架并出售,而是先要同步库存之后通过调取批量上下架接口上架或手动点击上架。

如果商品上传之后如果需要直接可以上架出售,接口必须还包含商品销售信息如:价格和库存,所以商品上传的接口必须包含默认单价和库存,其中默认单价必填,库存可以为空并默认为0(同时可以设置规则:库存为0的商品不自动上架销售而库存不为0的商品自动上架销售)。

平台不存在基础商品的时候,不提倡商品直接上架,而是需要审核,因为可能商家上传的商品是平台不允许销售的。

1.1.2 修改商品价格

商家在平台出售的商品的价格并不是固定的,对于SKU比较多的商家而言,商品的价格往往是在ERP直接进行修改,然后同步到各个第三方平台,所以价格同步是不可或缺而且对于实时性,准确性的要求比较高。

另一方面,商品的销售价格往往由于成本的因素或市场的侧重点不同,往往需要针对不同的地区,客户类型设置不同的价格,而这些设置同样往往是在ERP中设定好的,同样需要同步到平台。

商品价格同步需要处理的问题:

  1. 接口需要能满足商品需要同时修改多种类型的价格,包括默认单价,建议零售价,地区价/客户等级价的需求;

  2. 对于地区价或客户等级价,需要在平台中定义好规范的地区组或客户组,同步价格的时候,接口中存在字段“地区组”或“客户组”的ID来与平台的商品价格进行匹配。

地区组的概念:由于行政区划的单位比较多,所以不可能为每一个行政区设置一个价格,通常由于不同商品对于地区价的定义都是一样的,如在A,B两个商品在广东,广西的定价一样而不同于其他地区,那么就可以将广东和广西设置为一个地区组;商品就可以针对每个地区定义价格了

1.1.3 商品批号同步

同一个商品可能由于生产批次不同会存在不同批号的货品,尤其是对于存在有效期的商品,商品的有效期是和批号是直接挂钩的;商品的批号上传至平台之后,可以直接展示在商品详情中,客户能知道其购买商品有效期的情况,在生成订单之后可以跟着订单信息一起传至商家ERP系统中,作为商家发货的依据。

商品批号同步需要处理的问题:

  1. 接口需要传的字段主要包括批号,生产日期和有效期;

  2. 每次通过接口同步批号的时候,应当只同步正在出售的批号(可以根据库存是否为0判断),且每次全量更新,数据库里面不能存在冗余批号数据;

  3. 批号同步除了每次都全量更新之外,也可以选择每次只更新最新的或库存最大的批号。

1.1.4 商品上下架同步

商品上下架同步接口主要用来进行批量的商品下架或下架的操作,尤其是新商品刚刚上传的时候,商品处于待上架的状态,需要进行批量的上下架;此外,如需同时上下架多个商品,通过接口操作会比在界面上一个个点击的效率更高。

2. 库存

库存同步

库存同步是使用最频繁且实时性,准确性要求最高的接口;库存同步的不及时或不准确可能会造成商品负卖或客户无法下单购买。

库存同步需要处理的问题:

  1. 同步时间间隔必须尽可能短且准确;

  2. 有些ERP系统库存是和批号关联的,需要汇总求和该商品相关批号的库存。

3. 客户

商户ERP客户同步

正常来说,商户的ERP系统中保存的客户是不需要传给平台,只需要订单存在收货人,收货电话和送货地址及客户在下单时留的发票信息,即可完成发货的操作。

但对于一些特殊产品和特殊行业来说,由于商业原因或行业规则需要(如医药B2B采购要求采购商有相关资质证件),ERP系统中生成订单时需要先存在ERP客户信息,那么ERP客户编号必须先给到平台,然后与平台的客户进行匹配映射,在同步订单需要同时把ERP客户信息一起传输给ERP,商户ERP根据ERP客户信息生成新的ERP订单。

商户ERP客户同步需要处理的问题:

ERP客户同步至平台有多种方案:

  1. 平台生成订单后,商户看到订单对应的客户资料之后,基于平台的客户资料补充ERP客户编号,平台将订单信息同步至商户ERP时顺便将ERP客户编号也一起传过去,商户ERP可根据这个ERP客户编号生成ERP订单;

  2. 商户ERP预先直接将ERP中所有的客户全部同步至平台,并与平台客户做匹配,订单生成后若下单客户存在ERP客户编号,则该订单直接同步至ERP系统生成ERP订单,否则需要先在ERP系统中创建客户资料并同步至平台(ERP客户资料和平台客户可基于营业执照的统一信用代码进行匹配)。

方案1可以更好地保护商户的客户资料,保证不外泄;方案2会比较方便,需要手动操作的比较少。

4. 订单

订单方面的同步,包含以下几个方面:

  1. 查询订单列表;

  2. 同步物流信息;

  3. 同步发货信息;

  4. 同步ERP订单状态。

1.4.1 查询订单列表

该接口用于商家ERP系统请求同步平台已付款的订单,查询订单列表接口需要处理的问题:

  1. 接口需要支持根据同步状态查询订单,查询订单成功后,平台方需要将对应的订单同步状态改为“已同步”,这样可以保证每次查询的时候至查询“未同步”的订单;另外,如需查询已同步的订单也可指定对应的状态进行查询。

  2. 查询的方式需要支持按照条件查找,如:开始时间、结束时间、订单状态、同步状态等,同时也需要支持按照订单编号精确查询。

  3. 响应的数据应分为四部分:订单基本信息;订单金额信息;送货信息;发票信息;订单商品项信息。其中送货信息和发票信息一般在商户的ERP系统中已存在,但可能与平台的信息不一致所以也需要一起返回给ERP系统。

  4. 商品项信息可以包括发货的批号,客户将客户在下单时看到的批号信息传输给商户ERP,这样能很大程度减少客户退款率。

1.4.2 物流信息同步

订单在商户ERP系统发货后,需传递对应的物流信息给平台,用于展示给客户查看,物流信息同步接口需要处理的问题:

  1. 商户ERP系统中的物流商与平台方的物流商必须一一对应,才能进行物流信息的传递和展示,所以平台可以提供一份物流商编码和物流商名称给商户ERP,ERP发货时将对应的物流商编码及订单号传给平台。

  2. 物流信息同步也代表着订单肯定是已经发货了,如果不设计其他更改订单状态的接口的话,可以在ERP上传物流信息的时候,平台自动将订单将订单状态改为“已发货”。

1.4.3 发货信息同步

对于B2B电商来说,在平台产生的订单传到ERP系统的时候,可能产生以下问题:

  1. 同一个商品可能购买多个,可能由于库存的原因导致部分商品缺货,所以在发货的时候,可能会少发某种商品或某种商品的一部分数量;

  2. 商户ERP中商品由于不同批次的原因,生产日期和有效期可能会不一致,用户付款成功后,需要看到发货信息中商品批号对应的有效期的情况,所以商户ERP中需要在发货时传递相关信息到平台。

发货信息同步接口主要是在ERP系统订单出库之后,将出库的商品明细传至平台,需要传递的字段包括:ERP商品编号、发货数量、批号、生产日期、有效期。

1.4.4 同步ERP订单状态

ERP订单状态主要指订单在ERP中处理环节的各个状态,订单传至ERP系统之后,可能需要进行提单、分拣、出库、配送等环节,在客户收到货之后,物流公司也会反馈回签收信息。

ERP订单状态同步至平台后有以下两方面作用:

  1. 平台可根据ERP订单状态单独生成物流信息,展示给客户,如:ERP订单状态变为“已提单”则物流信息新增一条:订单已处理,商家拣货中。

  2.  特定的ERP订单状态可以与平台订单状态关联起来,如:ERP订单状态变为”已签收”,平台接收到该条ERP订单状态的信息之后,可以将订单状态改为“交易完成”。

二、商家信息同步至平台的渠道

按照商家的技术能力,可以为商家提供多种对接方案:

  1. 通过平台提供的API接口对ERP系统进行开发,实现和平台的对接,适用于有专业技术开发能力的商家;

  2. 平台统一开发服务系统,由平台人员实施商家ERP与平台的对接,适用于无专业的技术对接能力,有ERP系统且大批量信息不适合手工操作;

  3. 手动在平台提供的商家操作后台,通过导入excel或直接手动操作的方式,直接在平台上创建或修改信息,适用于无专业的技术对接能力,商品SKU数和订单数比较少的商家,同时也可作为技术对接的替代办法。

2.1API接口对接

商家存在技术开发能力的情况下,按照平台提供的接口调用说明文档,进行业务系统的设计与修改,通过直接请求调用API接口并获取返回数据,实现商家与平台之间的信息流通。

2.2 平台统一服务系统

主要的实现方式为:平台技术人员对商家ERP系统业务逻辑进行修改,并在商家的ERP系统上单独创建符合平台接口功能的视图,存储过程或中间表,调用平台的接口传递视图,存储过程中的信息给平台,并将平台接口的响应数据存储在中间表中。

由于不同的ERP系统的数据库结构,业务逻辑会有一定的差异,所以平台需要研究不同客户的ERP系统,进行统一的设计。

2.3 商家后台手动操作

商家后台手动操作不仅仅适用无法进行系统对接的客户,同时也是作为接口同步出故障时的临时替代办法,所以手动操作的功能需要满足系统对接的所有需求。

手动操作的功能包括:创建新商品(批量上传),商品的上下架,商品价格修改,商品库存修改,ERP客户编码上传,订单批量下载,订单状态更改等。

三、同步开关及权限的设计

由于商家的商品、客户、价格、库存、订单等信息都有手动同步和自动同步两种模式,当两种模式同时存在并进行的同时,可能会导致数据比较乱,而且不方便,如:由于库存不足,页面无法进行下单的操作。而此时商家需要进行负卖,那边这个时候需要手动修改库存,但是修改完之后,库存很快会被同步系统传过来的新库存数据给覆盖。

为了解决以上的问题,我们需要根据不同的功能模块分别做一个开关,即针对某个功能设置是否开启自动同步。如刚刚那个例子,如果此时该商品需要临时修改库存并维持一段时间(保证客户有足够的时间下单付款),可以暂时关闭库存同步服务。

此外,权限的设计可以设计得更细,即针对某个商品设置是否自动同步库存,这样的话,在关闭该商品库存同步功能的时候,不会影响其他商品库存的同步

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/195233.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GPU深度学习性能的三驾马车:Tensor Core、内存带宽与内存层次结构

编者按:近年来,深度学习应用日益广泛,其需求也在快速增长。那么,我们该如何选择合适的 GPU 来获得最优的训练和推理性能呢? 今天,我们为大家带来的这篇文章,作者的核心观点是:Tensor…

NET Core迁移前工作

前段时间迁移.NET Core做了大量的试水和评估,今天整理一下分享给大家。大致有以下几个部分: 1. .NET Core的由来 2. 为什么要迁移.NET Core 3. .NET Core3.X主要特性 4. .NET Standard和.NET Core 5. .NET Core Roadmap&版本选择 接下来&#…

Linux4.8、环境变量续

个人主页:Lei宝啊 愿所有美好如期而遇 前言 如果对环境变量没有基本的理解,那么建议先看完这篇文章:环境变量https://blog.csdn.net/m0_74824254/article/details/134661113?spm1001.2014.3001.5501 环境变量与本地变量区别 使用export设…

代码随想录算法训练营第五十三天

1143.最长公共子序列 稍微思考即可通过,但是dp状态转移方程并不明确,靠感觉写的。解答和我想的也差不多。 1035.不相交的线 就是最长公共子序列的抽象版本,解答方式一模一样,不过对于抽象问题,要能将其对应为做过的…

pyspark读取数据库性能优化

当数据量很大时,读取方式 dbtable写sql语句 dbtable和query配置不能同时存在,选一种即可。里面都可以直接写sql语句 jdbcDF spark.read.format("jdbc")\.option("driver",driver)\.option("url",url)\.option("d…

自动化测试的成本高效果差,那么自动化测试的意义在哪呢?

有人问:自动化测试的成本高效果差,那么自动化测试的意义在哪呢? 我觉得这个问题带有很强的误导性,是典型的逻辑陷阱之一。“自动化测试的成本高效果差”是真的吗?当然不是。而且我始终相信,回答问题的最…

COMP4121Advanced Algorithms

COMP4121Advanced Algorithms WeChat:yj4399_ Sina Visitor System

【Linux】 OpenSSH_9.3p1 升级到 OpenSSH_9.5p1(亲测无问题,建议收藏)

👨‍🎓博主简介 🏅云计算领域优质创作者   🏅华为云开发者社区专家博主   🏅阿里云开发者社区专家博主 💊交流社区:运维交流社区 欢迎大家的加入! 🐋 希望大家多多支…

【Java】集合 之 使用 TreeMap

TreeMap 我们已经知道,HashMap 是一种以空间换时间的映射表,它的实现原理决定了内部的Key是无序的,即遍历HashMap的Key时,其顺序是不可预测的(但每个Key都会遍历一次且仅遍历一次)。 还有一种Map&#xf…

数据结构之二叉树及面试题讲解

💕"从前种种譬如昨日死;从后种种譬如今日生"💕 作者:Mylvzi 文章主要内容:数据结构之二叉树及面试题讲解 一.概念 1.树的定义 树是一种非线性的数据结构,是由n个结点组成的一种非线性集合&…

Vue3.0 所采用的 Composition Api 与 Vue2.x 使用的 Options Api 有什么不同?

面试官:Vue3.0 所采用的 Composition Api 与 Vue2.x 使用的 Options Api 有什么不同? 开始之前 Composition API 可以说是Vue3的最大特点,那么为什么要推出Composition Api,解决了什么问题? 通常使用Vue2开发的项目&…

交流插座电器漏电断路器的低功耗控制芯片D4140,内置桥式整流器漏电灵敏度可调,采用SOP8和DIP8 的封装形式

D4140 是一种用于交流插座电器漏电断路器的低功耗控制器。这些设备可以检测到接地的危险电流路径,例如设备掉进水中。在发生有害或致命的电击之前,断路器会断开线路。内置有整流桥,齐纳管稳压器,运算放大器,电流基准&a…

论文阅读——Loss odyssey in medical image segmentation

Loss odyssey in medical image segmentation github:https://github.com/JunMa11/SegLossOdyssey 这篇文章回顾了医学图像分割中的20种不同的损失函数,旨在回答:对于医学图像分割任务,我们应该选择哪种损失函数? 首…

世岩清上:博物馆展览的叙事性设计

博物馆展览的叙事性设计是一种艺术与科学的结合,它通过将展品、灯光、布局和文本等元素进行精心策划和设计,以讲述一个引人入胜的故事,让参观者能够更深入地了解展览的主题和内容。 一、叙事性设计的关键要素 主题与目标 叙事性设计的第一步…

倾斜摄影三维模型的根节点合并的优势分析

倾斜摄影三维模型的根节点合并的优势分析 根节点合并是倾斜摄影三维模型处理中的一项重要技术,它具有许多优势,可以显著提升模型数据的处理效率和渲染性能。在本文中,我们将对倾斜摄影三维模型的根节点合并的优势进行详细分析。 1、数据大小…

1038. 从二叉搜索树到更大和树 --力扣 --JAVA

题目 给定一个二叉搜索树 root (BST),请将它的每个节点的值替换成树中大于或者等于该节点值的所有节点值之和。 提醒一下, 二叉搜索树 满足下列约束条件: 节点的左子树仅包含键 小于 节点键的节点。节点的右子树仅包含键 大于 节点键的节点。…

计算机毕业设计|基于SpringBoot+SSM+MyBatis框架的迷你仿天猫商城购物系统设计与实现

计算机毕业设计|基于SpringBootMyBatis框架的仿天猫商城购物系统设计与实现 迷你仿天猫商城是一个基于SpringBootSSMMyBatis框架的综合性B2C电商平台,需求设计主要参考天猫商城的购物流程:用户从注册开始,到完成登录,浏览商品&am…

家用小型洗衣机哪款性价比高?内衣洗衣机品牌推荐

近日,国内著名的电子商务平台公布了“内衣洗衣机产业趋势”的研究报告。该报告指出,由于消费者对生活质量的要求越来越高,内衣洗衣机的行业也有了长足的发展,特别是在今年以来,内衣洗衣机的销售额同比上涨了830%&#…

汽车音响静音检测电路芯片D3703F,6V~16V SOP8封装

D3703F 是一块汽车音响静 音检测电路。用于音 响系统检测在放音或快进/退时进行静音检测,电压范围: 6V~16V,信号检测和静音时间可通过外围电阻 、电容来改变。D3703F采用SOP8的封装形式封装 主要特点: 快进/退时也可进行静音 检测 信号检测…

BearPi Std 板从入门到放弃 - 引气入体篇(3)(上两篇前言)

GPIO调用函数 stm32l4xx_hal_gpio.h /* IO operation functions *****************************************************/ GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); // 读取GPIO状态 void HAL_GPIO_WritePin(GPIO_TypeDe…