支付退款流程设计_电商订单系统,你该如何设计

5a9a4f14fdaa2c1cb9306a068ff05d25.gif

文章来自:https://baijiahao.baidu.com/s?id=1602959656926168475&wfr=spider&for=pc

作者:人人都是产品经理

点击加入:PHP自学中心技术交流微信群

商务合作: 请加微信(QQ):2230304070

精选教程推荐

技术交流微信群

我们在学习中单枪匹马,还不如一次短短的交流,你可以在别人吸取各种学习经验,学习方法以及学习技巧,所以,学习与交流少不了一个圈子,提升你的学习技能,请点击加技术群:PHP自学中心交流③群     记得备注:加群

0a83414e91b4448c7ccab75f104f2dc9.png

视频教程分享

以下视频教程的网址:http://blog.startphp.cn 

已经更改为:http://www.mano100.cn  请知悉!

1 Laravel你要从底层学起?还是掌握其核心内容便可?

2 关于PHP与消息队列,你会吗?

3 阿里云环境搭建以及项目上线还有谁不会的?

4 PHP程序员是否要学习Linux课程?

5 在CentOS7系统下如何搭建ElasticSearch

更多视频教程,请关注网站:http://www.mano100.cn

精选文章正文

一个订单系统的设计并不简单,它需要一批又一批的人去维护、去优化,根据公司的业务情况做出改变与兼容。这篇文章主要与大家分析一下电商订单系统该如何设计。在一个电商所有模块中,订单系统作为最为核心的模块,它决定了整个流程能不能顺畅的执行,起着承上启下的作用。订单系统设计订单系统时需要考虑几个模块。只有明确考虑所有模块,才能保证订单系统的稳定性和可扩展性。1. 订单字段

实际上,界面上显示的订单信息由各种订单字段组成。完成订单字段在某种程度上代表着订单流程的完整。

0b7c3ba87d1486049357edeac8a551af.png

订单字段包括几个部分,其中金额信息因为特殊性,单独来讲解,本质上,金额信息也是属于商品信息的。

商品信息:商品信息属于订单系统的上游端。所有订单都是从商品演变而来的。从商品到订单,订单系统必须收集相关的商品信息,包括商店信息,商品ID,商品规格,商品数量和商品价格。获得的商品信息将显示在订单详细信息页面上。形成订单信息后,仓库可以方便地进行拣选和打包。

用户信息:用户信息包括购买用户的ID,收货人,收货人地址和联系信息。某些平台的用户成长系统是根据平台上的用户活跃度来计算的。例如,京东(JD.com)具有类似的增长指标,例如会员级别和积分卡。此时,除了普通信息字段外,还需要获得用户信息。获取用户级别,购买后获得的积分以及用户所在等级可以从订单中扣除的折扣等,然而这些具体操作取决于公司的业务方向。

金额信息:由于金额信息的特殊性,理论上认为金额信息应该属于商品信息。金额信息的特殊性在于它不代表金额,涉及到商品的金额,折扣金额和付款金额等。折扣金额所涉及的信息更为复杂。例如,具有自营和第三方结算的电子商务平台将具有商家折扣和跨商店折扣。这些折扣分为不同的类型,例如现金扣减和消费者优惠券扣减,点数获取,礼品卡扣减或以上各项的组合。如果要很好地涉及此内容,则需要根据公司的当前业务状况列出支持的优惠类型,然后枚举各种组合下的优惠类型以确保流程的完整性。

时间信息:记录各个状态点下的时间,一是记录,二也是方便售后验证与客户分析。订单时间是根据订单状态改变而改变的。时间信息看起来不重要,其实是订单系统一个重要的组成部分,具体看以下:下单未付款:即订单创建时间、下单时间;待发货状态:订单创建时间、下单时间、支付时间;待收货状态:订单创建时间、下单时间、支付时间、发货时间;交易完成状态:订单创建时间、下单时间、支付时间、发货时间、完成时间;待退款状态:退款订单创建时间、申请退款时间;交易关闭-用户取消:订单创建时间、下单时间、用户取消时间;交易关闭-仅退款:订单创建时间、下单时间、支付时间、退款申请时间、退款成功时间;交易关闭-退货退款(包含部分仅退款):订单创建时间、下单时间、支付时间、交易完成时间、退款申请时间、退款时间。

订单信息:订单信息在订单系统是最为核心,订单信息最重要的又是订单的状态。一个电商系统中,订单状态分别有以下几种状态:【待付款】、【待发货】、【待收货】、【待评价】、【交易完成】、【用户取消】、【仅退款】、【退货退款】。而我们一般会将后三种统一放在订单售后独立呈现,方便平时商家操作的便捷性。
下面看看流程图:

bd95c807e2003553476805a5b805105a.png

2. 订单流程

订单流程是指从订单生成到完成的过程,包括前正向流程和反向流程。  

正向流程就是正常的网购的步骤:订单生成->付款订单->卖方发货->确认收货->交易成功。

而逆向流程则是各种退款退货的流程。

(1)正向流程

cff6cf5f53cc617d9f2178ffa363e6d5.png

订单生成:用户下单后,系统需要生成订单,此时需要先获取下单中涉及的商品信息,然后获取该商品所涉及到的优惠信息,如果商品不参与优惠信息,则无此环节。

接着获取该账户的会员权益(这里其实需要注意的是:优惠信息与会员权益是有区别的,就好比商品满减是优惠信息,新人立减是会员权益,一个是针对商品,另一个是针对账户)。

支付订单:用户支付完订单后,需要获取订单的支付信息,包括支付流水号、支付时间等。支付完订单接着就是等商家发货,但在发货过程中,往往还有一种情况存在,很正常却也比较复杂,就是订单拆单。

  • 订单拆单分两种:一种是用户挑选的商品来自于不同渠道(自营与商家,商家与商家),此时就需要拆分订单,并分开结算,这里还涉及父子订单的说法,这里不再赘述。

  • 另一种是在SKU层面上拆分订单:不同仓库,不同运输要求的SKU,包裹重量体积限制等因素都需要将订单拆分。比如:商品A只在甲仓库有,商品B又只在乙仓库有,此时会将商品A与商品B拆分成两个订单。或者有些企业的做法是将商品A/B调拨到另外一个仓库统一发货,也方便了用户。

订单拆单看起来简单,其实里面涉及到底层的系统支持,如你需要对每一个仓库的货品进行相对准确的盘点,且做到实时同步(涉及到仓库精细化管理),对商品进行准确分类与摆放,对商品信息记录准确无误等。

这其中哪一模块都是一个浩大的工程,PM一般进入一家公司都会在原有(半成品)的基础上进行优化,大家不妨多思考一下底层业务,只有在底层做好精细化管理,才能支持线上丰富的用户需求。

商家发货:商家发货过程也有一个标准化的流程,上面也有讲到,订单拆分时会涉及到仓库间调拨,然后仓库会对商品进行打单、拣货、包装、交接快递配送。这套标准化流程如果优化好,也是一个大工程,这里不再赘述,建议大家看看库存与仓库管理方面的书籍,详细了解。

确认收货:商家发货后,就是等快递配送了,订单系统需要接入一些常用快递企业的接口,方便用户与商家在站内查询快递信息。

交易成功:收到货后,不是一个服务的结束,相反是一个服务的开始。订单系统需要在快递被签收后提醒用户对商品做评价,这里要注意,确认收到货不代表交易成功,交易成功是指在收到货X天的状态,此时订单不在售后的支持时间范围内。到此,一个订单的正向流程就算走完了。

(2)逆向流程

aac1da12bd930e0c9fd2775d63b269e1.png

一个电商的基本逆向流程如上图所示,订单的逆向流程复杂就在于它几乎允许在正向流程的任何环节出现。有人会问:用户未收到货为什么还能退款?

其实我们换位思考,也很容易理解。假想你是用户,买了一双鞋子,付了款发了货,正在美滋滋的等待收快递,然后刚好路过一家鞋店看到刚买的同款鞋子大促销,于是你就拿起手机点击退款,买下了这双促销的鞋子。

这种场景其实是很普通也很正常的用户日常,所以我们的订单系统就必须得支持用户各种丰富的场景需求,也十分考验PM的业务渗透能力,好在电商的先行者淘宝已经做了很多基础建设和用户教育,我们直接可以拿来套用,不过还是要根据各个公司的业务情况进行修改。

取消订单:用户提交订单时,在跳转至支付前直接退出,此时用户原则上属于取消订单,因为还未付款,则比较简单,只需要将原本提交订单时扣减的库存补回即可。

支付失败:用户进行支付时退出,或者取消支付,我们将其列为支付失败状态,此时处理同上,将扣减的库存补回可销售库存即可。

付款后退款:用户支付成功后,商家还未发货,支持用户申请退款,此时如果仓库与客服是分离的,则需要先检查仓库是否已经发货,若已发货则应与客户沟通是否可以收到货后再进行退款,如果仓库还未发货,则可直接同意用户退款。或者企业接入菜鸟物流,实行截件功能,不过这种操作还不成熟,成本会比较大,不适合中小创业型公司。

缺货退款:用户支付成功后,商家发货时发现仓库缺货(如果提交订单扣减库存,则会减少缺货情况,为什么是减少而不是避免?因为仓库管理商品时没办法做到100%精准,所以信息有时候会不准确,导致线上的可销售库存显示有库存而仓库已经售空的状态),则需要与用户协商是否退款。

这个流程订单系统可以做到流程化、自动化,连接消息中心和仓库管理系统去实现,难点在于消息的实时性。我就遇到过在淘宝买过一件上衣,一天过去了,商家跟我说没货了,我当时杀人的心都有了。

待收货退款:这个问题目前还没有特别完美的解决方法,商家发了货之后,用户还未收到货,此时货在路上。大体上分为两种做法:一种是用户收到货后重新寄回;另一种是用户直接拒收包裹,包裹直接退回原地址。

退货退款:用户收到货后,想要申请售后,则此时需要提供让用户输入售后原因,包括上传凭证的功能,如果与商家协商无果,还需要增加平台客服的入口,方便用户进行申诉。而协商结果/申诉成功后直接触发自动退款机制,退款后触发消息通知,同时触发交易关闭状态,整个售后过程才算结束。

系统的学习PHP

关注本公众号:PHP自学中心,回复相应的关键词,领取以下视频教程

0 全流程开发 TP6.0实战高并发电商服务系统

链接:https://docs.qq.com/doc/DV2J5WWpoRnlYYXhB

1 产品经理高清实战

公众号里回复:07212019

2 设计模式实例剖析与深入解读

公众号里回复:20190714

3 Git&GitHub视频教程

公众号里回复:gitnnnx

4 尚硅谷Redis

公众号里回复:0713ksy1

5 SQL 注入及如何防止

公众号里回复:20190712

以上是本文的全部内容,希望对大家的学习有帮助,也希望大家多多支持 php自学中心 

35eed07e5436d300d41ff6bc888545c9.png

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

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

相关文章

Java 对象之死

如何判断对象“无用”? 关于判断对象是否无用的算法,在JVM的发展过程中出现过两种算法:一种是引用计数和根集算法。 引用计数算法 例如下图中的object1的引用计数是2,GC的时候不回收,object6、object7引用计数为0&a…

python计算函数运行时间表_python计算一段代码的运行时间(类和函数)

使用python的timeit模块可以轻松的获得一段代码的运行时间。 一、获得一个类的运行时间:import timeit as ti gettime """ import time as t class MyTime: def __init__(self, go_time 0): self.go_time go_time if self.go_time 0: print(&quo…

图解Java常用数据结构

最近在整理数据结构方面的知识, 系统化看了下Java中常用数据结构, 突发奇想用动画来绘制数据流转过程. 主要基于jdk8, 可能会有些特性与jdk7之前不相同, 例如LinkedList LinkedHashMap中的双向列表不再是回环的. HashMap中的单链表是尾插, 而不是头插入等等, 后文不再赘叙这些…

python中怎么计算_python中的加减乘除运算

python中的加减乘除运算,是学习python入门的基础,是以后进行数学计算的关键部分。包括运算表达式的写法,运算规则,加减乘除,求余,求商等等。 工具/原料 python 电脑 方法/步骤 1 1.python中的加法运算&…

c++ 模拟拖动_2020电工(中级)模拟考试题及电工(中级)模拟考试题库

题库来源:安全生产模拟考试一点通公众号小程序2020电工(中级)模拟考试题及电工(中级)模拟考试题库,包含电工(中级)模拟考试题答案解析及电工(中级)模拟考试题库练习。由安全生产模拟考试一点通公众号结合国家电工(中级)考试最新大纲及电工(中级)考试真题…

12层的bert参数量_只需一个损失函数、一个超参数即可压缩BERT,MSRA提出模型压缩新方法...

来自武汉大学、北京航空航天大学和微软亚洲研究院的这项研究为模型压缩提供了新方向。机器之心报道,参与:魔王。论文链接:https://arxiv.org/pdf/2002.02925.pdf这篇论文提出了一种新型模型压缩方法,能够通过逐步模块替换&#xf…

常用的Java快捷键有哪些

不知道Java常用的快捷键在工作的时候是非常的耽误时间的,本篇文章小编就为大家稍微整理了一些常用的Java快捷键分享给大家。 Ctrl1或F2快速修复 CtrlD快捷删除行 ShiftEnter 快速切换到下一行,在本行的任何位置都可 CtrlF11快速运行代码 Alt上下键 快速移…

bootstrap文件不能被识别_如何使用npm安装bootstrap

经过我好多次的查询和实验,总结了一下在vue项目中使用bootstrap框架,npm安装注意。bootstrap中js插件依赖于jquery,所以在这之前必须安装jquery。jquery安装1、在package.json中添加一行代码:“jquery”: “^2.2.3”"depende…

hm编码工具使用_HM集团旗下最高端品牌ARKET将进驻中国,带你看看真正的“北欧风”...

HM集团旗下最高端的品牌ARKET近日开通了微博,并宣布将在秋季进驻天猫。听到这个消息,钟爱ARKET且一直私心将它当成小众品牌好好藏着的人可能会欢呼——终于不用等待漫长的海购了!但也有相当一部分朋友一脸问号——ARKET?是啥&…

Java8特性解决空指针问题

在文章的开头,先说下NPE问题,NPE问题就是,我们在开发中经常碰到的NullPointerException.假设我们有两个类,他们的UML类图如下图所示: 在这种情况下,有如下代码 这种写法,在user为null时&#x…

模拟进程创建、终止、阻塞、唤醒原语_操作系统第二章--进程的描述与控制

操作系统第二章--进程的描述与控制前趋图和程序执行前趋图前趋图是一个有向无循环图DAG,用来描述进程之间执行的前后关系初始结点:没有前趋的结点终止结点:没有后继的结点重量:表示该结点所含有的程序量或结点的执行时间程序执行顺…

python变量声明语句_python – 在条件语句中声明变量有问题吗?

在条件的所有可能分支中重新定义变量之前,它是否可以防止定义变量?比如应该这个代码:# Condition could failtry:textureIndices someExpression()# textureIndices is defined here if it doesexcept:textureIndices []return textureIndices重写为&a…

Java单例模式的七种写法

第一种(懒汉,线程不安全): public class Singleton { private static Singleton instance; private Singleton (){} public static Singleton getInstance() { if (instance null) { instance new Singleton(); } retur…

css3正方体选中父层 子层解体_CSS3 :nth-child(n)选择器 匹配属于其父元素的第N个子元素...

定义和用法:nth-child(n) 选择器匹配属于其父元素的第 N 个子元素,不论元素的类型。n 可以是数字、关键词或公式。先看下面一段代码:第一行第二行第三行第四行第五行如果我们想单独给某一行添加特殊的样式代码,在不使用nth-child的情况下&…

对没有标记为安全的activex控件进行初始化和脚本运行_RASP攻防 —— RASP安全应用与局限性浅析...

文|【腾讯安全平台部数据安全团队】 qiye & baz 前言随着Web应用攻击手段变得复杂,基于请求特征的防护手段,已经不能满足企业安全防护需求。在2012年的时候,Gartner引入了“Runtime application self-protection”一词&#x…

java中堆和栈有什么区别?

堆和栈都是Java用来在RAM中存放数据的地方。 一、堆 (1)Java的堆是一个运行时数据区,类的对象从堆中分配空间。这些对象通过new等指令建立,通过垃圾回收器来销毁。 (2)堆的优势是可以动态地分配内存空间,需要多少内存空间不必事先告诉编译…

cass坡度土方计算案例_【九天教您南方cass 9.1】 12 道路断面土方计算

同学们大家好,欢迎收看由老王测量上班记出品的cass9.1视频课程我是本节课主讲老师九天。我们讲课的教程附件也是共享的,请注意索取 在测量空间中。【点击索取cass教程】5元立得 (给客服说暗号:“老王测量上班记”) 即可5元获得教程全系列&…

台式机dp接口_精品导购:你想要的商务台式机 都在这里了!

不少公司都会为员工配备办公电脑,而公司在采购这些电脑时,兴许可能对电脑性能、存储容量等都没有研究过,只是图了价格便宜便批量采购,这就导致电脑在使用一段时间后,会频繁出现死机、运行卡顿和硬盘容量不够等情况的发…

roc曲线怎么绘制_ROC曲线和PR曲线

在机器学习中,ROC曲线被广泛应用于二分类问题中来评估分类器的可信度,当处理一些高度不均衡的数据集时,PR曲线能表现出更多的信息。在二分类问题中,分类器将一个实例的分类标记为正例还是负例,这可以用一个混淆矩阵来表…

火狐受信任站点设置_火狐浏览器怎么添加信任站点,谷歌浏览器设置信任站点...

我们总是喜欢在win7系统中使用浏览器来浏览一些网页,有时候需要添加信任网址,防止每次打开的时候都会跳出提示,而有的网页需要添加受限制,防止浏览网页弹出某些广告网站,可是最近有win7专业版系统用户却发现在添加信任…