电商系列 - 以二维码、海报等来讲讲分享的设计

84 阅读7分钟

《电商系列》文章是本人做电商平台的思考与设计的总结,里面包含之前做电商平台遇到的问题、解决思路、设计、重构等方面的经验,也有一些设计上的技巧,希望能帮到新入手的小伙伴。

一、背景

在做电商平台时,相信都离不开各种推广,通过分享二维码、分享海报、商品链接、店铺链接等方式,来进行线上,或者线下的推广。线上诸如朋友圈、软文、广告、群组等方式、线下诸如店铺海报、地推海报、贴二维码等方式。

从这些推广方式来看,要么通过扫二维码打开链接,要么直接打开链接到推广的版面上,好像没有什么好设计的,无非就是将当前的网页/H5/App动作协议,生成对应的二维码/链接,不就结束了吗?是的,刚开始做商城时,我们也是按照这个原则来做,起初就分享个链接/活动版面链接好像也没什么问题,但随着运营部门的各种推广需求与日俱增,开始遇到挺多问题。

最明显的一个问题是,当初要进行线下推广,由于运营人员的疏忽,导致生成的二维码的链接是错误,但当时已经打印了几千张二维码了,也已经分发到不同的市场人员手上,线上也分享了,这样通过改正在打印二维码又不现实,当初只能是去互调二个活动了。

面对当初的情况,总结的问题有:

  1. 分享的内容分散(难以维护管理)
  2. 生成分享的逻辑代码分散(难以维护及调整)
  3. 分享信息与购买信息无关系(难以评估某个分享业务的效益情况)
  4. 缺少分享信息的采集
  5. 产生订单,难以根据分享信息来计算(无法细化到某些渠道)
  6. 难以提供效益的评估

二、想达到的目标是什么


既然有这些问题,又为了能满足运营的快速推广与发展,通过考虑,当时想达到的目标主要有:

  1. 实现分享信息的统一管理与维护。
  2. 为每一种类型分享分配一个唯一编号。
  3. 在产生的分享链接或二维码中,带上唯一编号。
  4. 记录产生分享链接或二维码那一刻的信息(分享连接上不带具体的业务信息)
  5. 在下单的入口,加入记录订单来源信息(包括分享链接,唯一码等信息)

三、分享服务的设计

3.1 服务交互设计

在电商平台中,有用户端(APP,小程序,PC端,公众号等)、运营端、商家端,而在后台,是采用微服务的架构来划分服务及组装信息,通过初步讨论,规划的流转图如下:

上图大概画出了主要的服务之间的交互逻辑,那具体的过程是如何进行的呢?

3.2 分享信息配置过程 

  1. 根据需求方获取分享信息,包括分享logo,标题,描述,链接等。 
  2. (新增)在【运营管理系统】中的【分享信息管理】中,注册一个分享事件。
  3. (新增) 绑定一条计算收益【科目】(后续计算收益用)。 
  4. (新增)注册成功后,获取分享事件唯一码(后续接口使用)。
  5. (修改) 找到修改的分享信息,对分享内容进行修改,然后保存。

3.3 分享信息生成过程 

  1. (前端)调用【统一分享信息生成接口】,传入【分享事件唯一码】,及业务参数。 
  2. (后端)根据传入的信息处理 - 根据【分享事件唯一码】,找到分享信息。 
  3. 判断is_enable状态,如果禁用,则返回失效。 - 组装分享信息,生成【分享记录唯一码】,并赋到链接上或返回给调用方。 
  4. 记录分享信息到表上(分享记录表) - 记录分享的参数(绑定分享日志表记录id) 
  5. 返回分享信息给到调用方(组装)

3.4  打开分享链接 

  1. 前端获取链接上的【分享记录唯一码】。 
  2. 传递【分享记录唯一码】到后端。 
  3. 后端根据【分享记录唯一码】查找到分享信息绑定的业务参数。 
  4. 判断is_enable状态,如果禁用,则返回失效。 
  5. 根据业务参数获取展示的内容,并组装好。 
  6. 返回组装后的内容给到前端。

3.5 预下单及下单过程 

  1.  调用方必须传递【分享记录唯一码】。 
  2. 【预下单】必须在日志上输出【分享记录唯一码】。
  3.  【预下单】返回一个【预下单号】给到接口调用方。 
  4. 【下单】必须记录【分享记录唯一码】,【预下单号】及下单参数到一个日志表上【订单数据生成成功后】。 
  5. 【下单】可以通过广播的方式,来通知下游服务去处理分享的信息(可选)需带上【预下单号】。

3.6 下游业务处理(比如计算分享提成) 

  1. 下游业务接收订单广播。 
  2. 根据自己的实际业务对内容进行过滤处理。 
  3. 提取【预下单号】,到下单事件记录表上,查找相应的下单参数。 
  4. 如果需要处理分享的业务,可以根据【分享记录唯一码】到【分享记录表】上查找分享当时的配置信息及业务信息。 
  5.  判断【分享信息配置】上的is_enable状态,如果禁用,则返回失效。 
  6. 如果是计算收益,获取分享信息表上的【收益科目id】。 
  7. 若为空,则不计算。 
  8. 若不为空,则到收益科目表查找收益等计算信息(可能是多个表,一个基本信息,一个规则等)。 
  9. 可能还需要根据【分享唯一码】,查找不同的关系表(这里是否有其他优化思路?)。

四、数据存储模型

4.1 分享信息配置表(share_info_conf) 

  •  id : bigint: 主键
  •  share_code : char(8) : 分享唯一码(采用数字字母组成,不重复) 
  •  share_title :varchar(255) : 分享标题 
  •  share_logo : varchar(255) : 分享logo 
  • share_desc : varchar(255) : 分享内容描述 
  • share_type : char(2) : 分享类型(00-店铺,01-商品,等) 
  • jump_type : char(2) : 跳转方式 
  •  jump_info : varchar(255) : 跳转的格式(链接),挖空参数 
  • remarks : varchar(255) : 备注 
  • is_enable : int : 状态(0-禁用,1-可用) 
  •  earning_subject_id : bigint: 收益科目id 
  •  created_time, creator, revised_time, reviser

4.2 分享参数配置表(share_param_conf) 

  •  id : bigint: 主键 
  • share_id : bigint: 分享配置id(关联share_info_conf表) 
  • param_key : varchar(64) : 参数名 
  •  param_value : varchar(255) : 参数值 
  • remarks : varchar(255) : 备注 
  • is_enable : char(1) : 状态 
  • created_time, creator, revised_time, reviser

4.3 分享记录表(shared_log_info) 

  •  id : bigint: 主键
  • share_id : bigint : 分享配置id(关联share_info_conf表) 
  • shared_code : char(10) : 分享记录唯一码(采用数字字母组成,不重复)
  •  share_link : varchar(255) : 分享链接 
  •  shop_id : char(32) : 店铺id - commodity_id char(32) : 商品id 
  • client_type : int : 客户端(ClientTypeEnum) 
  • creator : char(32) : 创建人id 
  • created_time : datetime : 创建时间 
  •  reviser : char(32) : 修改人id 
  • revised_time : timestamp : 修改时间

4.4 分享记录参数表(shared_log_param) 

  •  id : bigint : 主键
  •  shared_id : bigint : 分享配置id(关联shared_log_info表) 
  • param_key : varchar(64) : 参数名 
  •  param_value : varchar(255) : 参数值 
  •  remarks : varchar(255) : 备注 
  •  is_enable : char(1) : 状态 
  •  created_time, creator, revised_time, reviser

4.5 下单信息记录表(order_submit_log) 

  •  id : bigint : 主键
  • shared_code : char(10) : 分享记录唯一码 
  •  pre_order_id : bigint: 预下单id 
  • order_code : bigint : 父订单id 
  • refer_link : varchar(255) : 关联页面链接(如果是app,则是apple/android) 
  •  param : text : 下单参数json串 
  •  ip : varchar(128) : 下单ip 
  •  client_type : int : 客户端类型(ClientTypeEnum) 
  • version : int : 版本号 
  • created_time, creator, revised_time, reviser

五、总结

按照上面的设计,完成了分享服务的开发及上线,上线后,确实能达到当初预设的目标,通过运营后台的数据统计分析,能分析出那些分享的效益,也能分析到业务人员的推广情况。同时满足了动态调整(不会因为二维码错,而导致要重新印刷)。