支付宝支付之SpringBoot整合支付宝入门

支付宝支付

对接流程

  1. 申请阿里支付官方企业账号
  2. 配置应用
  3. 签约产品
  4. 获取RSAKey(非对称加密)必须获得两个加密串:一个公钥,一个密钥
  5. SDK功能开发
  6. 业务对接
  7. 支付回调
  8. 支付组件

核心所需的参数

  • APPID
  • 商家私钥
  • 支付宝公钥
  • 支付回调地址
  • 网关地址
  • 加密签名算法RSA2

申请注册

官方网址:https://open.alipay.com/


配置开发信息

接口加签方式

发起支付订单案例

pom.xml

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.2.4</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.sin</groupId>
    <artifactId>demozifubao</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>demozifubao</name>
    <description>demozifubao</description>
    <properties>
        <java.version>17</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-test</artifactId>
            <scope>test</scope>
        </dependency>

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

        <!-- https://mvnrepository.com/artifact/com.alipay.sdk/alipay-sdk-java -->
        <dependency>
            <groupId>com.alipay.sdk</groupId>
            <artifactId>alipay-sdk-java</artifactId>
            <version>4.39.40.ALL</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.30</version>
        </dependency>


    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

application.yml

yml 复制代码
server:
  port: 80
alipay:
  # 应用ID
  appId: 
  # 应用私钥
  privateKey: 
  # 支付宝公钥
  publicKey: 
  gatewayUrl: https://openapi.alipay.com/gateway.do

AlipayController.java

java 复制代码
package com.sin.demo.controller;

import com.alipay.api.AlipayApiException;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.request.AlipayTradePrecreateRequest;
import com.alipay.api.response.AlipayTradePrecreateResponse;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * 支付宝支付控制器类
 * @createTime 2024/4/16 9:24
 * @createAuthor SIN
 * @use 用于生成支付二维码
 */
@RestController
@RequestMapping(value = "/pay")
@Slf4j
public class AlipayController {

    // 从配置文件中获取参数值
    @Value("${alipay.appId}")
    private String appId; // 支付宝支付者id

    @Value("${alipay.privateKey}")
    private String privateKey; // 商户应用私钥

    @Value("${alipay.publicKey}")
    private String publicKey; // 支付宝公钥

    @Value("${alipay.gatewayUrl}")
    private String gatewayUrl; // 支付宝网关URL

    /**
     * 请求生成支付二维码的接口
     *
     * @return 生成的支付二维码地址
     * @throws AlipayApiException 支付宝API异常
     */
    @GetMapping("/qrCode")
    public String generateQrCode() throws AlipayApiException {
        // 创建支付宝客户端
        DefaultAlipayClient client = new DefaultAlipayClient(gatewayUrl, appId, privateKey, "json", "UTF-8", publicKey, "RSA2");

        // 创建预下单请求对象
        AlipayTradePrecreateRequest request = new AlipayTradePrecreateRequest();
        // 设置测试业务参数
        request.setBizContent("{\"out_trade_no\":\"20220416001\"," // 商户订单号
                + "\"total_amount\":\"0.01\"," // 订单总金额
                + "\"subject\":\"测试订单\"}"); // 订单标题

        // 执行预下单请求
        AlipayTradePrecreateResponse response = client.execute(request);

        // 判断预下单请求是否成功
        if (response.isSuccess()) {
            // 获取生成的支付二维码信息
            final String qrCode = response.getQrCode();
            // 打印二维码信息到控制台
            System.out.println("二维码信息:" + qrCode);
            // 记录生成支付二维码成功的日志
            log.info("生成支付二维码成功:{}", response.getBody());
            // 返回生成的支付二维码地址
            return "支付宝支付二维码地址:" + qrCode;
        } else {
            // 记录生成支付二维码失败的日志
            log.error("生成支付二维码失败:{}", response.getSubMsg());
            // 返回生成支付二维码失败的信息
            return "生成支付二维码失败:" + response.getSubMsg();
        }
    }
}

将获取到的请求地址发送给客户,客户在支付宝中进行支付

相关推荐
lovPopcorn2 分钟前
MQ入门(一):同步调用和异步调用--RabbitMQ基础入门
java·rabbitmq
极客先躯23 分钟前
高级java每日一道面试题-2024年9月15日-架构篇[分布式篇]-如何在分布式系统中实现事务?
java·数据库·分布式·面试·架构·事务·分布式篇
bugtraq20211 小时前
Fyne ( go跨平台GUI )中文文档-绘图和动画(三)
开发语言·后端·golang
椅子哥1 小时前
MyBatis操作数据库-XML实现
xml·java·数据库·spring boot·mybatis
Adolf_19931 小时前
Flask-JWT-Extended登录验证
后端·python·flask
2402_857589361 小时前
基于Spring Boot的Java免税商品优选商城设计
java·spring boot·后端
L_cl1 小时前
数据结构与算法——Java实现 7.习题——反转链表
java·开发语言·链表
我明天再来学Web渗透2 小时前
【java面经】微服务架构速记
java·开发语言·微服务·云原生·架构
秦淮渔火2 小时前
单例模式(饿汉式-懒汉式)
java·开发语言·单例模式
蔚一2 小时前
Java设计模式(单例模式)——单例模式存在的问题(完整详解,附有代码+案例)
java·开发语言·单例模式·设计模式