电商+支付双系统项目------支付系统的构思

本篇文章会讲讲支付的一些相关的名词概念以及怎么去设计支付系统,通过理解支付的这些名词概念和支付系统的架构,为接下来写支付系统的代码做好准备。

目录

支付------支付资质

支付------支付场景

微信

付款码支付

Native支付

支付宝

条码付

扫码付

电脑网站支付

支付------名词解释

appid

openid

支付------同步和异步

支付---系统架构


支付------支付资质

支付资质就是可以收钱那个人,就是企业,那我自己做项目怎么办呢?我是自己有appid和秘钥的,相当于我就是企业

支付------支付场景

微信

付款码支付

就是让收银员来扫你的那种

Native支付

就是用户扫商家

其他几种支付我听不懂,暂时先放一放

支付宝

条码付

商家扫你

扫码付

你扫商家

电脑网站支付

就是你交学费,电脑出现一个二维码,你用支付宝扫一扫,然后支付,这个就是电脑网站支付

支付------名词解释

appid

这里的app是application的缩写,即“应用”的id。小程序也好,移动应用也好,网页应用也好,都属于应用,每个应用都有它的appid。一个应用和支付产品是什么关系呢?支付产品就是当面付,电脑网站支付,小程序支付,这些支付方式都叫支付产品。记住一句话:一个应用有多个支付产品。

openid

是微信独有的,是微信用户在公众号appid下的唯一用户标识(appid不同,则获取到的openid就不同),可用于永久标记一个用户。只有公众号支付和小程序支付需要传递这个参数。

支付------同步和异步

异步

支付结果以异步为准

支付---系统架构

那我们构思一下怎么去设计这个支付系统。我们是想让这个支付系统是独立的,也就是说不要把支付的代码写到之前的项目里去。为什么要这么做呢?我等会儿说,等我把我想说的说完。既然我们想把支付系统定位为一个独立的系统,那么这个独立的支付系统就要有自己专用的数据库/表,这个数据库/表只有支付系统可以使用,其他的Java应用不能连这个数据库。由于我这个项目中,关于支付只有一张表,再单独开一个数据库来专门存这张表,感觉有点搞笑,因此我就把这张关于支付系统的表和其他的表放在一起,也就是放在同一个数据库中,但这张表是我们专用的。往后支付系统的功能多了,什么账单,对账功能。你就可以搞个专用数据库。

回到刚刚的问题,为什么要单独搞一个独立的支付系统呢?一般正常人的想法是这样的:

你有没有想过,假如我像上面那样去设计这个支付系统,会有什么问题?

其实也没什么问题!但是当业务多了之后,就会变成这样:

那这个时候,仓库系统和活动系统都需要支付,那怎么办?拷贝代码呗!就像这样:

好了,现在假如你需要完成微信支付,要用到微信平台给我们的id和密钥,那这个时候你就要在这3个系统都配上密钥,这已经是比较麻烦的了,但是还有更麻烦的:假如你要修改密钥,那就废了!3个系统都要改,最后发现这个系统越来越差,越来越不可维护,那这个项目就废了!

所以我们要这样规划:

支付作为一个单独的系统,左边是我们的业务系统,右边是微信和支付宝,由支付系统完成微信和支付宝的对接。我们左边的业务系统不跟微信和支付宝打交道,微信支付宝密钥在支付系统里面,只有这一个地方需要配置。那业务系统和支付系统怎么交互呢?交互其实算比较简单,就两步:第一步发起支付,第二步支付成功,异步通知。发起支付这个步骤很简单,我们直接让他跳转到支付系统(这里跳转到支付系统不是说跳转到支付首页,而是跳转到支付接口。让他携带参数跳转过去,比如订单号,支付金额,支付方式微信支付宝这些参数),支付后,微信和支付宝会有一个异步通知,支付系统拿到这个异步通知,再去通知业务系统,我们这个项目用MQ来做异步通知。

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

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

相关文章

问卷设计初探:题目类型概览与注意事项梳理

问卷法常被人们应用于社会调查中,它能反馈出最真实的社会信息。所以,很多企业为了最大程度地了解市场,也经常使用问卷调查法进行研究。不过,想要发挥出问卷法的最大用处,前提是要将问卷设计规范并且可量化。 想要设计…

在JavaScript中的防抖函数 - 通过在React中构建自动完成功能来解释

当你将一个新应用推向生产环境时,你希望确保它用户友好。网站的性能是用户体验的关键部分。每个用户都希望网站及其内容能够快速加载。每一秒都是宝贵的,可能导致用户再也不会访问你的网站。 在本指南中,我们将了解JavaScript中一个非常重要…

2024.2.15 模拟实现 RabbitMQ —— 消息持久化

目录 引言 约定存储方式 消息序列化 重点理解 针对 MessageFileManager 单元测试 小结 统一硬盘操作​​​​​​​ 引言 问题: 关于 Message(消息)为啥在硬盘上存储? 回答: 消息操作并不涉及到复杂的增删查改消…

人工智能学习与实训笔记(十四):Langchain之Agent

人工智能专栏文章汇总:人工智能学习专栏文章汇总-CSDN博客 本篇目录 0、概要 1、Agent整体架构 2、langchain中agent实现 3、Agent业务实现逻辑 0、概要 Agent是干什么的? Agent的核心思想是使用语言模型(LLM)作为推理的大脑…

redis为什么使用跳跃表而不是树

Redis中支持五种数据类型中有序集合Sorted Set的底层数据结构使用的跳跃表,为何不使用其他的如平衡二叉树、b树等数据结构呢? 1,redis的设计目标、性能需求: redis是高性能的非关系型(NoSQL)内存键值数据…

【51单片机实验笔记】开关篇(二) 矩阵按键

目录 前言原理图分析矩阵按键扫描算法 软件实现1. 矩阵键盘检测2. 简易计算器实现 总结 前言 本节内容,我们学习一下矩阵按键,它是独立按键的阵列形式,常见的应用即键盘。 本节涉及到的封装源文件可在《模块功能封装汇总》中找到。 本节完…

websocket数据帧格式

客户端、服务端数据的交换,离不开数据帧格式的定义。因此,在实际讲解数据交换之前,我们先来看下WebSocket的数据帧格式。 WebSocket客户端、服务端通信的最小单位是帧(frame),由1个或多个帧组成一条完整的消…

基于协同过滤的时尚穿搭推荐系统

项目:基于协同过滤的时尚穿搭推荐系统 摘 要 基于协同过滤的时尚穿搭推荐系统是一种能自动从网络上收集信息的工具,可根据用户的需求定向采集特定数据信息的工具,本项目通过研究服饰流行的分析和预测的分析和预测信息可视化时尚穿搭推荐系统…

C++中的volatile:穿越编译器的屏障

C中的volatile:穿越编译器的屏障 在C编程中,我们经常会遇到需要与硬件交互或多线程环境下访问共享数据的情况。为了确保程序的正确性和可预测性,C提供了关键字volatile来修饰变量。本文将深入解析C中的volatile关键字,介绍其作用、…

浅谈电商场景中的扣除库存问题

库存 一、场景二、扣减时机1.下单时扣库存2.支付完成扣库存3.预扣除 三、库存存储方案1.数据库存储2.数据库缓存混合存储 四、整体方案1.单数据库方案2.主从数据库方案3.主从数据库缓存方案4.数据库缓存混合存储 五、其他情况1.秒杀QPS过高2.Redis QPS过高3.Master DB QPS过高4…

使用ShardingJDBC实现分库分表

一、测试环境 JDK&#xff1a;1.8SpringBoot&#xff1a;2.7.17MySQL驱动&#xff1a;5.1.49MyBatis&#xff1a;2.3.1shardingJDBC&#xff1a;5.1.0 二、核心依赖 <!-- mysql 驱动 --> <dependency><groupId>mysql</groupId><artifactId>mysq…

Manifest merger failed with multiple errors, see logs

问题 Manifest merger failed with multiple errors, see logs详细问题 笔者进行Android 项目开发&#xff0c;修改AndroidManifest.xml代码后&#xff0c;控制台报错 AndroidManifest.xml报错核心代码 <manifest><uses-permission android:name"android.perm…

【C语言】长篇详解,字符系列篇1-----“混杂”的各种字符类型字符转换和strlen的模拟实现【图文详解】

欢迎来CILMY23的博客喔&#xff0c;本期系列为【C语言】长篇详解&#xff0c;字符系列篇1-----“混杂”的各种字符函数……&#xff0c;图文讲解各种字符函数&#xff0c;带大家更深刻理解C语言中各种字符函数的应用&#xff0c;感谢观看&#xff0c;支持的可以给个赞哇。 前言…

内存块与内存池

&#xff08;1&#xff09;在运行过程中&#xff0c;MemoryPool内存池可能会有多个用来满足内存申请请求的内存块&#xff0c;这些内存块是从进程堆中开辟的一个较大的连续内存区域&#xff0c;它由一个MemoryBlock结构体和多个可供分配的内存单元组成&#xff0c;所有内存块组…

Java学习笔记------static

static 创建Javabean类 public class student {private int age;private String name;private String gender;public student() {}public student(int age, String name, String gender) {this.age age;this.name name;this.gender gender;}/*** 获取* return age*/public…

使用Python编写脚本-根据端口号杀掉进程

我的GitHub&#xff1a;Powerveil - GitHub 我的Gitee&#xff1a;Powercs12 - Gitee 皮卡丘每天学Java 从前段开始遇到一个问题&#xff0c;服务在启动的时候总是端口被占用&#xff0c;发现还是Java程序&#xff0c;但是当时并没有启动Java程序&#xff0c;电脑出问题了。 一…

【Linux】Framebuffer 应用

# 前置知识 LCD 操作原理 在 Linux 系统中通过 Framebuffer 驱动程序来控制 LCD。 Frame 是帧的意思&#xff0c; buffer 是缓冲的意思&#xff0c;这意味着 Framebuffer 就是一块内存&#xff0c;里面保存着一帧图像。 Framebuffer 中保存着一帧图像的每一个像素颜色值&…

Tomcat要点总结

一、Tomcat 服务中部署 WEB 应用 1.什么是Web应用 &#xff08;1&#xff09; WEB 应用是多个 web 资源的集合。简单的说&#xff0c;可以把 web 应用理解为硬盘上的一个目录&#xff0c; 这个目录用于管理多个 web 资源。 &#xff08;2&#xff09;Web 应用通常也称之为…

七、ActiveMQ的传输协议

ActiveMQ的传输协议 一、是什么二、协议1.TCP(默认)2.NIO3.AMQP4.STOMP5.SSL6.MQTT7 WS 三、NIO配置案例1.修改activemq.xml2.重启3.生产者/消费者4.性能提升4.1 配置4.2 生产者/消费者 一、是什么 官网地址&#xff1a;http://activemq.apache.org/configuring-version-5-tra…

Mysql知识点汇总

Mysql知识点汇总 1. Mysql基本场景的简单语句。2. Mysql的增删改查&#xff0c;统计表中的成绩最好的两个同学的名字&#xff0c;年级等。3&#xff1a;请使用多种方法查询每个学生的每门课分数>80的学生姓名4、order by&#xff0c;group by&#xff0c;子查询4.1、having和…