支付宝沙箱使用教程
项目结构
前端
预览
后端
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-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.1.6</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.mredust</groupId>
<artifactId>order-demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>order-demo</name>
<description>order-demo</description>
<properties>
<java.version>21</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- 支付宝支付的依赖 -->
<dependency>
<groupId>com.alipay.sdk</groupId>
<artifactId>alipay-sdk-java</artifactId>
<version>4.16.2.ALL</version>
</dependency>
<!-- fastjson -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>2.0.1</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
</project>
yml
application.yml
server:
port: 4090
servlet:
context-path: /mredust-order
spring:
profiles:
include: alipay
application-alipay.yml
alipay:
# appid:必填
appId:
# 客户私钥:必填
privateKey:
# 支付宝公钥:必填
publicKey:
# 支付宝网关:必填
gatewayUrl:
# 回调地址
notifyUrl:
# 支付完成后返回的地址
returnUrl: http://localhost:3090/
# 签名方式
signType: RSA2
# 字符编码格式
charset: utf-8
# 格式
format: json
model
/**
* @Auther: Mredust
* @Description: 商品订单实体类(支付实体对象)
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Accessors(chain = true)
public class Order {
/**
* 商品订单号:必填唯一
*/
private String out_trade_no;
/**
* 订单名称:必填
*/
private String subject;
/*
* 付款金额:必填
*/
private String total_amount;
/**
* 超时时间参数
*/
private String timeout_express = "10m";
/**
* 产品编号
*/
private String product_code = "FAST_INSTANT_TRADE_PAY";
}
config
package com.mredust.config;
import com.alibaba.fastjson.JSON;
import com.alipay.api.AlipayApiException;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.request.AlipayTradePagePayRequest;
import com.mredust.model.Order;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;
/**
* 配置文件读取
*/
@Configuration
public class AliPayConfig {
/**
* 应用ID,您的APPID,收款账号既是您的APPID对应支付宝账号
*/
@Value("${alipay.appId}")
private String appId;
/**
* 商户私钥,您的PKCS8格式RSA2私钥
*/
@Value("${alipay.privateKey}")
private String privateKey;
/**
* 支付宝公钥,
*/
@Value("${alipay.publicKey}")
private String publicKey;
/**
* 服务器异步通知页面路径需http://格式的完整路径,不能加?id=123这类自定义参数
*/
@Value("${alipay.notifyUrl}")
private String notifyUrl;
/**
* 页面跳转同步通知页面路径 需http://格式的完整路径.
* 支付完成后返回的地址
*/
@Value("${alipay.returnUrl}")
private String returnUrl;
/**
* 签名方式
*/
@Value("${alipay.signType}")
private String signType;
/**
* 字符编码格式
*/
@Value("${alipay.charset}")
private String charset;
/**
* 支付宝网关
*/
@Value("${alipay.gatewayUrl}")
private String gatewayUrl;
/**
* 格式
*/
@Value("${alipay.format}")
private String format;
public String pay(Order order) throws AlipayApiException {
DefaultAlipayClient alipayClient = new DefaultAlipayClient(gatewayUrl, appId, privateKey, format, charset, publicKey, signType);
AlipayTradePagePayRequest request = new AlipayTradePagePayRequest();
request.setReturnUrl(returnUrl);
request.setNotifyUrl(notifyUrl);
request.setBizContent(JSON.toJSONString(order));
String body = alipayClient.pageExecute(request).getBody();
return body;
}
}
service
接口
public interface AliPayService {
String aliPay(Order order) throws AlipayApiException;
}
接口实现
@Service
public class AliPayServiceImpl implements AliPayService {
@Autowired
private AliPayConfig aliPayConfig;
@Override
public String aliPay(Order order) throws AlipayApiException {
return aliPayConfig.pay(order);
}
}
.
支付宝沙箱环境
1.支付宝密钥工具
下载
地址链接:密钥工具下载 - 支付宝文档中心 (alipay.com)
根据自己使用的系统选择下载
使用
打开软件后,直接点击生产密钥。
保存好公钥和密钥后续用到
2.支付宝沙箱配置
地址链接:支付宝文档中心
依次点击沙箱环境,登录本人的支付宝账号
选择自定义密钥(备注:APPID、支付宝网关地址后续用到)
填入刚刚生成的公钥,公钥,公钥
点击保存后则会生成两个公钥:一个原本的,一个后续使用的。点击确定
3.付款方式
扫码支付
扫码下载支付宝沙箱app,登录买家的账号后扫码支付即可(模拟场景更真实)
手动支付
不用扫码,直接根据买家账号输入账号和密码支付即可
4.后端属性配置
appId:应用基本信息已提供
privateKey: 用密钥工具生成的密钥
publicKey: 根据公钥生成的支付宝公钥
gratewayUrl: 应用基本信息已提供