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

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

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

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

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

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

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

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

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

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

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

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

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

小结下流程——产品

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

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

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

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

回调逻辑:

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

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

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

搭建Renesas R7FA8D1BHECBD-BTB的开发调试环境(DAP-LINK: N32G45XVL-STB)

目录 概述 1 软硬件 1.1 软硬件环境信息 1.2 开发板信息 1.3 调试器信息 2 FSP和KEIL产生测试项目 2.1 FSP生成项目 2.2 Keil中配置 3 硬件连接框图 4 一个测试案例 4.1 功能介绍 4.2 定时器函数 5 测试 搭建Renesas R7FA8D1BHECBD-BTB的开发调试环境&#xff08…

【漏洞复现】I doc view——任意文件读取

声明:本文档或演示材料仅供教育和教学目的使用,任何个人或组织使用本文档中的信息进行非法活动,均与本文档的作者或发布者无关。 文章目录 漏洞描述漏洞复现测试工具 漏洞描述 I doc view 在线文档预览是一个用于查看、编辑、管理文档的工具…

LabVIEW材料样本结构缺陷检测

本文介绍了一种基于LabVIEW的实验室振动特性分析测试装置,通过分析振动特性来检测结构缺陷。文章详细描述了具体案例、硬件型号、工作原理、软件功能以及注意事项。 硬件型号 振动传感器:PCB Piezotronics 352C33加速度计 数据采集卡:NI PXI…

天气网站爬虫及可视化

摘要:随着互联网的快速发展,人们对天气信息的需求也越来越高。本论文基于Python语言,设计并实现了一个天气网站爬虫及可视化系统。该系统通过网络爬虫技术从多个天气网站上获取实时的天气数据,并将数据进行清洗和存储。同时&#…

Windows下activemq集群配置(broker-network)

1.activemq版本信息 activemq:apache-activemq-5.18.4 2.activemq架构 3.activemq集群配置 activemq集群配置基于Networks of Brokers 这种HA方案的优点:是占用的节点数更少(只需要2个节点),而且2个broker都可以响应消息的接收与发送。不足&#xff…

下载旧版本vscode及扩展,离线下载远程linux服务器插件

背景 工作的内网没有网络,无法使用网络来下载插件和vscode软件,且有远程linux服务器需求,linux服务器中lib相关库比较旧且无法更新,所以需要选择一个旧版本的vscode,相应插件也需要选择旧版本的 旧版本vscode下载 没…

JavaWeb——MySQL:事务的简单学习

前面学习完了数据库增删查改的SQL语言,约束,数据库设计,以及多表查询,再学完事务就达到初级工程师的水平了。 6. 事务 6.1 概念 事务类似于编程语言的方法,包含一组SQL指令。 事务是不可分割的; 该指令步…

高中数学:复数-三角表示式

一、定义 辐角主值 二、复数乘除运算的三角表示及其几何意义 乘法 复数乘法的几何意义 除法 练习 解

机器学习 笔记

什么是机器学习 Machine Learning 约等于 Look for a function. 学习路线 监督学习: 回归Regression:指模型预估的输出是数值Classification:指模型预估的输出是类别,二分类的输出是或否会告诉机器正确的答案是什么 半监督学习…

xlsx插件简介

1. xlsx插件 1.1. 常用属性和方法 1.1.1. 创建新的工作簿1.1.2. 从数组生成工作表1.1.3. 添加工作表到工作簿1.1.4. 从HTML表格创建工作表1.1.5. 读取Excel文件1.1.6. 导出Excel文件1.1.7. 设置单元格样式 2. vue中如何使用xlsx 2.1. vue-xlsx的特点2.2. 常用属性和方法 2.2.1…

【操作与配置】WSL配置LINUX

WSL2(Windows Subsystem for Linux 2)是Microsoft开发的一项技术,允许用户在Windows操作系统上运行Linux发行版。WSL2是WSL(Windows Subsystem for Linux)的第二版,带来了许多改进和新特性。 官网&#xff…

论文学习:基于知识图谱的RAG进行客服问答

1.简介 文章名称: Retrieval-Augmented Generation with Knowledge Graphs for Customer Service Question Answering(基于知识图谱的RAG进行客服问答) 2.摘要ABSTRACT 在客户服务技术支持中,迅速准确地检索相关的过往问题对于有…

新版周易测算系统源码 去授权完美运行

已经去掉授权可以完美运行 更新了三个模板市面上都是几千几千的卖 更新了三套首页新ui 自己后台切换就行 源码大小:338M 源码下载:https://download.csdn.net/download/m0_66047725/89447857 更多资源下载:关注我.

CSF视频文件格式转换WMV格式

如果大家看过一些高校教学讲解视频的话,很可能见过这样一个难得的格式,".csf ",非常漂亮 。 用暴风影音都可以打开观看,会自动下载解码。 但是一旦我们想要利用或者上传视频的时候就麻烦了,一般网站不认这…

检信智能推出我国首款Allemotion OS基于AI生理心理参数服务开发者平台

检信Allemotion OS生理心理开发者平台是根据世界人工智能高速发展的特点,为实现脑机交互的行业需求,由检信智能推出我国首款检信Allemotion OS生理心理开发者平台。检信Allemotion OS生理心理开发者平台集成了振动影像心理情绪20项情绪参数、11项生理相关参数&#…

springboot系列六: springboot底层机制实现 下

实现SpringBoot底层机制[Tomcat启动分析 Spring容器初始化 Tomcat如何关联Spring容器] 实现任务阶段1-创建Tomcat, 并启动🥦说明:创建Tomcat, 并启动🥦分析代码实现🥦完成测试 实现任务阶段2-创建Spring容器🥦说明&a…

JAVA期末速成库(10)第十一章

一、习题介绍 Check Point:P416 11.1,11.6,11.7,11.8,11.12,11.17,11.24 Programming Exercise:11.1 二、习题及答案 Check Point: 11.1 True or false? A subcl…

elementUI的搭建使用过程

Element - The worlds most popular Vue UI framework 上面是elementUI的网站,进入网站 点击右上角的组件按钮 复制这段代码到你的项目终端:npm i element-ui -S 加载完成后即可使用elementUI网站中的组件,使用它们只需要复制组件下面的代码即可

Qt自定义信号

1.Teacher类下定义信号signals: Student类下定义槽函数&#xff1a; Teacher.h #pragma once#include <QObject>class Teacher : public QObject {Q_OBJECTpublic:Teacher(QObject *parent);~Teacher(); signals:void Ask(); //老师向学生提问void Ask(QString str);…

第3章_UART 开发基础

文章目录 第3章 UART 开发基础3.1 同步传输与异步传输3.1.1 概念与示例3.1.2 差别 3.2 UART 协议与操作方法3.2.1 UART 协议3.2.2 STM32H5 UART 硬件结构3.2.3 RS485 协议 3.3 UART 编程3.3.1 硬件连接3.3.2 三种编程方式3.3.3 查询方式3.3.4 中断方式3.3.5 DMA 方式 3.4 效率最…