目录

1.注册登录支付宝开放平台

2.配置支付宝密钥

查看沙箱账号

3.工程搭建 

使用eclipse创建一个springboot工程

创建好后,在pom文件下添加需要的jar包如下:

 编写配置文件application.properties,记得填写自己的私钥,公钥,和支付宝公钥,内容如下:

 将支付宝当面付官方demo下载下来

修改jsp文件,这里我们将jsp中的内部样式删除,才用引入外部样式 base.css

base.css 

 在springboot 2.X之后,静态文件如css、images、js等也会被拦截器拦截,因此需要重写资源映射文件,并且统一配置拦截器。如下图代码

为了能够同时访问到jsp和html页面,需要配置多个视图解析器。编写一个WebViewConfig类,代码如下:

4.工程完成后,进行演示

项目结构如下图:



1.注册登录支付宝开放平台

开发平台链接地址:-->开发平台

点击进入研发服务

android 应用添加window_alipay

 

android 应用添加window_android 应用添加window_02

2.配置支付宝密钥

这里RSA2和RSA只需要设置一个即可。设置方法,可参照官方提示进行配置,需要下载:--> 密钥生成工具

android 应用添加window_支付宝扫码支付_03

生成好后,在本地可以看到有以下两个文本文档

android 应用添加window_支付宝当面付_04

 

将应用公钥里面的内容复制填入到RSA2应用公钥里面,这时候会自动生成支付宝公钥。

查看沙箱账号

可以获取自己的商家和买家测试账号,可以下载安卓版沙箱版支付宝APP进行登录。

android 应用添加window_springboot_05

3.工程搭建 

使用eclipse创建一个springboot工程

android 应用添加window_支付宝扫码支付_06

 

创建好后,在pom文件下添加需要的jar包如下:

<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-thymeleaf</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-tomcat</artifactId>
			<scope>provided</scope>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>

		<dependency>
			<groupId>com.google.code.gson</groupId>
			<artifactId>gson</artifactId>
		</dependency>
		<dependency>
			<groupId>commons-configuration</groupId>
			<artifactId>commons-configuration</artifactId>
			<version>1.10</version>
		</dependency>
		<dependency>
			<groupId>com.google.zxing</groupId>
			<artifactId>core</artifactId>
			<version>3.2.1</version>
		</dependency>
		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
		</dependency>
		<!-- alipay begin -->
		<dependency>
			<groupId>com.alipay.sdk</groupId>
			<artifactId>alipay-sdk-java</artifactId>
			<version>3.7.4.ALL</version>
		</dependency>

		<dependency>
			<groupId>com.alipay</groupId>
			<artifactId>alipay-trade-sdk</artifactId>
			<version>20161215</version>
		</dependency>
		<!-- alipay end -->

		<dependency>
			<groupId>org.apache.tomcat.embed</groupId>
			<artifactId>tomcat-embed-jasper</artifactId>

		</dependency>
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>jstl</artifactId>
		</dependency>
	</dependencies>

 

 编写配置文件application.properties,记得填写自己的私钥,公钥,和支付宝公钥,内容如下:

# 支付宝网关名、partnerId和appId
open_api_domain = https://openapi.alipaydev.com/gateway.do
mcloud_api_domain = http://mcloudmonitor.com/gateway.do
pid = 沙箱账号中的UID
appid = 沙箱应用中的AppID

# RSA私钥、公钥和支付宝公钥
private_key = 使用工具在本地生成的应用私钥
public_key = 使用工具在本地生成的应用公钥
#SHA256withRsa对应支付宝公钥
alipay_public_key = 页面查看支付宝公钥

# 签名类型: RSA->SHA1withRsa,RSA2->SHA256withRsa
sign_type = RSA2
# 当面付最大查询次数和查询间隔(毫秒)
max_query_retry = 5
query_duration = 5000

# 当面付最大撤销次数和撤销间隔(毫秒)
max_cancel_retry = 3
cancel_duration = 2000

# 交易保障线程第一次调度延迟和调度间隔(秒)
heartbeat_delay = 5
heartbeat_duration = 900

 将支付宝当面付官方demo下载下来

官方demo下载地址:-->当面付

pom文件中的以下依赖需要手动安装

<dependency>
			<groupId>com.alipay</groupId>
			<artifactId>alipay-trade-sdk</artifactId>
			<version>20161215</version>
		</dependency>

 按照方法:cmd,进入DOS命令,进入demo项目目录,输入以下命令进行安装

mvn install:install-file -DgroupId=com.alipay -DartifactId=alipay-trade-sdk -Dversion=20161215 -Dpackaging=jar -Dfile=alipay-trade-sdk20161215.jar

找到WebRoot目录下可以看到如下四个jsp页面,分别是条码付、二维码支付、交易查询,退款申请。

android 应用添加window_alipay_07

 

并将post请求修改为get请求,否则会报错([org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'POST' not supported]),将index.html文件放到templates目录下,将demo中images静态文件放到static目录下新建的images下。结构如下图:

android 应用添加window_springboot_08

修改jsp文件,这里我们将jsp中的内部样式删除,才用引入外部样式 base.css

android 应用添加window_支付宝当面付_09

base.css 

@charset "UTF-8";
*{
	margin:0;
	padding:0;
}
ul,ol{
	list-style:none;
}
.title{
    color: #ADADAD;
    font-size: 14px;
    font-weight: bold;
    padding: 8px 16px 5px 10px;
}
.hidden{
	display:none;
}

.new-btn-login-sp{
	border:1px solid #D74C00;
	padding:1px;
	display:inline-block;
}

.new-btn-login{
    background-color: transparent;
    background-image: url("../images/new-btn-fixed.png");
    border: medium none;
}
.new-btn-login{
    background-position: 0 -198px;
    width: 82px;
	color: #FFFFFF;
    font-weight: bold;
    height: 28px;
    line-height: 28px;
    padding: 0 10px 3px;
}
.new-btn-login:hover{
	background-position: 0 -167px;
	width: 82px;
	color: #FFFFFF;
    font-weight: bold;
    height: 28px;
    line-height: 28px;
    padding: 0 10px 3px;
}
.bank-list{
	overflow:hidden;
	margin-top:5px;
}
.bank-list li{
	float:left;
	width:153px;
	margin-bottom:5px;
}

#main{
	width:750px;
	margin:0 auto;
	font-size:14px;
	font-family:'宋体';
}
#logo{
	background-color: transparent;
    background-image: url("../images/new-btn-fixed.png");
    border: medium none;
	background-position:0 0;
	width:166px;
	height:35px;
    float:left;
}
.red-star{
	color:#f00;
	width:10px;
	display:inline-block;
}
.null-star{
	color:#fff;
}
.content{
	margin-top:5px;
}

.content dt{
	width:160px;
	display:inline-block;
	text-align:right;
	float:left;
	
}
.content dd{
	margin-left:100px;
	margin-bottom:5px;
}
#foot{
	margin-top:10px;
}
.foot-ul li {
	text-align:center;
}
.note-help {
    color: #999999;
    font-size: 12px;
    line-height: 130%;
    padding-left: 3px;
}

.cashier-nav {
    font-size: 14px;
    margin: 15px 0 10px;
    text-align: left;
    height:30px;
    border-bottom:solid 2px #CFD2D7;
}
.cashier-nav ol li {
    float: left;
}
.cashier-nav li.current {
    color: #AB4400;
    font-weight: bold;
}
.cashier-nav li.last {
    clear:right;
}
.alipay_link {
    text-align:right;
}
.alipay_link a:link{
    text-decoration:none;
    color:#8D8D8D;
}
.alipay_link a:visited{
    text-decoration:none;
    color:#8D8D8D;
}

 在springboot 2.X之后,静态文件如css、images、js等也会被拦截器拦截,因此需要重写资源映射文件,并且统一配置拦截器。如下图代码

package cn.campusshop.configuration;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;

@Configuration
public class WebMvcConfiguration extends WebMvcConfigurationSupport {
    @Override
    protected void addViewControllers(ViewControllerRegistry registry) {

        registry.addViewController("/").setViewName("index");
        registry.addViewController("/trade_pay").setViewName("jsp/trade_pay");
        registry.addViewController("/trade_precreate").setViewName("jsp/trade_precreate");
        registry.addViewController("/trade_query").setViewName("jsp/trade_query");
        registry.addViewController("/trade_refund").setViewName("jsp/trade_refund");
        registry.setOrder(2);

        super.addViewControllers(registry);
    }

    /**
     * @Description: 配置静态文件映射
     */
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");
    }

}

为了能够同时访问到jsp和html页面,需要配置多个视图解析器。编写一个WebViewConfig类,代码如下:

package cn.campusshop.configuration;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.servlet.view.InternalResourceViewResolver;
import org.thymeleaf.spring5.SpringTemplateEngine;
import org.thymeleaf.spring5.templateresolver.SpringResourceTemplateResolver;
import org.thymeleaf.spring5.view.ThymeleafViewResolver;
import org.thymeleaf.templateresolver.ITemplateResolver;


@Configuration
@EnableWebMvc
@ComponentScan
public class WebViewConfig implements WebMvcConfigurer {
    /**
     * @Description: 注册jsp视图解析器
     */
    @Bean
    public ViewResolver viewResolver() {
        InternalResourceViewResolver resolver = new InternalResourceViewResolver();
        resolver.setPrefix("/WEB-INF/"); // 配置放置jsp文件夹
        resolver.setSuffix(".jsp");
        resolver.setViewNames("jsp/*"); // 重要 setViewNames 通过它识别为jsp页面引擎
        resolver.setOrder(2);
        return resolver;
    }

    /**
     * @Description: 注册html视图解析器
     */
    @Bean
    public ITemplateResolver templateResolver() {
        SpringResourceTemplateResolver templateResolver = new SpringResourceTemplateResolver();
        templateResolver.setTemplateMode("HTML");
        templateResolver.setPrefix("classpath:/templates/");
        templateResolver.setSuffix(".html");
        templateResolver.setCharacterEncoding("utf-8");
        templateResolver.setCacheable(false);
        return templateResolver;
    }

    /**
     * @Description: 将自定义tml视图解析器添加到模板引擎并主持到ioc
     */
    @Bean
    public SpringTemplateEngine templateEngine() {
        SpringTemplateEngine templateEngine = new SpringTemplateEngine();
        templateEngine.setTemplateResolver(templateResolver());
        return templateEngine;
    }

    /**
     * @Description: Thymeleaf视图解析器配置
     */
    @Bean
    public ThymeleafViewResolver viewResolverThymeLeaf() {
        ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
        viewResolver.setTemplateEngine(templateEngine());
        viewResolver.setCharacterEncoding("utf-8");
        viewResolver.setViewNames(new String[] {"thymeleaf"});
        viewResolver.setOrder(1);
        return viewResolver;
    }

    @Override
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
        configurer.enable();
    }

    /**
     * @Description: 配置静态文件映射
     */
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");
    }
}

4.工程完成后,进行演示

项目结构如下图:

点击springbootapplication右键运行

android 应用添加window_android 应用添加window_10

浏览器输入:http://localhost:8080/

android 应用添加window_支付宝扫码支付_11

 

条码支付

android 应用添加window_支付宝扫码支付_12

二维码支付

android 应用添加window_支付宝扫码支付_13

 

订单查询

android 应用添加window_支付宝当面付_14

 

订单退款

android 应用添加window_支付宝当面付_15

经测试,以上功能均能实现,沙箱支付宝可以查询交易明细

android 应用添加window_android 应用添加window_16