springboot实现支付宝支付(沙箱环境)

这篇具有很好参考价值的文章主要介绍了springboot实现支付宝支付(沙箱环境)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 获取应用id,应用私钥和支付宝公钥

进入支付宝控制台:https://open.alipay.com/develop/manage

找到沙箱
springboot实现支付宝支付(沙箱环境)
springboot实现支付宝支付(沙箱环境)
这里可以看到应用id
springboot实现支付宝支付(沙箱环境)
可以看到应用私钥支付宝公钥,获取这三后就可以开始敲代码了

2. 开始开发

依赖:

        <!--支付宝-->
        <dependency>
            <groupId>com.alipay.sdk</groupId>
            <artifactId>alipay-sdk-java</artifactId>
            <version>4.34.0.ALL</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>

在resources/templates目录下创建一个pay.html文件,用于展示支付宝支付页面。

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
	<meta charset="UTF-8">
	<title>支付宝支付</title>
</head>
<body onload="document.forms[0].submit();">
	<div th:utext="${form}"></div>
</body>
</html>

创建同步通知页面
在resources/templates目录下创建一个return.html文件,用于展示同步通知结果。

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
	<meta charset="UTF-8">
	<title>支付结果</title>
</head>
<body>
	<h1 th:text="${message}"></h1>
</body>
</html>
# 支付宝支付参数配置
alipay:
  # 应用ID,您的APPID,收款账号既是您的APPID对应支付宝账号
  appId: 111111111111111111
  # 应用私钥,您的PKCS8格式RSA2私钥
  privateKey: 11111111111111111
  # 支付宝公钥
  publicKey: 111111111111111111111111
  # 支付宝网关
  gatewayUrl: https://openapi.alipaydev.com/gateway.do
  # 服务器异步通知页面路径  需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问
  notifyUrl: http://花生壳地址:花生壳端口/api/alipay/notify
  # 页面跳转同步通知页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问
  returnUrl: http://花生壳地址:花生壳端口/returnView.html
/**
 * @version 1.0.0
 * @date 2023/6/8
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class PayRequest {

    /**
     * 订单编号
     */
    private String out_trade_no;

    /**
     * 商品名称
     */
    private String subject;

    /**
     * 支付金额
     */
    private BigDecimal total_amount;

    /**
     * 商品描述
     */
    private String body;

    /**
     * 电脑网站支付场景固定传值FAST_INSTANT_TRADE_PAY
     */
    private String product_code="FAST_INSTANT_TRADE_PAY";

    /**
     * PC扫码支付的方式
     */
    private String qr_pay_mode;

    /**
     * 支付渠道
     */
    private String enable_pay_channels/*="balance,pcredit,moneyFund,bankPay,creditCard,pcreditpayInstallment"*/;

    /**
     * 商户自定义二维码宽度。
     * 注:qr_pay_mode=4时该参数有效
     */
    private String qrcode_width;
}

/**
 * 支付配置类
 */
@Configuration
@ConfigurationProperties(prefix = "alipay")
@Data
public class PayAliConfig {

    /**
     * 应用ID,您的APPID,收款账号既是您的APPID对应支付宝账号
     */
    public  String appId;
    
    /**
     * 应用私钥,您的PKCS8格式RSA2私钥
     */
    public String privateKey;

    /**
     * 支付宝公钥
     */
    public String publicKey;
    
    /**
     * 服务器异步通知页面路径  需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问
     */
    public  String notifyUrl;

    /**
     * 页面跳转同步通知页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问
     */
    public  String returnUrl;

    /**
     * 支付宝网关
     */
    public String gatewayUrl;

}
/**
 * 初始化AlipayClient
 * @version 1.0.0
 * @date 2023/6/7
 */
@Component
public class AliPayClient {

    @Autowired
    private PayAliConfig payAliConfig;

    @Bean
    public AlipayClient AlipayClient()  throws AlipayApiException {
        AlipayConfig alipayConfig = new AlipayConfig();
        //设置网关地址
        alipayConfig.setServerUrl(payAliConfig.gatewayUrl);
        //设置应用ID
        alipayConfig.setAppId(payAliConfig.appId);
        //设置应用私钥
        alipayConfig.setPrivateKey(payAliConfig.privateKey);
        //设置请求格式,固定值json
        alipayConfig.setFormat(AlipayConstants.FORMAT_JSON);
        //设置字符集
        alipayConfig.setCharset(AlipayConstants.CHARSET_UTF8);
        //设置支付宝公钥
        alipayConfig.setAlipayPublicKey(payAliConfig.publicKey);
        //设置签名类型
        alipayConfig.setSignType(AlipayConstants.SIGN_TYPE_RSA2);
        //构造client
        AlipayClient alipayClient = new DefaultAlipayClient(alipayConfig);
        return alipayClient;
    }
}
/**
 * @version 1.0.0
 * @date 2023/6/6
 */
@RestController
@RequestMapping("/api/alipay")
@Api(tags = "网站支付宝支付")
@Slf4j
public class AlipayController {
    @Autowired
    private AliPayService alipayService;

    /**
     * 创建支付订单,返回支付页面
     */
    @GetMapping("/pay")
    @Timing(remark = "创建支付订单")
    public ModelAndView pay(){

        String outTradeNo= IdUtil.simpleUUID();
        String subject="测试商品";
        BigDecimal totalAmount = BigDecimal.valueOf(250);

        PayRequest payRequest = new PayRequest();
        payRequest.setOut_trade_no(outTradeNo);
        payRequest.setSubject(subject);
        payRequest.setTotal_amount(totalAmount);
        payRequest.setBody("这是一个测试商品描述哦");
        payRequest.setQr_pay_mode("2");

        AlipayTradePagePayResponse response = alipayService.pay(payRequest);
        if (response == null) {
            return null;
        }
        log.info("响应:{}",response.getBody());
        // 返回支付页面
        ModelAndView modelAndView = new ModelAndView("pay");
        modelAndView.addObject("form", response.getBody());

        return modelAndView;
    }


    /**
     * 处理支付宝异步通知
     */
    @PostMapping("/notify")
    @Timing(remark = "处理支付宝异步通知")
    public void notify(HttpServletRequest request, HttpServletResponse response) throws Exception {
        boolean signVerified = alipayService.rsaCheckV1(request);
        // 将请求参数转换为Map
        if (signVerified) {
            // 处理支付成功逻辑,更新订单状态等操作
            response.getWriter().write("success"); // 告诉支付宝已经收到通知并处理成功
        } else {
            response.getWriter().write("failure"); // 告诉支付宝验签失败
        }
    }
}
/**
 * @version 1.0.0
 * @date 2023/6/7
 */
public interface AliPayService {

    AlipayTradePagePayResponse pay(PayRequest payRequest);

    boolean rsaCheckV1(HttpServletRequest request);
}

/**
 * @version 1.0.0
 * @date 2023/6/7
 */
@Service
@Slf4j
public class AliPayServiceImpl implements AliPayService {

    @Autowired
    private AlipayClient alipayClient;

    @Autowired
    private PayAliConfig payAliConfig;

    @Override
    public AlipayTradePagePayResponse pay(PayRequest payRequest) {
        // 构造请求参数
        AlipayTradePagePayRequest request = new AlipayTradePagePayRequest();
        request.setReturnUrl(payAliConfig.getReturnUrl());
        request.setNotifyUrl(payAliConfig.getNotifyUrl());
        log.info("生成的字符串:{}", JSONUtil.toJsonStr(payRequest));

        request.setBizContent(JSONUtil.toJsonStr(payRequest));
//        request.setBizContent("{\"out_trade_no\":\"" + UUID.randomUUID().toString().replaceAll("-", "") + "\","
//                + "\"total_amount\":\"0.01\","
//                + "\"subject\":\"测试商品\","
//                + "\"body\":\"测试商品详情\","
//                + "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}");

        // 调用SDK生成表单
        try {
            return alipayClient.pageExecute(request);
        } catch (AlipayApiException e) {
            log.error("支付宝请求失败");
        }
        return null;
    }

    @Override
    public boolean rsaCheckV1(HttpServletRequest request) {
        boolean flag = false;
        Map<String, String> params = new HashMap<>();
        Enumeration<String> parameterNames = request.getParameterNames();
        while (parameterNames.hasMoreElements()) {
            String paramName = parameterNames.nextElement();
            String paramValue = request.getParameter(paramName);
            params.put(paramName, paramValue);
        }
        // 调用SDK验证签名
        try {
            flag =AlipaySignature.rsaCheckV1(params, payAliConfig.publicKey, AlipayConstants.CHARSET_UTF8, AlipayConstants.SIGN_TYPE_RSA2);
        } catch (AlipayApiException e) {
            log.error("验签失败");
        }
        return flag;
    }
}

3. 内网穿透

花生壳:https://hsk.oray.com/
下载安装配置一下就好了

4. 测试支付功能

启动Spring Boot应用,访问http://localhost:8889/api/alipay/pay,即可看到支付宝支付页面。输入支付密码后,会自动跳转到同步通知页面,并显示支付结果。

账号密码在沙箱账号中看到

springboot实现支付宝支付(沙箱环境)
springboot实现支付宝支付(沙箱环境)
springboot实现支付宝支付(沙箱环境)文章来源地址https://www.toymoban.com/news/detail-479612.html

到了这里,关于springboot实现支付宝支付(沙箱环境)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SpringBoot项目(支付宝整合)——springboot整合支付宝沙箱支付 & 从极简实现到IOC改进

    1.springboot整合支付宝沙箱支付; 2.准备工作:沙箱api,内网穿透; 3.极简实现理解支付,异步回调等; 4.按照spring依赖注入的思想改造基础demo; https://gitee.com/pet365/springboot-alipay 支付宝开放平台 (alipay.com) 支付参数 natapp.cn官网 启动和配置 订单ID,需要唯一;价格;物品名称(

    2024年02月11日
    浏览(27)
  • 支付宝沙箱环境配置结合内网穿透实现远程调试Java SDK接口

    1.测试环境 Maven Spring boot Jdk 1.8 2.本地配置 获取支付宝支付Java SDK,maven项目可以选择maven版本,普通java项目可以在GitHub下载,这里以maven为例 SDK下载地址:https://doc.open.alipay.com/docs/doc.htm?treeId=193articleId=103419docType=1 选择最新版的SDK版本 复制maven坐标,导入spring boot项目pom 文件里面

    2024年02月04日
    浏览(40)
  • SpringBoot+支付宝支付(沙箱)

    easy支付官方文档: 工具 | 网页移动应用 通用版文档: 通用版 | 网页移动应用 有基础的可以直接看文档自己搭建,官方文档写的很详细。 支付宝沙箱配置 1、注册支付宝开发者账户,进入开发者控制台 (有支付宝账户的直接支付宝扫码登入即可) 支付宝开放平台   htt

    2024年02月06日
    浏览(32)
  • 支付宝手机网站支付接入(沙箱环境)

    参考阿里云文档:https://docs.open.alipay.com/203/105285/ 手机网站支付产品包含两类API: 页面跳转类:需要从前端页面以Form表单的形式发起请求,浏览器会自动跳转至支付宝的相关页面(一般是收银台或签约页面),用户在该页面完成相关业务操作后再回跳到商户指定页面。例如本

    2024年02月08日
    浏览(25)
  • Springboot支付宝沙箱支付---完整详细步骤

    不经常看消息和评论,代码和数据库已上传至gitee 项目源码 沙箱环境-支付宝文档中心 1.1、进入个人沙箱环境 点击进入沙箱环境并用支付宝登陆 沙箱管理界面如图所示 appid,支付宝网关,自定义密钥等 这里是沙箱支付宝(虚拟)的账号和密码,可以用来支付 1.2、接下来进行

    2023年04月25日
    浏览(39)
  • SpringBoot集成沙箱支付

    支付宝沙箱支付( Alipay Sandbox Payment )是支付宝提供的一个模拟支付环境,用于开发和测试支付宝支付功能的开发者工具。在真实的支付宝环境中进行支付开发和测试可能涉及真实资金和真实用户账户,而沙箱环境则提供了一个安全、隔离的环境,使开发者能够模拟支付过程

    2024年02月03日
    浏览(28)
  • spring boot支付宝沙箱环境测试支付功能

    目录 一、安装支付宝支付demo 二、配置demo信息 三、配置回调地址和异步地址 四、内网穿透 (一)简介 (二)使用场景 (三)内网穿透的几个常用软件 (四)使用natapp 选择Java版本,下载后是一个eclipse项目 SDK Demo 获取 - 支付宝文档中心 (alipay.com) 导入ideal参考:IDEA导入Ec

    2024年01月17日
    浏览(35)
  • 公网环境调试本地配置的Java支付宝沙箱环境模拟支付场景

    在沙箱环境调试支付SDK的时候,往往沙箱环境部署在本地,局限性大,在沙箱环境中有多种支付场景,往往是多人联合开发,本地环境可能无法满足异地联合,所以把本地环境变成公网环境下进行调试开发会更好。 本次教程,我们将使用支付宝平台提供的沙箱环境,在本地配

    2024年01月22日
    浏览(44)
  • Java集成支付宝沙箱支付,详细教程(SpringBoot完整版)

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 easy支付官方文档:https://opendocs.alipay.com/open/009ys9 通用版文档:https://opendocs.alipay.com/open/02np94 支付宝沙箱的配置: 注册支付宝开发者账户,进入开发者控制台 沙箱快捷入口: https://open.alipay.com/develop/

    2024年02月20日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包