JAVA项目实战开发电商项目案例(十)订单与支付模块

article/2025/11/2 15:26:40

文章目录

  • 1项目架构
  • 2项目采用技术
  • 3订单与支付模块功能演示
  • 4如何开发支付宝的支付模块以及订单模块
    • 4.1首先需要编写前端页面以及JS文件
    • 4.2其次需要编写JAVA后台接口
    • 4.3支付模块分析
    • 4.4订单模块分析
    • 5代码分析
    • 6个人说明
    • 7 [我的个人网站](http://www.liph.fun)
    • 8获取源码

此次电商系统项目依然采用spring boot+纯前端html+css+js开发完成,便于初学
者学习,只要你会html标签,css选择器样式,以及原生js查找元素和增加点击事件以及jquery的ajax,则此系统十分适合你学习。

1项目架构

可以去看我JAVA项目实战增删改查案例

2项目采用技术

可以去看我[JAVA项目实战增删改查案例]

3订单与支付模块功能演示

在这里插入图片描述

在线体验网址清前往:http://www.liph.fun个人网站或者点击商城地址:商城地址
注意付款的时候支付宝扫码显示二维码失效,需要下载支付宝沙漏版支付宝。
不懂的参考我上一篇文章。

4如何开发支付宝的支付模块以及订单模块

4.1首先需要编写前端页面以及JS文件

          采用我提前搭建完成的buiness-Admin后台管理系统的商城部分代码即可快速搭建。

4.2其次需要编写JAVA后台接口

      还是采用spring boot架构,内置含有统一异常处理,统一json数据响应,统一的工具类处理,统一数据库mybaties查询,在这里我们就不考虑技术直接分析业务结构。

4.3支付模块分析

(1) 用户由购物车去结算按钮 ,跳转到如下图的订单确认页面
在这里插入图片描述
(2) 此时后台接口查询用户购物车中所选择的待提交订单的商品清单信息以及家庭住址信息:
上述图片描述姓名12买了1件美的冰箱花费了888元。选择了一个收货地址。

(3)用户点击提交订单按钮,此时商品清单数据和收货地址数据变成了一个整体的数据。后台生成了一个订单,如下图
在这里插入图片描述
其中user_id代表提交订单的用户ID,order_no订单号,shipping_id地址信息,另外还有付款金额以及付款类型和付款状态。提交订单,这张表肯定是未支付订单状态。
我们看到的付款金额只是这个订单的总价钱,页面上显示的商品清单列表会插入到商品订单明细表
在这里插入图片描述
订单号、商品ID、商品名称、商品价格、购买数量、商品总价属性
(4)到此订单信息处理完毕已经记录在数据库里面了。

(5)由于订单号在数据库中已经产生,产生的订单号会通过ajax调用支付宝,付款接口进行付款。

(6)关于支付宝对接看上一篇文章支付宝案例测试

(7)支付宝回调结束会返回异步通知,此时2件事要处理,第一更新订单的支付方式以及付款时间和付款状态更新为已付款。

   order.setPaymentTime(DateTimeUtil.strToDate(params.get("gmt_payment")));order.setStatus(Constant.OrderStatus.YES_PAY);orderMapper.updateByPrimaryKeySelective(order);LOGGER.info("支付宝支付付款成功订单状态更新");System.out.println("支付宝支付付款成功订单状态更新"+new Date());

第二步:方便以后对账,将支付宝返回的流水号以及本系统订单号,创建时间和付款用户记录到付款流水表中。

4.4订单模块分析

(1)由于用户购买商品支付成功数据库中已经存在订单数据,所以出现了下图的订单列表。
在这里插入图片描述
(2)用户点击我的订单,判断用户是否登录未登录提示用户登录,已经登录则可以调用查看订单接口,查询该用户下的所有订单。

(3)用于点击每一笔订单都可以查看订单详情。如下图
在这里插入图片描述

5代码分析

关键代码如下

 @RequestMapping("/order/createOrder")@ResponseBodypublic CommonResult<TbOrder> createOrder(HttpSession session,Integer shippingId){TbMember tbMember= (TbMember) session.getAttribute(Constant.CURRENT_LOGIN_USER);if(tbMember==null){//未登录返回0  啊return   CommonResult.failed(ResultCode.UNAUTHORIZED);}TbOrder order=this.orderService.createOrder(tbMember.getId(),shippingId);return  CommonResult.success(order);}/***** 订单支付响应支付宝页面* @param* @param* @return*/@RequestMapping("/order/pay")public void pay(HttpServletRequest httpRequest, HttpServletResponse httpResponse,String orderNo)throws ServletException, IOException {String form="";try {form=orderService.pay(orderNo);} catch (Exception e) {e.printStackTrace();}String charset = "utf-8";httpResponse.setContentType("text/html;charset=" + charset);httpResponse.getWriter().write(form);// 直接将完整的表单html输出到页面httpResponse.getWriter().flush();httpResponse.getWriter().close();}/**** 分页查询订单列表* @param* @return*/@RequestMapping(value = "/order/orderlist",method = RequestMethod.GET)@ResponseBodypublic CommonResult<CommonPage<com.gotop.cmdb.model.OrderVo>> getorderlist(Integer page,Integer size,HttpSession session){TbMember tbMember= (TbMember) session.getAttribute(Constant.CURRENT_LOGIN_USER);if(tbMember==null){//未登录返回0  啊return   CommonResult.failed(ResultCode.UNAUTHORIZED);}/**** 分页查询*/List<com.gotop.cmdb.model.OrderVo> list=orderService.getorderlist(page,size,tbMember.getId());return  CommonResult.success(CommonPage.restPage(list));}/***** 根据订单号查询订单详情* @param* @param* @param session* @return*/@RequestMapping(value = "/order/orderdetail",method = RequestMethod.GET)@ResponseBodypublic CommonResult<OrderDetailVo>  queryorderdetail(HttpSession session, String orderNo){TbMember tbMember= (TbMember) session.getAttribute(Constant.CURRENT_LOGIN_USER);if(tbMember==null){//未登录返回0  啊return   CommonResult.failed(ResultCode.UNAUTHORIZED);}/**** 订单唯一的,只有一个订单很多个商品明细*/OrderDetailVo list=orderService.queryorderdetail(orderNo);return  CommonResult.success(list);}@RequestMapping(value = "/order/ordercancel",method = RequestMethod.GET)@ResponseBodypublic CommonResult ordercancel(HttpSession session, String orderNo){TbMember tbMember= (TbMember) session.getAttribute(Constant.CURRENT_LOGIN_USER);if(tbMember==null){//未登录返回0  啊return   CommonResult.failed(ResultCode.UNAUTHORIZED);}/**** 订单唯一的,只有一个订单很多个商品明细*/int row=orderService.ordercancel(orderNo);return  CommonResult.success(1);}/***** 支付宝异步通知接口* @param request* @param response* @throws AlipayApiException* @throws IOException*/@RequestMapping("order/alipay_callback")public void alipayCallback(HttpServletRequest request, HttpServletResponse response) throws AlipayApiException, IOException {LOGGER.info("#################################支付宝异步回调######################################"+new Date());System.out.println("#################################支付宝异步回调######################################"+new Date());// 获取支付宝POST过来反馈信息Map<String, String> params = new HashMap<String, String>();Map<String, String[]> requestParams = request.getParameterMap();for (Iterator<String> iter = requestParams.keySet().iterator(); iter.hasNext();) {String name = (String) iter.next();String[] values = (String[]) requestParams.get(name);String valueStr = "";for (int i = 0; i < values.length; i++) {valueStr = (i == values.length - 1) ? valueStr + values[i] : valueStr + values[i] + ",";}// 乱码解决,这段代码在出现乱码时使用//valueStr = new String(valueStr.getBytes("ISO-8859-1"), "utf-8");params.put(name, valueStr);}LOGGER.info("支付宝回调,sign:{},trade_status:{},参数:{}"+params);System.out.println("支付宝回调,sign:{},trade_status:{},参数:{}"+params);//非常重要,验证回调的正确性,是不是支付宝发的.并且呢还要避免重复通知.params.remove("sign_type");boolean signVerified = AlipaySignature.rsaCheckV1(params, configBeanProp.getAlipay_public_key(), "utf-8",  configBeanProp.getSign_type()); // 调用SDK验证签名// ——请在这里编写您的程序(以下代码仅作参考)——/** 实际验证过程建议商户务必添加以下校验: 1、需要验证该通知数据中的out_trade_no是否为商户系统中创建的订单号,* 2、判断total_amount是否确实为该订单的实际金额(即商户订单创建时的金额), 3、校验通知中的seller_id(或者seller_email)* 是否为out_trade_no这笔单据的对应的操作方(有的时候,一个商户可能有多个seller_id/seller_email)* 4、验证app_id是否为该商户本身。*/if (signVerified) {// 验证成功// 商户订单号String out_trade_no = new String(request.getParameter("out_trade_no").getBytes("ISO-8859-1"), "UTF-8");// 支付宝交易号String trade_no = new String(request.getParameter("trade_no").getBytes("ISO-8859-1"), "UTF-8");// 交易状态String trade_status = new String(request.getParameter("trade_status").getBytes("ISO-8859-1"), "UTF-8");System.out.println("商户订单号="+out_trade_no);System.out.println("支付宝交易号="+trade_no);System.out.println("交易状态="+trade_status);//订单业务逻辑处理orderService.aliCallback(params);System.out.println("异步回调验证成功");response.getWriter().write("success");} else {// 验证失败System.out.println("异步回调验证失败");response.getWriter().write("fail");// 调试用,写文本函数记录程序运行情况是否正常// String sWord = AlipaySignature.getSignCheckContentV1(params);// AlipayConfig.logResult(sWord);}response.getWriter().flush();response.getWriter().close();}

合计6个接口

  • 创建订单接口
  • 订单支付接口
  • 支付宝回调订单状态更新接口
  • 订单列表分页查询
  • 订单详情接口
  • 订单取消接口

代码不重要,关键只要你能通过这篇文章能学到了电商项目支付和订单模块,

所有的系统订单和支付都一样,例如保险项目、银行理财项目、等项目。也许可能他们的订单表记录的信息全面一点和记录系统日志详细一点。

6个人说明

经验是由一点一点积累的,思维也是由一天一天训练出来的。

7 我的个人网站

持续更新分享此项目电商在线演示地址为:演示地址

8获取源码

源码下载


http://chatgpt.dhexx.cn/article/1ZjtZJXx.shtml

相关文章

Java 项目实战 坦克大战 (0)--前言

做了有一个星期了&#xff0c;java语言太强大了&#xff0c;也算是学得最认真的一门语言了&#xff0c;本次课设花的心思也就比较多了。关键总是追求完美总是想原创&#xff0c;最终做出来效果不错&#xff0c;但感觉代码逻辑很乱&#xff0c;今天开始就好好整理一番&#xff0…

Java项目实战第11天:搜索功能的实现

目录 一、sql语句动态拼接二、前后台代码编写三、搜索框数据回填最后 今天是刘小爱自学Java的第110天。 感谢你的观看&#xff0c;谢谢你。 话不多说&#xff0c;开始今天的学习&#xff1a; 事先说明&#xff1a;关于今天的搜索功能实现。 并没有使用到倒排索引这样的主流搜…

【CSDN最全java项目实战500篇】练手/项目经验/毕设刚需

免费精选&#xff01;强烈建议收藏&#xff01;学完这一套直接进大厂&#xff08;附配套源码&资料&#xff09; C站&#xff08;CSDN&#xff09;软件工程师能力认证&#xff0c;已上线70天&#xff0c;下图300所高校的小伙伴们都已经预约、完成C认证&#xff0c;就等你来啦…

Java项目开发实战入门 PDF 扫描完整版

内容介绍 《Java项目开发实战入门》以一起来画画、通讯录系统、明日彩票预测系统、小小五子棋、企业进销存管理系统、企业QQ&#xff08;局域网版&#xff09;、九宫格记忆网和铭成在线考试系统8个精选项目为案例&#xff0c;从趣味性和实际应用角度出发&#xff0c;采用了当前…

全站最全实战的Java项目(附源码)

嗨喽&#xff0c;大家好&#xff0c;今天又要给大家整一波福利了&#xff01; 不管我们要学习哪种语言都希望能第一时间看到成效&#xff0c;能做出实际的东西来&#xff0c;那么这里所说的实际东西当然就是项目啦&#xff01;不用我说大家也知道&#xff0c;学编程语言不做项…

java项目实战之404错误原因总结

java项目实战之404错误原因总结 第一个原因可能是你的URL写错了&#xff0c;正确的URL应该这么写 localhost:8080/项目名称/对应的目录或者映射 好好检查检查是否是拼写错误&#xff0c;或者多了什么&#xff0c;少了什么 第二个原因可能是你的Spring配置文件写错了 一般都…

最牛逼的 Java 项目实战,没有之一!

想要成长为高级开发&#xff0c;掌握更多层面的技术&#xff0c;兼顾深度和广度是毋庸置疑的。你肯定认为&#xff0c;我要认真努力的学习技术&#xff0c;丰富自己的技术栈&#xff0c;然后就可以成为一个优秀的高级开发了。但当你真正去学习之后就会发现&#xff0c;技术栈异…

史上最全Java项目实战课程(含项目实战+源码)

【此文章转自乐字节】 很多小伙伴学了Java有一段时间了&#xff0c;想找几个项目想练练手&#xff0c;更有助于我们的学习和工作实践&#xff0c;最重要的是提高自己的项目经验&#xff0c;对于找工作而言有着大大的帮助&#xff0c;那今天UP主就来分享一些Java实战项目&#…

10套最全Java项目实战课程(附项目实战+源码)

家人们&#xff0c;我又来啦&#xff0c;今天我们来看一下学Java必练的10款游戏项目&#xff01; 大家都知道学习编程必须要做的就是敲代码和做项目练手了&#xff0c;那项目有难有易&#xff0c;很多小伙伴不知道从哪里找项目来练习&#xff0c;今日我们来看一下初级项目中都…

8个Java实践项目:平均半个小时就可干完~

最近有很多看过Java300集小伙伴私信我说推荐几个Java实践练手项目&#xff0c;在这里我收集了8个可以供大家在平时学习过程中进行练手的项目&#xff01;平均每个项目&#xff0c;半个小时即可完成&#xff01;&#xff01;&#xff01; 最近学习Java的小伙伴们快来练练看看自己…

亲测:三个值得练手的Java实战项目

测试奇谭&#xff0c;BUG不见。 大家好&#xff0c;我是谭叔。 一提到编码&#xff0c;很多小伙伴便感到头疼&#xff0c;特别是半路转行的小伙伴或者没有系统学习过计算机基础的小伙伴。 对于想学而不知道怎么学的小伙伴&#xff0c;我可以分享下我的策略&#xff1a; 刷一…

你必看的Java实战练手项目(附源码)

嗨喽&#xff0c;大家好&#xff0c;关注我&#xff0c;福利不断&#xff01; 不管我们要学习哪种语言都希望能第一时间看到成效&#xff0c;能做出实际的东西来&#xff0c;那么这里所说的实际东西当然就是项目啦&#xff01;不用我说大家也知道&#xff0c;学编程语言不做项目…

12个Java实践项目:练完变学神

【尚学堂Java游戏项目“超级玛丽“】Java实战教程 最近有很多看过java300集小伙伴私信我说推荐几个Java实践练手项目&#xff0c;在这里我收集了12个可以供大家在平时学习过程中进行练手的项目&#xff01; 尚学堂给同学们带来全新的Java300集课程啦!java零基础小白自学Java必备…

Java项目实战【超级详细】

软件开发流程 角色分工 开发环境搭建 创建普通Maven项目编写pom.xml导入依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instanc…

android markdown编辑器,安卓版好用的Markdown编辑器

有很多的朋友一直想找一个安卓手机的markdown编辑器&#xff0c;问我有没有好用的安卓版Markdown编辑器&#xff0c;我要告诉你的是当然有啦&#xff01;到软件应用市场输入“markdown”&#xff0c;对比了一下&#xff0c;发现这款编辑器非常不错。 坚果云markdown软件是一款非…

vue集成MarkDown编辑器插件

这里我们选择的插件是editor.md的插件 首先我们先下载这个插件到本地 官网有提供github下载和npm下载两种方式 , 这里我选择npm下载 npm install editor.md下载后我们需要拷贝一些文件到自己的项目中 将上面的八个文件拷贝到自己的vue项目的static目录中的editormd文件夹下面…

React中使用Markdown编辑器

前言 因为之前写过一个自己的博客&#xff0c;其中编辑文章使用的是富文本编辑器&#xff0c;后来用到Markdown编辑&#xff0c;感觉要比富文本更好用&#xff0c;这里简单记录一下如何在React中添加Markdown编辑器。 一 安装 这里我们选择安装以下几个插件 npm install ma…

简洁的微信Markdown编辑器

老苏写文章习惯使用 Markdown 格式&#xff0c;因为可以一键发布到 hexo&#xff0c;但微信公众号并不支持 Markdown 格式。 最早发微信公众号&#xff0c;是复制粘贴 Markdown 渲染后的预览页面&#xff0c;后来用了墨滴免费的网页版&#xff0c;虽然没有收费版功能全&#x…

Windows最佳Markdown编辑器

This popular article was updated in 2017, covering the newest Markdown editors for Windows and reviewing how some older ones have fared over time. 这篇颇受欢迎的文章于2017年进行了更新&#xff0c;涵盖了Windows的最新Markdown编辑器&#xff0c;并回顾了一些较旧…

最新主流 Markdown 编辑器推荐

Markdown &#xff0c;2004年由 John Gruberis 设计和开发&#xff0c;是一种可以使用普通文本编辑器编写的标记语言&#xff0c;通过简单的标记语法&#xff0c;它可以使普通文本内容具有一定的格式&#xff0c;以下将介绍目前比较流行的一些 Markdown 编辑器&#xff08;排名…