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

游戏充值平台+第3方支付平台源码+游戏网关支付接口20230724 这款游戏支付源码也许适合你 ! 源码内容我就不过多介绍,你们看演示站就可以了、支持主流几款游戏 热血传奇 传奇世界 传奇3 魔域 天龙八部 劲舞团 诛仙 完美世界 奇迹 神泣 蜀门 天龙八部3 自定义游戏 立即下载

来自:欧阳思海

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

前言

本教程详细介绍了如何使用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 '支付方式            1:支付宝            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 '订单状态            10:待付款            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<Orders> 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);}

三、支付宝支付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的全过程了。

(完)

长按关注,每天java一下,成就架构师

我就知道你在看!

支付宝源代码以及文档 支付宝源代码以及文档,需要的可以下载,很实用,看完保证会 立即下载

相关推荐

实现支付宝支付的功能,使用了ssm框架来编写,springboot也完全可以套用(java)加qq群可白嫖:562258133

加qq群可白嫖:562258133 实现了支付宝的沙箱测试,大家可以去网上搜索教程或者学习官方文档来在这个项目中去修改成自己的私网和公网。 上项目中我使用了自己的公网和私网,需要我发沙箱测试账号的可以在下评论,直接运行是可以看到支付页面的出现的效果的 此项目使用了spring+springmvc来编写,通过控制器来进行资源分配 大家遇到任何项目的问题都可以在下评论或私聊我

接私活神器!基于SpringBoot2+Vue+Redis的企业级聚合支付系统(附源码)

推荐关注编辑:蜗牛|来源:计全科技正文项目介绍大家好,我是蜗牛。今天推荐的是一套适合互联网企业使用的开源支付系统,支持多渠道服务商和普通商户模式。已对接微信支付,支付宝,云闪付官方接口,支...

JAVA高级架构 1014

java内核支付系统源码 jeepay聚合支付四方支付系统

支持多渠道对接,支付网关自动路由; 已对接微信服务商和普通商户接口,支持 V2 和 V3 接口; 已对接支付宝服务商和普通商户接口,支持 RSA 和 RSA2 签名; 已对接云闪付服务商接口,可选择多家支付机构; 提供 http 形式接口,提供各语言的 sdk 实现,方便对接; 接口请求和响应数据采用签名机制,保证交易安全可靠; 系统安全,支持分布式部署,高并发; 管理端包括运营平台和商户系统; 管理平台操作界面简洁、易用; 支付平台到商户系统的订单通知使用 MQ 实现,保证了高可用,消息可达; 支付渠道的接口参数配置界面自动化生成; 使用 Spring Security 实现权限管理; 前后端分离架构,方便二次开发。 搭建安装方式具体看文件包,带开发文档。

SSM项目————整合微信支付

一、准备页面1、第一个页面,购票页面2、第二个页面,详情支付页面3、第三个页面,支付成功跳转页面二、准备二维码(测试一下)三、准备微信参数、环境、HttpClient工具类、雪花算法工具类。四、开始支付功能编码(下单)五、开始支付功能编码(查询订单状态)————————创作不易,如觉不错,随手点赞,关注,收藏(* ̄︶ ̄),谢谢~~ 我们这里只看支付,其他跟支付无关的东西不看 一、准备页面 主要有三个页面 1、第一个页面,购票页面 2、第二个页面,详情支付页面 紫色的三个是跟我们支付有关的 3、第三个页.

weixin_42858422的博客 5808

ChatGPT Web转API工具:原理、部署与集成实战

在AI应用开发中,API(应用程序编程接口)是实现系统间通信和数据交换的核心技术,它通过标准化的请求响应机制,将复杂功能封装为可编程的服务。其工作原理基于HTTP协议,通过定义清晰的端点、方法和数据格式,使不同平台的应用能够高效集成AI能力。这一技术价值在于极大降低了开发门槛,促进了自动化流程和智能功能的快速落地,广泛应用于智能客服、内容生成和创意辅助等场景。本文聚焦于如何通过浏览器自动化技术,将ChatGPT的Web界面能力转化为标准API服务,其中涉及Playwright无头浏览器操作和会话Cookie

weixin_42533910的博客 1769

Replay音频转换时samplerate缺失的解决方案指南

Replay音频转换时提示"No module named 'samplerate' This error is lazily reported, having originally occured in File"的解决方案

weixin_47445543的博客 2137

Java互联网支付系统源码,基于SpringBoot,含支付宝,微信,银联详细代码案例

支付服务:支付宝,微信,银联详细(支付宝和微信支付测试均需要企业认证,如果没有企业推荐使用申请开通个人商户 也可以测试),项目启动前请仔细阅读。

Python代码大全 3845

从零部署奥比中光Gemini335L:Python SDK编译与手眼标定环境实战

本文提供了一份从零部署奥比中光Gemini 335L深度相机的完整实战指南。详细介绍了驱动安装、Python SDK编译、CMake配置及虚拟环境搭建等关键步骤,并重点解析了如何通过编译生成Python模块,最终实现深度图与点云数据获取,为后续的机械臂手眼标定工作奠定坚实基础。

weixin_29031161的博客 399

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

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

weixin_44421461的博客 465

2024年物联网嵌入式最新嵌入式期末大作业——家用智能晾衣杆,初面蚂蚁金服

在家用智能晾衣杆中,用户可以根据自身的需要,切换手动和自动两个模式。天气对应的接口对应心知天气的天气图,可以下载后:调整尺寸->调整透明度->用画图工具保存为单色位图->提取出点阵信息(如我用的zimoV2.2软件),将点阵信息,存到数组里,根据weather的信息,调用display.drawBitmap()方法就能打印出对应的天气了。该库依赖于,将他们导入后,设置屏幕的主从关系,片选信号和数据,时钟信号等引脚后,就设置好屏幕的驱动。

2401_85013604的博客 1248

硅纪元应用测评 | AI搜索引擎大比拼:360AI搜索、秘塔搜索、GenSpark AI和天工AI对比评测

搜索引擎输出的每个段落都有对应的出处,如果有错误,也是信息源的问题,从普通用户的角度来看,这与AI搜索的产品关系不大,能让用户对AI搜索的服务和得到的信息有一个隔离。同时,提供更多的定制选项,允许用户根据自己的偏好调整搜索结果的权重和排序,将使得搜索体验更加个性化和满足用户的具体需求。此外,大部分搜索工具还提供了一个无广告的搜索环境(360AI搜索部分内容会有广告),极大地提升了用户的搜索体验。AI搜索的本质依然是搜索,但它通过AI的逻辑分析和语言重新组织,使用户能够快速得到想要的信息。

guijiyuantech的博客 2014

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

AutoSAR配置视频讲解:简介

AutoSAR实验视频讲解:闪烁一颗LED实验【简介】 大家好,欢迎来到雪云飞星的《AutoSAR实验课的视频讲解》专栏。看过《AutoSAR入门到精通系列讲解》的朋友们应该对博主不陌生,有很多朋友加了博主的微信成为了好友,还有朋友约过线下见面,博主很高兴大家能从我的博客中获得一些收获。在专栏里博主挖了很多坑,当时也说过想要录制一个AutoSAR的配置视频教程,素材在20年初就已经录好,中间各种原因足足鸽了一年。当时因为一些技术原因只能通过博客的图文形式展示出来,现在我们剪辑了视频,请了专业的配音,希望以视

雪云飞星的博客 9658

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

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

m0_37711292的博客 283

时间序列预测 — 预测数据集(负荷、风电、光伏、销量等)

GEFCom2014 “负荷预测数据”为竞赛的公共数据集,GEFCom2014 的负荷预测轨迹为概率负荷预测。

几度春风里的博客 2万+

【大语言模型 14】Transformer权重初始化策略:从Xavier到GPT的参数初始化演进之路

权重初始化是深度学习训练成功的隐秘基石,特别是在Transformer这样的深层架构中,合适的初始化策略能够决定模型的训练稳定性和收敛速度。本文从经典的Xavier和He初始化出发,深入解析Transformer特有的初始化策略,通过数学推导、代码实现和实验分析,揭示不同初始化方法对大语言模型训练的深层影响。我们将探讨为什么GPT系列模型采用特定的初始化方案,以及如何针对不同层设计最优的初始化策略。

熵数实验室 1688

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

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

weixin_39557373的博客 182

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

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

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

timmyroy的博客 1210

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

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

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

朱小厮的博客 1314

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

上一篇: Linux最常用命令:简单易学,但能解决95%以上的问题
下一篇: 阿里巴巴为什么能抗住90秒100亿?看完这篇你就明白了!
Java思维导图
博客等级 码龄10年 306粉丝 71原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值