小白级微信支付的设计思路

简介: 小白级微信支付的设计思路

支付是很多项目都会用到的,今天我们就好好聊一聊支付这个问题。

常见的支付有微信,支付宝,有一定基础的同学可以去看看对应的官方文档

今天我们这里仅提供一个思路,拿微信支付举例子

第一步,设计出我们的订单的这个数据库表

分析一下订单表该有的信息:

1.谁的订单:用户(user_id)

2.买的什么:商品(product_id)

3.哪家店的东西:商铺(store_id)

4.一般会定义一个自己的本站唯一订单号:trade_no

5.外部支付单号:out_trade_no 这是微信支付的返回的订单号:(transaction_id)

6.主键自增长的订单id

7.支付金额:pay_money

8.支付方式,如(1=支付宝,2=微信,...):pay_type

9.订单状态,一般情况下有(0=等待支付,1=已经付款,2=已取消)

10.订单创建时间:cdate

11.完成支付的时间:pay_time

12.订单未支付的失效时间:expires

13.更新时间:update

14.预支付订单id:prepay_id

15.预支付订单创建时间:prepay_time

16.删除时间:deldate

以上,基本就是一般订单表设计的所有字段了

带_id后缀的意思是外键,关联其他表的主键

第二步,代码的编写

编程我们最重要的是思路,我们把思路理清了,代码自然就出来了

1.先创建本地订单

写代码的时候一定要把情况考虑完备,具体的业务具体分析,在做订单的创建的时候,

要考虑订单什么时候不能创建,创建是否成功,是否有其他信息需要绑定,有没有反复创建等。

这里一般是要事务操作的,失败就回滚,初学者的话,先忽略,创建起订单就算成功。

创建本地订单添加以下字段

1,2,3,4,6,7,9,10,12

其中trade_no自己视情况生成唯一,订单状态默认为0,pay_money保留两位小数,不同语言不同处理方式,自行百度,订单超期未支付expires是根据业务计算得出,比如你们是要订单创建半小时后自动关闭,那就是创建时间往后推半小时。

ok,到这里本地订单创建完毕。

2.支付

这里主要就是需要根据微信的支付文档,去拼一个他们要的数据,然后生成一个预支付订单,将预处理订单id生成小程序调用的参数,进行支付签名,这些一般是现成的sdk,调一下就行,

预支付订单所填的参数如下

微信支付-开发者文档

直接看文档吧

最后还有一个微信支付的回调,微信调用你的回调接口,你去查看这个订单的支付状态,成功的话就更新一下本地的订单状态,添加商户收入日志,更新商户总额,同步订单消息啥的一系列操作。

3.定时任务删除超期未支付的订单

如标题一样,后台定时任务每分钟去删除数据库超期未支付的订单,一般都是软删,也就是将deldate字段从0修改为删除时间

相关文章
|
弹性计算 前端开发 小程序
微信小程序上传文件至阿里云OSS直传(java后端签名+前端直传)
当前的通用文件上传方式是通过前端上传到服务器,再由服务器转存至对象存储。这种方式在处理小文件时效率尚可,但大文件上传因受限于服务器带宽,速度较慢。例如,一个100MB的文件在5Mbps带宽的阿里云ECS上上传至服务器需160秒。为解决此问题,可以采用后端签名的方式,使微信小程序直接上传文件到阿里云OSS,绕过服务器中转。具体操作包括在JAVA后端引入相关依赖,生成签名,并在微信小程序前端使用这个签名进行文件上传,注意设置正确的请求头和formData参数。这样能提高大文件上传的速度。
3203 1
|
3月前
|
存储 缓存 资源调度
# Qwen3-8B 与 ChatGPT-4o Mini 的 TTFT 性能对比与底层原理详解
Qwen3-8B 是通义实验室推出的80亿参数模型,支持32K上下文,采用FP8量化和CUDA优化,提升推理效率;ChatGPT-4o Mini 为OpenAI轻量模型,参数约3.8B,支持128K上下文,通过蒸馏技术实现低延迟。两者在TTFT、长文本处理和部署优化上各有优势,适用于不同应用场景。
488 9
|
4月前
|
监控 安全 Java
现代 Java 技术开发宠物管理系统实操案例解析
本文通过一个宠物管理系统项目,深入讲解Java中的封装、继承和多态特性。系统基于Java 8+开发,结合Stream API与Lambda表达式,展示现代Java技术的实际应用。封装部分使用Record类简化数据模型,继承设计通过抽象类与接口实现代码复用,多态则通过统一接口处理不同宠物行为。案例涵盖模板方法模式、策略模式等设计思想,并提供最佳实践建议,解决常见问题如继承滥用和类型转换异常。资源地址:[https://pan.quark.cn/s/14fcf913bae6](https://pan.quark.cn/s/14fcf913bae6)。
152 0
|
Java Apache
Java将一个对象的属性复制到另一个对象
【5月更文挑战第18天】Java将一个对象的属性复制到另一个对象
1092 2
|
小程序 前端开发 JavaScript
微信小程序实现微信支付(代码和注释很详细)
微信小程序实现微信支付(代码和注释很详细)
|
测试技术 Python
分支覆盖 (Branch Coverage)
分支覆盖 (Branch Coverage) 是一种软件测试覆盖率评估方法,能够测量代码中每个分支的执行情况,即代码中每个条件语句 (if-else 语句) 的所有可能分支是否都被执行过。
4058 1
|
SQL
淘东电商项目(55) -支付系统核心表设计
淘东电商项目(55) -支付系统核心表设计
437 0
|
传感器 开发者
【STM32基础 CubeMX】外部中断
【STM32基础 CubeMX】外部中断
430 44