Spring MVC+Spring+Mybatis实现支付宝支付功能(图文详解)

SpringMVC+Mybatis+Spring项目整合实例 SSM整合的一个项目,数据库用的MYSQL,附带数据库文件,在项目里面修改db.properties配置文件里面的数据库参数就可以运行了。项目里面的spring、springMVC、mybatis的.xml文件都是分开写的,每个配置都有注释,很简洁和简单,一看就会!希望对新学习的童鞋有帮助。 立即下载

前言

本教程详细介绍了如何使用ssm框架实现支付宝支付功能。本文章分为两大部分,分别是「支付宝测试环境代码测试」和「将支付宝支付整合到ssm框架」,详细的代码和图文解释,自己实践的时候一定仔细阅读相关文档,话不多说我们开始。

本教程源代码:

https://github.com/OUYANGSIHAI/sihai-maven-ssm-alipay

一、支付宝测试环境代码测试

1. 下载电脑网站的官方demo:

下载:https://docs.open.alipay.com/270/106291/

2. 下载解压导入eclipse

readme.txt请好好看一下。

只有一个Java配置类,其余都是JSP。

3. 配置AlipayConfig

(1) 注册蚂蚁金服开发者账号(免费,不像苹果会收取费用)

注册地址:https://open.alipay.com ,用你的支付宝账号扫码登录,完善个人信息,选择服务类型(我选的是自研)。

(2) 设置app_id和gatewayUrl

其中密钥需要自己生成,appID和支付宝网关是已经给好的,网关有dev字样,表明是用于开发测试。

(3) 设置密钥

点击“生成方法”,打开界面如下:

下周密钥生成工具,解压打开后,选择2048位生成密钥:

如果没有设置过,此时显示文本是"设置应用公钥",我这里是已经设置过得。

设置方法,"打开密钥文件路径":

复制应用公钥2048.txt中的内容到点击"设置应用公钥"的弹出框中,保存:

  • 商户私钥(merchant_private_key)

    复制 应用私钥2048.txt 中的内容到merchant_private_key中。

  • 支付宝公钥(alipay_public_key)

点击如上图链接,复制弹出框里面的内容到alipay_public_key。

如果这个设置不对,结果是:支付成功,但是验签失败。

如果是正式环境,需要上传到对应的应用中:

(4) 服务器异步通知页面路径(notify_url)

如果没有改名,修改IP和端口号就可以了,我自己的如下:

http://localhost:8080/alipay.trade.page.pay-JAVA-UTF-8/notify_url.jsp

(5) 页面跳转同步通知页面的路径(return_url)

http://localhost:8080/alipay.trade.page.pay-JAVA-UTF-8/return_url.jsp

4. 测试运行

测试用的支付宝买家账户可以在"沙箱账"这个页面可以找到:

支付成功后,验签结果:

问题解决

由于我们使用的是沙箱测试环境,测试环境和正式上线的环境的网关是不一样的,如果配置错误,会出现,appid错误的问题。配置如下:

源代码下载:

链接: https://pan.baidu.com/s/1n6GbEJiMzoGWJrSw0bb2Cg 

密码: zd9e

二、将支付宝支付整合到ssm框架

1. 项目架构

  • 项目架构:spring+springmvc+mybatis

  • 数据库:mysql

  • 部署环境:tomcat9.0

  • 开发环境:jdk9、idea

  • 支付:支付宝、微信

整合到ssm一样,我们需要像沙箱测试环境一样,需要修改支付的配置信息

2. 数据库代码

主要包括以下的数据库表:

  • user:用户表

  • order:支付产生的订单

  • flow:流水账

  • product:商品表:用于模拟购买商品。

  • drop table if exists user;
    
    /*==============================================================*/
    /* Table: user                                                  */
    /*==============================================================*/
    create table user
    (
       id                   varchar(20) not null,
       username             varchar(128),
       sex                  varchar(20),
       primary key (id)
    );
    
    alter table user comment '用户表';
    
    
    CREATE TABLE `flow` (
      `id` varchar(20) NOT NULL,
      `flow_num` varchar(20) DEFAULT NULL COMMENT '流水号',
      `order_num` varchar(20) DEFAULT NULL COMMENT '订单号',
      `product_id` varchar(20) DEFAULT NULL COMMENT '产品主键ID',
      `paid_amount` varchar(11) DEFAULT NULL COMMENT '支付金额',
      `paid_method` int(11) DEFAULT NULL COMMENT '支付方式\r\n            1:支付宝\r\n            2:微信',
      `buy_counts` int(11) DEFAULT NULL COMMENT '购买个数',
      `create_time` datetime DEFAULT NULL COMMENT '创建时间',
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='流水表';
    
    
    CREATE TABLE `orders` (
      `id` varchar(20) NOT NULL,
      `order_num` varchar(20) DEFAULT NULL COMMENT '订单号',
      `order_status` varchar(20) DEFAULT NULL COMMENT '订单状态\r\n            10:待付款\r\n            20:已付款',
      `order_amount` varchar(11) DEFAULT NULL COMMENT '订单金额',
      `paid_amount` varchar(11) DEFAULT NULL COMMENT '实际支付金额',
      `product_id` varchar(20) DEFAULT NULL COMMENT '产品表外键ID',
      `buy_counts` int(11) DEFAULT NULL COMMENT '产品购买的个数',
      `create_time` datetime DEFAULT NULL COMMENT '订单创建时间',
      `paid_time` datetime DEFAULT NULL COMMENT '支付时间',
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='订单表';
    
    
    CREATE TABLE `product` (
      `id` varchar(20) NOT NULL,
      `name` varchar(20) DEFAULT NULL COMMENT '产品名称',
      `price` varchar(11) DEFAULT NULL COMMENT '价格',
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='产品表 ';
    
    

    3. dao数据接口层

    这里就不介绍了,这个只包括简单的curd,可以使用`通用mapper`,或者`逆向工程`就行。以订单order为例给出:

  • public interface OrdersMapper {
        int countByExample(OrdersExample example);
    
        int deleteByExample(OrdersExample example);
    
        int deleteByPrimaryKey(String id);
    
        int insert(Orders record);
    
        int insertSelective(Orders record);
    
        List selectByExample(OrdersExample example);
    
        Orders selectByPrimaryKey(String id);
    
        int updateByExampleSelective(@Param("record") Orders record, @Param("example") OrdersExample example);
    
        int updateByExample(@Param("record") Orders record, @Param("example") OrdersExample example);
    
        int updateByPrimaryKeySelective(Orders record);
    
        int updateByPrimaryKey(Orders record);
    }

    4. service层

    同上,最后在项目源代码里可见。 以订单order为例给出:

  • /**
     * 订单操作 service
     * @author ibm
     *
     */
    public interface OrdersService {
    
        /**
         * 新增订单
         * @param order
         */
        public void saveOrder(Orders order);
    
        /**
         * 
         * @Title: OrdersService.java
         * @Package com.sihai.service
         * @Description: 修改叮当状态,改为 支付成功,已付款; 同时新增支付流水
         * Copyright: Copyright (c) 2017
         * Company:FURUIBOKE.SCIENCE.AND.TECHNOLOGY
         * 
         * @author sihai
         * @date 2017年8月23日 下午9:04:35
         * @version V1.0
         */
        public void updateOrderStatus(String orderId, String alpayFlowNum, String paidAmount);
    
        /**
         * 获取订单
         * @param orderId
         * @return
         */
        public Orders getOrderById(String orderId);
    
    }

    5. 支付宝支付controller(支付流程)

    支付流程图

    首先,启动项目后,输入http://localhost:8080/,会进入到商品页面,如下:

    下面是页面代码

    商品页面(products.jsp)

    代码实现:

  • <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>  
    <script src="<%=request.getcontextpath()>/static/js/jquery.min.js" type="text/javascript">script>
    
    <html>
    
        <head>
    
        head>
    
        <body>
    
            <table>
                <tr>
                    <td>
                        产品编号
                    td>
                    <td>
                        产品名称
                    td>
                    <td>
                        产品价格
                    td>
                    <td>
                        操作
                    td>
                tr>
                <c:forEach items="${pList }" var="p">
                    <tr>
                        <td>
                            ${p.id }
                        td>
                        <td>
                            ${p.name }
                        td>
                        <td>
                            ${p.price }
                        td>
                        <td>
                            <a href="<%=request.getcontextpath()>/alipay/goConfirm.action?productId=${p.id }">购买a>
                        td>
                    tr>
    
                c:forEach>
            table>
    
            <input type="hidden" id="hdnContextPath" name="hdnContextPath" value="<%=request.getcontextpath()>"/>
        body>
    
    html>
    
    
    <script type="text/javascript">
    
        $(document).ready(function() {
    
            var hdnContextPath = $("#hdnContextPath").val();
    
    
        });
    
    
    script>

    点击上面的购买,进入到订单页面

    填写个数,然后点击生成订单,调用如下代码

    根据SID(生成id的工具)等信息生成订单,保存到数据库。

    进入到选择支付页面

    调用了如下代码:

    然后,我们选择支付宝支付,进入到了我们支付的页面了,大功告成!

    调用了如下代码:

  • /**
         *
         * @Title: AlipayController.java
         * @Package com.sihai.controller
         * @Description: 前往支付宝第三方网关进行支付
         * Copyright: Copyright (c) 2017
         * Company:FURUIBOKE.SCIENCE.AND.TECHNOLOGY
         *
         * @author sihai
         * @date 2017年8月23日 下午8:50:43
         * @version V1.0
         */
        @RequestMapping(value = "/goAlipay", produces = "text/html; charset=UTF-8")
        @ResponseBody
        public String goAlipay(String orderId, HttpServletRequest request, HttpServletRequest response) throws Exception {
    
            Orders order = orderService.getOrderById(orderId);
    
            Product product = productService.getProductById(order.getProductId());
    
            //获得初始化的AlipayClient
            AlipayClient alipayClient = new DefaultAlipayClient(AlipayConfig.gatewayUrl, AlipayConfig.app_id, AlipayConfig.merchant_private_key, "json", AlipayConfig.charset, AlipayConfig.alipay_public_key, AlipayConfig.sign_type);
    
            //设置请求参数
            AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest();
            alipayRequest.setReturnUrl(AlipayConfig.return_url);
            alipayRequest.setNotifyUrl(AlipayConfig.notify_url);
    
            //商户订单号,商户网站订单系统中唯一订单号,必填
            String out_trade_no = orderId;
            //付款金额,必填
            String total_amount = order.getOrderAmount();
            //订单名称,必填
            String subject = product.getName();
            //商品描述,可空
            String body = "用户订购商品个数:" + order.getBuyCounts();
    
            // 该笔订单允许的最晚付款时间,逾期将关闭交易。取值范围:1m~15d。m-分钟,h-小时,d-天,1c-当天(1c-当天的情况下,无论交易何时创建,都在0点关闭)。 该参数数值不接受小数点, 如 1.5h,可转换为 90m。
            String timeout_express = "1c";
    
            alipayRequest.setBizContent("{\"out_trade_no\":\""+ out_trade_no +"\","
                    + "\"total_amount\":\""+ total_amount +"\","
                    + "\"subject\":\""+ subject +"\","
                    + "\"body\":\""+ body +"\","
                    + "\"timeout_express\":\""+ timeout_express +"\","
                    + "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}");
    
            //请求
            String result = alipayClient.pageExecute(alipayRequest).getBody();
    
            return result;
        }

    这段代码都可以在阿里支付的demo里面找到的,只需要复制过来,然后改改,整合到ssm环境即可。

    上面就是将阿里支付宝支付整合到ssm的全过程了。

    PS:如果觉得我的分享不错,欢迎大家随手点赞、转发。

    原文:github.com/OUYANGSIHAI/sihai-maven-ssm-alipay

Golang实战:用Quic-Go v0.46.0搭建高性能文件传输服务(附完整代码) 本文详细介绍了如何使用Golang和Quic-Go v0.46.0构建高性能文件传输服务,涵盖服务端和客户端的完整实现。通过QUIC协议的多路复用、零RTT连接等特性,显著提升文件传输效率,特别适合高延迟或不稳定网络环境。文章提供完整代码示例和性能调优技巧,帮助开发者快速部署高效的文件传输解决方案。 阅读详情

相关推荐

Python 列表(list)所有方法超全汇总

以上就是 Pythonlist 列表全部 11 个内置方法的完整汇总,全覆盖、无遗漏。掌握所有列表方法,基本可以应对 99% 的列表操作场景,无论是日常开发、数据分析还是算法刷题都能高效编码。

jdksjw的博客 234

Spring MVC+Spring+Mybatis实现支付宝支付功能(图文详解)(转载)

Spring MVC+Spring+Mybatis实现支付宝支付功能(图文详解)   前言 本教程详细介绍了如何使用ssm框架实现支付宝支付功能。本文章分为两大部分,分别是「支付宝测试环境代码测试」和「将支付宝支付整合到ssm框架」,详细的代码和图文解释,自己实践的时候一定仔细阅读相关文档,话不多说我们开始。 支付宝测试环境代码测试 源代码 https://github.com/OU...

timmyroy的博客 1210

避坑指南:STM32CubeMX安装后,你的第一个工程为什么中文全是乱码?

本文详细解析了STM32CubeMX安装后中文乱码问题的根源及解决方案。从诊断乱码现象到分析编码冲突背景,提供了新项目UTF-8化、旧项目GBK兼容及版本降级等多种实用方案,帮助开发者彻底解决这一常见问题。

weixin_30699955的博客 474

SSM项目整合支付宝支付接口

SSM项目整合支付宝支付接口

qq_51447436的博客 3169

从零到英雄:WSL2与Ubuntu22.04的终极性能调优指南

本文详细介绍了如何在Windows系统中通过WSL2与Ubuntu22.04进行性能调优,涵盖内核定制、GPU加速、网络优化等关键技巧,帮助开发者打造媲美原生Linux的高性能开发环境,特别适合AI训练和大数据处理等资源密集型任务。

weixin_29218509的博客 523

AGM Supra软件从零到一:国产CPLD工程创建全流程拆解

本文详细拆解了AGM Supra软件从零开始创建国产CPLD工程的全流程,包括开发环境配置、工程创建、Quartus项目转换、TCL脚本执行与编译等关键步骤。特别强调了中文路径避坑、器件型号选择等实用技巧,帮助开发者高效完成CPLD开发任务。

weixin_29158413的博客 410

ssm集成沙箱支付宝支付

之前测试一直显示系统繁忙,问了一下才旧版沙箱已经停止维护了,要登录新版沙箱。

m0_59925573的博客 1521

Skyworks SKY85331-11的Wi-Fi 6 (802.11ax)标准 2.4G 高功率WLAN前端模块解决方案

SKY85331-11是高度集成的2 GHz前端模块(FEM)包含2 GHz单刀双掷(SPDT)发送/接收(T / R)开关,2 GHz低噪声放大器(LNA)带旁路和一个2 GHz功率放大器(PA),用于大功率802.11ax应用程序和系统LNA和PA禁用功能可确保低漏电流 关闭模式。 包括一个集成的功率检测器以提供系统内的闭环功率控制。该设备提供Small (24-pin, 3 x 5 mm) (LGA)封装。 图1.引脚配置和封装如图所示 图2.信号引脚分配和功能引脚描述 图...

zhangbao19890622的博客 4505

Spring MVC+ Spring + Mybatis “三大框架”介绍

为什么要使用框架? 对于绝大部分 JavaWeb 开发者来说,开发的第一个项目应该都是以 JSP 或者 JSP+Servlet 形式完成的项目,之后陆陆续续、大大小小的项目应该也是以此为基础进行开发,当你看到你一个个完美的作品竣工完结之时,心满意足之余你可能会有这样一种疑惑,明明使用 JSP+Servlet 技术就可以完成的项目为什么要使用各种框架? 首先,这些项目只是学习过程中的练习项目,其...

Java笔记 3万+

【YOLO26实战全攻略】10——YOLO26+SAM3实战:从检测到像素级分割的全流程指南(含PCB缺陷检测案例)

本文聚焦YOLO26与SAM3的融合应用,系统讲解“检测+分割”的三种核心模式:YOLO26原生分割(轻量高效)、YOLO26检测+SAM3精细分割(精度极致)、SAM3自动标注+YOLO26蒸馏(低成本冷启动)。从环境搭建、数据集准备、模型训练、性能优化到边缘部署,提供 step-by-step 实操教程,配套完整可运行代码与执行结果。结合虚拟PCB缺陷检测案例,展示像素级缺陷识别与几何参数测量的工业级应用流程。本文兼顾新手入门与进阶提升,注重实用价值,读者可直接参考搭建自己的分割系统。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 625

数据服务:数据服务框架Magic-API 介绍及实践

接口快速开发框架 基于Java的接口快速开发框架,编写接口将通过magic-api提供的UI界面完成,自动映射为HTTP接口,无需定义Controller、Service、Dao、Mapper、XML、VO等Java对象即可完成常见的HTTP API接口开发 。在线页面快速开发平台 基于 vue 的在线页面快速开发平台,主要把所有的 vue 代码都改为在线配置,最终获得一个 json 格式的页面新一代爬虫平台 基于Java实现的新一代爬虫平台,以图形化方式定义爬虫流程,不写代码即可完成爬虫。今天给大家安利一

GIS摆渡人 2063

手把手教你整合最优雅SSM框架:SpringMVC + Spring + MyBatis

http://blog.youkuaiyun.com/qq598535550/article/details/51703190我们看招聘信息的时候,经常会看到这一点,需要具备SSH框架的技能;而且在大部分教学课堂中,也会把SSH作为最核心的教学内容。 但是,我们在实际应用中发现,SpringMVC可以完全替代Struts,配合注解的方式,编程非常快捷,而且通过restful风格定义url,让地址看起来非常优雅

霍力强的专栏 2万+

Vue2 - 实现H5人脸识别认证与活体检测功能(纯前端免费方案+微信人脸识别接口)完整源码,vue微信公众号网页h5端人脸识别功能人脸核身(微信方案提供后端spring boot+thinkphp)

vue人脸识别插件,vue, h5人脸识别, 微信公众号, 活体检测, 人脸核身,人脸登录、人脸识别,VUE项目-H5端人脸识别功能实现,免费h5人脸识别插件方案,微信公众号H5网页实现人脸识别,vue人脸核身,Vue H5活体检测认证,人脸认证张嘴摇摇头指引动作,人脸核身 微信原生 H5(微信公众号)vue2调用手机摄像头并实现人脸识别的实现,微信h5人脸识别vue项目,PHP人脸识别,java人脸识别,h5页面,有免费的人脸识别接口吗,用于微信公众号及嵌套在微信浏览器,vue3如何实现人脸识别,微信人脸

🏆 前端领域优质创作者 3763

Spring MVC+Spring+Mybatis实现支付宝支付功能(图文详解+完整代码)

Spring MVC+Spring+Mybatis实现支付宝支付功能(图文详解+完整代码)支付宝测试环境代码测试源代码 支付宝测试环境代码测试 源代码 https://github.com/OUYANGSIHAI/sihai-maven-ssm-alipay 1.下载电脑网站的官方demo: 下载:https://docs.open.alipay.com/270/106291/ 2.下载解压导入...

m0_37540783的博客 1197

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Spring MVC+Spring+MyBatis实现支付宝扫码支付功能(图文详解)

点击上方“朱小厮的博客”,选择“设为星标”后台回复”加群“加入公众号专属技术群前言本教程详细介绍了如何使用 SSM 框架实现支付宝支付功能。本文章分为两大部分,分别是「支付宝测试环境代码测试」和「将支付宝支付整合到 SSM 框架」,详细的代码和图文解释,自己实践的时候一定仔细阅读相关文档,话不多说我们开始。支付宝测试环境代码测试1.下载电脑网站的官方demo:下载:https://docs.ope...

朱小厮的博客 1313

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Spring MVC+Spring+Mybatis实现支付宝支付功能(图文详解+代码

本教程详细介绍了如何使用ssm框架实现支付宝支付功能。本文章分为两大部分,分别是「支付宝测试环境代码测试」和「将支付宝支付整合到ssm框架」,详细的代码和图文解释,自己实践的时候一定仔细阅读相关文档,话不多说我们开始。 支付宝测试环境代码测试 源代码 https://github.com/OUYANGSIHAI/sihai-maven-ssm-alipay 1.下载电脑网站的官方demo:...

weixin_30922589的博客 552

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Spring MVC + Spring + Mybatis 实现支付宝支付功能(图文详解+完整代码)

点击上方“Java基基”,选择“设为星标”做积极的人,而不是积极废人!源码精品专栏原创 | Java 2020超神之路,很肝~中文详细注释的开源项目RPC 框架 Dubbo 源码解析...

weixin_44421461的博客 465

Spring MVC+Spring+Mybatis实现支付宝支付功能(图文详解+完整支付宝,微信代码)

前言 本教程详细介绍了如何使用ssm框架实现支付宝支付功能。本文章分为两大部分,分别是「支付宝测试环境代码测试」和「将支付宝支付整合到ssm框架」,详细的代码和图文解释,自己实践的时候一定仔细阅读相关文档,话不多说我们开始。 一、支付宝测试环境代码测试 1、下载电脑网站的官方demo: 下载:https://docs.open.alipay.com/270/106291/ 2.下载解...

m0_37711292的博客 283

Spring MVC+Spring+Mybatis实现支付宝支付和微信支付功能(图文详解+完整代码)

前言 本教程详细介绍了如何使用ssm框架实现支付宝支付功能。本文章分为两大部分,分别是「支付宝测试环境代码测试」和「将支付宝支付整合到ssm框架」,详细的代码和图文解释,自己实践的时候一定仔细阅读相关文档,话不多说我们开始。 支付宝测试环境代码测试 源代码 https://github.com/OUYANGSIHAI/sihai-maven-ssm-alipay 1.下载电脑网站的官方demo: 下载:https://docs.open.alipay.com/270/106291/ 2.下

一蓑烟雨任平生 1409
上一篇: springcloud(十一):服务网关Zuul高级篇
下一篇: HashMap和ConcurrentHashMap原理及源码解读
木木那年
博客等级 码龄12年 37粉丝 36原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值