当前位置: 首页 > news >正文

day07:用户下单、订单支付

文章目录

  • 地址薄相关相关代码
    • 需求分析和设计
    • 代码书写
  • 用户下单
    • 需求分析和设计
    • 代码开发
  • 订单支付
    • 微信支付介绍
    • 微信支付准备工作
      • 如何保证数据安全?
      • 如何调用到商户系统

地址薄相关相关代码

需求分析和设计

产品原型
image.png
接口设计
image.png
数据库设计
image.png

代码书写

地址薄相关代码都是单表接口,对着Apifox上的接口设计书写即可

用户下单

需求分析和设计

用户下单业务说明
在电商系统中,用户是通过下单的方式通知商家,用户已经购买了商品,需要商家进行备货和发货。
image.png
用户点餐业务流程
image.png
接口设计
image.png
数据库设计
订单表 orders
image.png
订单明细表 order_detail
image.png

代码开发

五张表一起开发,企业最低标准

package com.sky.service.impl;import com.sky.context.BaseContext;
import com.sky.dto.OrdersSubmitDTO;
import com.sky.entity.*;
import com.sky.mapper.*;
import com.sky.service.OrderService;
import com.sky.vo.OrderSubmitVO;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;@Service
public class OrderServiceImpl implements OrderService {@Resourceprivate OrderMapper orderMapper;@Resourceprivate OrderDetailMapper orderDetailMapper;@Resourceprivate AddressBookMapper addressBookMapper;@Resourceprivate ShoppingCartMapper shoppingCartMapper;@Resourceprivate UserMapper userMapper;/*** 用户下单接口** @param ordersSubmitDTO* @return*/@Overridepublic OrderSubmitVO submitOrder(OrdersSubmitDTO ordersSubmitDTO) {//1.封装订单表Orders对象插入到数据库Orders orders = new Orders();//1.1准备需要的数据//获取登录用户idLong userId = BaseContext.getCurrentId();//根据用户id查询用户数据User user = userMapper.findById(userId);//根据收获地址id查询收货地址数据AddressBook addressBook = addressBookMapper.findBookById(AddressBook.builder().id(orders.getAddressBookId()).userId(userId).build());//根据用户id获取购物车集合数据List<ShoppingCart> shoppingCartList = shoppingCartMapper.list(ShoppingCart.builder().userId(userId).build());//1.2将ordersSubmitDTO数据封装给Orders对象数据BeanUtils.copyProperties(ordersSubmitDTO, orders);//1.3补全Orders对象数据//订单号 uuid、orders.setNumber(UUID.randomUUID().toString().replace("-",""));//status,默认待接单orders.setStatus(Orders.PENDING_PAYMENT);//用户idorders.setUserId(userId);//下单时间,当前时间orders.setOrderTime(LocalDateTime.now());//pay_status,默认未支付orders.setPayStatus(Orders.UN_PAID);//phone,收货人手机号orders.setPhone(addressBook.getPhone());//address,地址=省份+城市+街道+街道详情orders.setAddress(addressBook.getProvinceName()+ addressBook.getCityName()+ addressBook.getDistrictName()+ addressBook.getDetail());//user_name,用户表用户别名orders.setUserName(user.getName());//consignee,收货人名字orders.setConsignee(addressBook.getConsignee());//1.4插入到数据库orderMapper.insert(orders);//2.封装订单详情表集合List<OrderDetail>数据插入到数据库中//2.1定义List<OrderDetail>数据List<OrderDetail> orderDetailList = new ArrayList<>();//2.2遍历购物车集合数据for (ShoppingCart shoppingCart : shoppingCartList) {OrderDetail orderDetail = new OrderDetail();//将购物车每个ShoppingCart对象赋值给每个OrderDetail对象BeanUtils.copyProperties(shoppingCart,orderDetail);//补全逻辑:order_idorderDetail.setOrderId(orders.getId());//将封装好的每个orderDetail对象添加到List<OrderDetail>数据中orderDetailList.add(orderDetail);}//2.批量插入订单详情数据orderDetailMapper.batchInsert(orderDetailList);//3.清空购物车shoppingCartMapper.deleteAll(userId);//4.封装数据返回OrderSubmitVO orderSubmitVO = OrderSubmitVO.builder().id(orders.getId()).orderAmount(orders.getAmount()).orderNumber(orders.getNumber()).orderTime(orders.getOrderTime()).build();return orderSubmitVO;}
}

订单支付

微信支付介绍

支付大家应该都不陌生了,在现实生活中经常购买商品并且使用支付功能来付款,在付款的时候可能使用比较多的就是微信支付和支付宝支付了。在苍穹外卖项目中,选择的就是微信支付这种支付方式。
要实现微信支付就需要注册微信支付的一个商户号,这个商户号是必须要有一家企业并且有正规的营业执照。只有具备了这些资质之后,才可以去注册商户号,才能开通支付权限。
个人不具备这种资质,所以我们在学习微信支付时,最重要的是了解微信支付的流程,并且能够阅读微信官方提供的接口文档,能够和第三方支付平台对接起来就可以了。
微信支付产品
image.png
参考:https://pay.weixin.qq.com/static/product/product_index.shtml
微信支付接入流程
image.png
微信小程序支付时序图
image.png
微信支付相关接口
JSAPI下单:商品系统调用该接口在微信支付服务后台生成预支付交易单
image.png
微信小程序调起支付:通过JSAPI下单接口获取搭配发起支付的必要参数prepay_id,然后使用微信支付提供的小程序方法调起小程序支付
image.png

微信支付准备工作

如何保证数据安全?

完成微信支付有两个关键的步骤:
第一个就是需要在商户系统当中调用微信后台的一个下单接口,就是生成预支付交易单。
第二个就是支付成功之后微信后台会给推送消息。
这两个接口数据的安全性,要求其实是非常高的。
**解决:**微信提供的方式就是对数据进行加密、解密、签名多种方式。要完成数据加密解密,需要提前准备相应的一些文件,其实就是一些证书。
获取微信支付平台证书、商户私钥文件
image.png

如何调用到商户系统

微信后台会调用到商户系统给推送支付的结果,在这里我们就会遇到一个问题,就是微信后台怎么就能调用到我们这个商户系统呢?因为这个调用过程,其实本质上也是一个HTTP请求。
目前,商户系统它的ip地址就是当前自己电脑的ip地址,只是一个局域网内的ip地址,微信后台无法调用到。
解决:内网穿透。通过cpolar软件可以获得一个临时域名,而这个临时域名是一个公网ip,这样,微信后台就可以请求到商户系统了。
内网穿透
软件:cpolar,花生壳,netapp
下载好cpoplar后按照下面的图片在windows上进行操作。
获取临时域名:支付成功后微信服务通过该域名回调我们的程序
image.png

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • JUnit 单元测试
  • three完全开源扩展案例05-围栏着色器
  • 微信小程序 - 在视图组件上绑定函数并携带参数(事件对象自定义属性传参)
  • mysql-造数据/列转行
  • Tomcat部署、优化、压力测试
  • Python实现招聘数据采集 ,并做可视化分析
  • Gson使用TypeAdapterFactory和TypeAdapter实现Json中的Key统一修改
  • Web漏洞扫描工具(AWVS、Goby)
  • modulepreload 对性能的影响
  • spring部分源码分析及Bean的生命周期理解
  • ChatGPT:ChatOpenAI 是什么?
  • 计算机网络——1
  • 云动态摘要 2024-07-23
  • 为了实现接口缓存,专门写了个缓存库 f-cache-memory
  • 邮件安全篇:邮件反垃圾系统运作机制简介
  • Java 内存分配及垃圾回收机制初探
  • Java小白进阶笔记(3)-初级面向对象
  • MySQL用户中的%到底包不包括localhost?
  • Netty 框架总结「ChannelHandler 及 EventLoop」
  • node.js
  • Node项目之评分系统(二)- 数据库设计
  • Vue.js-Day01
  • 发布国内首个无服务器容器服务,运维效率从未如此高效
  • 两列自适应布局方案整理
  • 小程序测试方案初探
  • 用Python写一份独特的元宵节祝福
  • 优秀架构师必须掌握的架构思维
  • AI又要和人类“对打”,Deepmind宣布《星战Ⅱ》即将开始 ...
  • Nginx惊现漏洞 百万网站面临“拖库”风险
  • ​Java并发新构件之Exchanger
  • #使用清华镜像源 安装/更新 指定版本tensorflow
  • #中的引用型是什么意识_Java中四种引用有什么区别以及应用场景
  • $().each和$.each的区别
  • (11)MSP430F5529 定时器B
  • (多级缓存)缓存同步
  • (附源码)计算机毕业设计高校学生选课系统
  • (转)3D模板阴影原理
  • (转)IIS6 ASP 0251超过响应缓冲区限制错误的解决方法
  • (转载)虚函数剖析
  • .axf 转化 .bin文件 的方法
  • .gitignore文件—git忽略文件
  • .NET CLR基本术语
  • .net core 的缓存方案
  • .Net Core和.Net Standard直观理解
  • .NET Framework杂记
  • .NET Remoting学习笔记(三)信道
  • .netcore 如何获取系统中所有session_如何把百度推广中获取的线索(基木鱼,电话,百度商桥等)同步到企业微信或者企业CRM等企业营销系统中...
  • .NET关于 跳过SSL中遇到的问题
  • .net网站发布-允许更新此预编译站点
  • .NET下的多线程编程—1-线程机制概述
  • :class的用法及应用
  • ?.的用法
  • [ vulhub漏洞复现篇 ] AppWeb认证绕过漏洞(CVE-2018-8715)
  • [ 常用工具篇 ] POC-bomber 漏洞检测工具安装及使用详解
  • [2023-年度总结]凡是过往,皆为序章