独立开发者系列(12)——下单与支付

做业务有个绕不开的业务逻辑,就是支付。这里总结一个基础的支付电商逻辑闭环流程,完成支付基础体系的实现。这里假定我们要实现的是一个独立的电商平台上允许用户在平台充值,其他的类似多多购物或者淘宝购物的流程逻辑。

数据表结构的逻辑设计。这里复盘一个开发的产品订单系统。

   数据逻辑上,首先我们需要有个基础的商品表(一般包括商品id+名字+描述+所属店铺+各种关联图片)其他的一些自定义属性(是否允许参团  是否推荐购买,排序,标签之类的,是否允许上架)。这是商品的基础表。Product数据表

   然后围绕基础表,品类表是关联商品表的,我们需要设置对应的品类价格,品类的标题,品类的描述,主要设置允许售出数量,不同的品类数量是不同的,包括是否卖光,,品类的排序,品类的详细图片(和产品本身图片不同,这个是每个套餐的产品图片)。Package数据表

在一般情况下,商品表+品类表,已经可以确定用户购买的商品,但是如果商品规格是随着基础属性不断变化增加的,我们还需要属性商品属性表。属性分类1级属性(大类) 2级属性(归属1级属性),属性的附加价格,每次用户勾选其中一个属性,都会导致价格变动,每个大类属性下面只能勾选一个小类。ProductAttr数据表。

通过三张表,可以实现商品展示+商品套餐+商品额外属性价格叠加的商品购买效果。

订单逻辑的梳理:
参数过滤第一步。有必填空参数,直接跳出。
    首先检查商品或者商品套餐是否已经下架(下架就无法再次下单了),

第二,检查商品的库存是否超标了,超标就无法再下单

第三检查用户是否有权限购买,需要调用权限相关的逻辑身份检测,主要防止一些优惠订单被反复购买,可能限定了购买一次又或者用户是黑名单。

第四,计算商品的价格,其中还涉及到商品的优惠券核销计算,所以其实订单里面需要原始价格,优惠券价格,最终支付价格三个信息。

第五 将订单信息记录到订单系统表,完成下单逻辑

第六:将用户的该优惠券设置为使用状态。如果有其他逻辑,也一并处理,比如用户设置为店铺关注的客户,或者标记为活跃客户。
    第七,下单成功之后,将订单号返回出去。

小结下流程——产品

此处逻辑,完成了订单的生成逻辑。下一步就开始走支付逻辑。前端拿到订单号之后,跳入各大支付平台的支付接口处。
   向服务器端发送订单号+身份认证token+支付方式的选择。如果选择余额支付,由于不涉及到外部支付系统,直接查询当前该用户是否有足够余额,付款完成的同时,将订单也一起完成。基本订单类型的都需要事物逻辑,关于事物,后面专门拓展。
   查询订单,主要是查询未支付的订单,超时/取消/或者并发类的订单直接拦截掉。

根据我们自己的订单号,生成相关参数,按照指定格式生成其他平台的支付格式(如果是WX 则会生成微信格式, ZFB生成zfb格式,苹果生成苹果支付格式)

付款完成后,支付成功方会向我们的回调。回调的本质是服务器端根据它运行的结果调用我们预先写好的API。

至此,我们完成了我们支付项目的第二部分逻辑,主要是唤醒第三方的支付,并让我们在支付平台的账号收到对应款项,然后收到款项之后,向我们的服务器发送已收到款的信息。

回调逻辑:

根据我们自己发给服务器的本地交易号,查询到对应的订单,然后将第三方的交易流水号还有交易信息在本地进行更改。同时将订单的状态变更成已收到款,收到款项后,就是走我们后续的发货逻辑或者店铺里面核销逻辑。

  回调的第三方一般传回的参数除了本地发过去的订单号(本地的唯一性),还会传token  交易订单号。
 这样就完成了一个下单——发起支付——完成支付的整个流程,基本上电商的最重要的逻辑就是收款,收不到款,其他的都是白干。所以要做独立开发,必须对支付业务流程有清晰的认识。

将整个流程整理成一张图:

  • 业务的下单逻辑
    • 产品是否还在
    • 产品是否超过库存
    • 购买权限检测
    • 价格系列核算
    • 完成下单逻辑
    • 扣除商品库存/优惠券锁定/状态标志
    • 返回订单号,给其他逻辑调用
  • 发起支付逻辑
    • 检查下单时候订单号信息
    • 检查该订单是否允许继续支付
      • 是否超时需要关闭
      • 商品是否已经不允许下单
      • 系统已经锁定不再支持支付
    • 调用第三方支付模块生成支付跳转
      • 配置回调链接
      • 配置发起模式
    • 等待客户端完成支付
      • 这一步基本都是第三方SDK完成
  • 支付成功后回调
    • 校验回调拿到的信息
    • 更改订单状态变更为完成支付
    • 处理完成支付后的逻辑(发货\核销之类操作)

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

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

相关文章

使用uniapp编写微信小程序

使用uniapp编写微信小程序 文章目录 使用uniapp编写微信小程序前言一、项目搭建1.1 创建项目方式1.1.1 HBuilderX工具创建1.1.2 命令行下载1.1.3 直接Gitee下载 1.2 项目文件解构1.2.1 安装依赖1.2.2 项目启动1.2.3 文件结构释义 1.2 引入uni-ui介绍 二、拓展2.1 uni-app使用uc…

【高考】人生规划指南

作为一个正处在这个选择的十字路口的高考考生,我认为在选择专业和学校时,要根据自己的具体情况和个人目标来权衡。首先,我认为专业是首要考虑因素。因为专业是直接决定未来职业发展方向的,如果不喜欢或者不适合的专业选择&#xf…

数字时代的文化革命:Facebook的社会影响

随着数字技术的飞速发展和互联网的普及,社交网络如今已成为人们日常生活中不可或缺的一部分。在众多社交平台中,Facebook作为最大的社交网络之一,不仅连接了全球数十亿用户,更深刻影响了人们的社会互动方式、文化认同和信息传播模…

前端面试题(基础篇十二)

一、link标签定义、与import的区别 link 标签定义文档与外部资源的关系。 link 元素是空元素,它仅包含属性。 此元素只能存在于 head 部分,不过它可出现任意数。 link 标签中的 rel 属性定义了当前文档与被链接文档之间的关系。常见的 stylesheet 指的是…

Python酷库之旅-第三方库openpyxl(15)

目录 一、 openpyxl库的由来 1、背景 2、起源 3、发展 4、特点 4-1、支持.xlsx格式 4-2、读写Excel文件 4-3、操作单元格 4-4、创建和修改工作表 4-5、样式设置 4-6、图表和公式 4-7、支持数字和日期格式 二、openpyxl库的优缺点 1、优点 1-1、支持现代Excel格式…

pdf已加密如何解除?解密密码的两个方法【可加密】

电脑文件加密的目的就是保护重要信息,防止数据泄露。如果需要解除密码,应该如何操作呢?pdf已加密如何解除?本文整理了以下两种解除文件方法,希望能够帮到有需要的朋友们! 方法一、使用金舟文件夹加密大师解…

vue3+vite+nodejs,通过接口的形式请求后端打包(可打包全部或指定打包组件)

项目地址https://gitee.com/sybb011016/test_build 打包通过按钮的形式请求接口,让后端进行打包,后端使用express-generator搭建模版。前端项目就在npm init vuelatest基础上添加了路由 如果只想打包AboutView组件,首先修改后端接口。 //打…

Open3D (C++) 点云旋转至主成分空间

目录 一、算法原理二、代码实现三、结果展示本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫与GPT。 一、算法原理 首先使用主成分分析法计算出点云的特征值与特征向量,然后根据点云的特征向量计算出点云与主成分空间之间的…

CocosCreator构建IOS教程

CocosCreator构建IOS教程 添加include: Header Search Paths:拖拽include过来 添加SoundEngine: Header Search Paths: 把SoundEngine POSIX Common 三个文件夹拖拽到里面去

如何将 ONLYOFFICE 文档 Linux 版更新到 v8.1

本指南将向您展示如何将 ONLYOFFICE 文档 Linux 版本更新到最新 8.1 版本。 ONLYOFFICE 文档是什么 ONLYOFFICE 文档是一个功能强大的文档编辑器,支持处理文本文档、电子表格、演示文稿、可填写表单、PDF 和电子书,可多人在线协作,支持 AI 集…

软件设计师笔记-操作系统知识(二)

线程 以下是关于线程的一些关键点: 线程是进程中的一个实体:进程是操作系统分配资源(如内存空间、文件句柄等)的基本单位,而线程是进程中的一个执行单元。多个线程可以共享同一个进程的地址空间和其他资源。线程是CP…

ElasticSearch-Windows系统ElasticSearch(ES)的下载及安装

前言 下载ElasticSearch 可以进入ElasticSearch官方下载地址,选择与电脑系统相对应的版本;博主已经上传资源,或者点此直接免费下载,本次演示版本为8.14.1。 注意: Elasticsearch 5 需要 Java 8 以上版本;…

菜籽桌面4.5.0~4.5.1常见问题解答

目录 如何刷机? 刷机失败? 无法方控? 无法画中画? 原车音乐跟我安装的音乐一起播放? 原车音乐停了,我安装的软件也跟着没声音了? 调节声音时忽大忽小? 怎么安装软件? 软件…

探究互联网领域知识,解密数字化时代神秘面纱

随着信息时代的不断发展,互联网的发展呈现出爆炸式的增长,以至于引起广泛的关注和深入的探究。互联网作为一个庞大的网络体系,涵盖着无穷无尽的信息和知识,其背后的科技和应用已经改变了人们的生活,产生了翻天覆地的变…

锐捷网络闪耀CVPR 2024,外观异常检测方案斩获世界认可!

近日,锐捷网络在“视觉异常检测和创新性检测2024挑战赛”(Visual Anomaly and Novelty Detection 2024 Challenge,简称VAND)的少样本逻辑/结构异常检测赛道(VAND 2.0赛道2)中荣获第二名,并在计算机视觉顶级会议CVPR 2024上展示了这一成果&…

2.用BGP对等体发送路由

2.用BGP对等体发送路由 实验拓扑: 实验要求:用BGP对等体发送路由信息 实验步骤: 1.完成基本配置(略) 2.建立BGP对等体(略) 3.创建路由信息(用创建一个loop back接口就能产生一个直连…

从我邮毕业啦!!!

引言 时间过的好快,转眼间就要从北邮毕业了,距离上一次月度总结又过去了两个月,故作本次总结。 PS: https://github.com/WeiXiao-Hyy/blog整理了后端开发的知识网络,欢迎Star! 毕业🎓 6月1号完成了自己的…

Construct公司 从 0 到 1 基于 Kitex+Istio 的微服务系统建设

本文根据 2024 年 5 月 25 日在上海举办的“云原生✖️AI 时代的微服务架构与技术实践”CloudWeGo 技术沙龙上海站活动中,Construct 服务端总监 Jason 的演讲《从 0 到 1 基于 Kitex Istio 的微服务系统建设》整理而来。 在微服务架构的浪潮中,企业面临…

STM32学习和实践笔记(38):RTC实时时钟实验

1.STM32F1 RTC介绍 STM32 的实时时钟( RTC)是一个独立的定时器。 STM32 的 RTC 模块拥有一组连续计数的计数器,在相应软件配置下,可提供时钟日历的功能。修改计数器的值可以重新设置系统当前的时间和日期。 RTC模块和时钟配置…

事务的特性-原子性(Atomicity)、一致性(Consistency)、隔离性(Asolation)、持久性(Durability)

一、引言 1、数据库管理系统DBMS为保证定义的事务是一个逻辑工作单元,达到引入事务的目的,实现的事务机制要保证事务具有原子性、一致性、隔离性和持久性,事务的这四个特性也统称为事务的ACID特性 2、当事务保持了ACID特性,才能…