springboot3+vue2前后端分离——支付宝沙箱使用教程

项目结构

前端

预览

在这里插入图片描述
在这里插入图片描述

后端

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: 应用基本信息已提供

源码

Gitee:简易版支付宝沙箱

  • 23
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mredust

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值