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

news2024/11/25 18:58:21

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

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

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

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

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

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

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

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

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

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

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

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

小结下流程——产品

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

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

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

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

回调逻辑:

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

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

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

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

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

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

相关文章

ElementUI搭建使用过程

1.ElementUI概述 Element,一套为开发者、设计师和产品经理准备的基于 Vue 2.0 的桌面端组件库,相当于是css的框架 2.安装ElementUI 第一步:创建一个vue-cil项目 !!!(上篇文章已详细讲述搭建过…

线性代数知识点搜刮

求你别考太细... 目录 异乘变零定理 行列式转置 值不变 重要关系 中间相等,取两头 特征值公式 向量正交 点积为0 拉普拉斯定理 矩阵的秩 特征值和特征向量 |A|特征值的乘积 & tr(A)特征值的和 要记要背 增广矩阵 异乘变零定理 某行(…

智能工业网络,需要何种工业以太网交换机作为支撑?

随着工业企业数字化及信息化的进一步深化升级,工业领域相关控制及信息系统的业务类型不断增加、复杂性不断提升,工业控制网络与工业信息网络也呈现融合趋势,具备支持多业务、多协议、多厂商设备和数据的互联互通、共网承载以及高质量传输能力…

C++ | Leetcode C++题解之第203题移除链表元素

题目: 题解: class Solution { public:ListNode* removeElements(ListNode* head, int val) {struct ListNode* dummyHead new ListNode(0, head);struct ListNode* temp dummyHead;while (temp->next ! NULL) {if (temp->next->val val) {…

p6spy 组件打印完整的 SQL 语句、执行耗时

一、前言 我们来配置一下 Mybatis Plus 打印 SQL 功能(包括执行耗时),一方面可以了解到每个操作都具体执行的什么 SQL 语句, 另一方面通过打印执行耗时,也可以提前发现一些慢 SQL,提前做好优化&#xff0c…

CVPR 2024 | 双手协作双物体的数据集TACO:引领可泛化手物交互的新方向

论文题目: TACO: Benchmarking Generalizable Bimanual Tool-ACtion-Object Understanding 论文链接: https://arxiv.org/pdf/2401.08399.pdf 项目主页: https://taco2024.github.io/ 视频链接: https://www.youtube.com/watch…

机器学习笔记 人脸识别技术全面回顾和小结(1)

一、简述 人脸识别是视觉模式识别的一个细分问题。人类一直在识别视觉模式,我们通过眼睛获得视觉信息。这些信息被大脑识别为有意义的概念。对于计算机来说,无论是图片还是视频,它都是许多像素的矩阵。机器应该找出数据的某一部分在数据中代表…

OBD诊断(ISO15031) 02服务

文章目录 功能简介请求和响应1、read-supported PIDs1.1、请求1.2、肯定响应 2、read PID value1.1、请求1.2、肯定响应 3、同时请求多个PID4、同时读取多个PID数据 Parameter definition报文示例1、单个PID请求和读取2、多个PID请求和读取 功能简介 02服务,即 Req…

【技术追踪】UNest:一种用于非配对医学图像合成的新框架(MICCAI-2024)

前天看了一篇文章图像分割用diffusion,今天看了篇文章图像合成不用diffusion,你说说这~ 传送门:【技术追踪】SDSeg:医学图像的 Stable Diffusion 分割(MICCAI-2024) UNest:UNet结构的Transforme…

收银系统源码-千呼新零售【分销商城】

千呼新零售2.0系统是零售行业连锁店一体化收银系统,包括线下收银线上商城连锁店管理ERP管理商品管理供应商管理会员营销等功能为一体,线上线下数据全部打通。 适用于商超、便利店、水果、生鲜、母婴、服装、零食、百货、宠物等连锁店使用。 详细介绍请…

帮助某服务业公司制定发展战略与未来规划

在集团公司高速发展、业务范围不断扩大时,组织往往对公司未来的发展方向感到迷茫,不知道如何进行更好的规划,找到合适的发展战略,为企业提供更长远的发展空间,带来更多是利益。面对这个问题,华恒智信认为企…

【知识学习】Unity3D中Post Processing的概念及使用方法示例

Unity3D中的Post Processing(后处理)是一种在渲染管线的最后阶段对最终图像进行处理的技术。它允许开发者添加各种视觉效果,如模糊、颜色分级、镜头光晕等,以增强场景的视觉表现力。 Post Processing 的基本概念 Post Processin…

【递归、搜索与回溯】记忆化搜索

记忆化搜索 1.记忆化搜索2.不同路径3.最长递增子序列4. 猜数字大小 II5.矩阵中的最长递增路径 点赞👍👍收藏🌟🌟关注💖💖 你的支持是对我最大的鼓励,我们一起努力吧!😃😃…

eclipse基础工程配置( tomcat配置JRE环境)

文章目录 I eclipse1.1 工程配置1.2 编译工程1.3 添加 JRE for the project build pathII tomcat配置JRE环境2.1 Eclipse编辑tomcat运行环境(Mac版本)2.2 Eclipse编辑tomcat运行环境(windows版本)2.3 通过tomcat7W.exe配置运行环境(windows系统)I eclipse 1.1 工程配置 …

PPT中的文字跟随Excel动态变化,且保留文字格式

今天协助客户解决了一个有趣的问题,这里记录一下,以此共勉。 目录 1. 提出问题2. 此功能的应用场景3. 开始制作4. 注意事项5. 若遇到任何问题 1. 提出问题 PPT的图表是可以引用Excel的,那PPT的文本是否可以引用Excel实现动态更新呢&#xff…

Unidbg调用-补环境V3-Hook

结合IDA和unidbg,可以在so的执行过程进行Hook,这样可以让我们了解并分析具体的执行步骤。 应用场景:基于unidbg调试执行步骤 或 还原算法(以Hookzz为例)。 1.大姨妈 1.1 0x1DA0 public void hook1() {

精品UI知识付费系统源码网站EyouCMS模版源码

这是一款知识付费平台模板,后台可上传本地视频,批量上传视频连接, 视频后台可设计权限观看,免费试看时间时长,会员等级观看,付费观看等功能, 也带软件app权限下载,帮助知识教育和软件…

OpenHarmony开发实战:GPIO控制器接口

功能简介 GPIO(General-purpose input/output)即通用型输入输出。通常,GPIO控制器通过分组的方式管理所有GPIO管脚,每组GPIO有一个或多个寄存器与之关联,通过读写寄存器完成对GPIO管脚的操作。 GPIO接口定义了操作GP…

Java应用cpu过高如何分析

1. 查看进程cpu使用情况 top 2. 根据PID查看指定进程的各线程的cpu使用情况 top -H -p PID

Zookeeper节点ACL权限设置—digest模式

ACL全称为Access Control List(访问控制列表),用于控制资源的访问权限。ZooKeeper使用ACL来控制对其znode(ZooKeeper数据树的数据节点)的访问。 zk利用ACL策略控制节点的访问权限: CREATE c 可以创建子节点 DELETE …