在Spring Boot项目中集成支付宝的网站支付、APP支付、单笔转账给用户以及退款功能,可以通过以下步骤实现:

在Spring Boot项目中集成支付宝的网站支付、APP支付、单笔转账给用户以及退款功能,可以通过以下步骤实现:

1. 项目准备

1.1 添加依赖

pom.xml中添加支付宝SDK依赖:
xml复制
<dependency>
    <groupId>com.alipay.sdk</groupId>
    <artifactId>alipay-sdk-java</artifactId>
    <version>4.9.79.ALL</version>
</dependency>

1.2 配置支付宝参数

application.ymlapplication.properties中配置支付宝相关参数:
yaml复制
alipay:
  app-id: your-app-id
  merchant-private-key: your-private-key
  alipay-public-key: alipay-public-key
  notify-url: http://your-domain/notify
  return-url: http://your-domain/return
  gateway-url: https://openapi.alipay.com/gateway.do
  format: json
  charset: utf-8
  sign-type: RSA2

2. 支付功能实现

2.1 网站支付

创建支付服务类AlipayService,实现网站支付功能:
java复制
import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.request.AlipayTradePagePayRequest;

@Service
public class AlipayService {
    @Autowired
    private Environment env;

    public String createWebPayment(String subject, String totalAmount) {
        AlipayClient alipayClient = new DefaultAlipayClient(
                env.getProperty("alipay.gateway-url"),
                env.getProperty("alipay.app-id"),
                env.getProperty("alipay.merchant-private-key"),
                "json",
                "UTF-8",
                env.getProperty("alipay.alipay-public-key"),
                "RSA2");

        AlipayTradePagePayRequest request = new AlipayTradePagePayRequest();
        request.setReturnUrl(env.getProperty("alipay.return-url"));
        request.setNotifyUrl(env.getProperty("alipay.notify-url"));
        request.setBizContent("{"
                + ""out_trade_no":"" + UUID.randomUUID().toString() + "","
                + ""total_amount":"" + totalAmount + "","
                + ""subject":"" + subject + "","
                + ""product_code":"FAST_INSTANT_TRADE_PAY""
                + "}");

        try {
            return alipayClient.pageExecute(request).getBody();
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
}

2.2 APP支付

APP支付的实现方式类似,但需要调用AlipayTradeAppPayRequest接口,生成支付参数后返回给APP客户端。

3. 单笔转账给用户

实现单笔转账功能:
java复制
import com.alipay.api.request.AlipayFundTransUniTransferRequest;

public String transfer(String outBizNo, String payeeAccount, String amount) {
    AlipayClient alipayClient = new DefaultAlipayClient(
            env.getProperty("alipay.gateway-url"),
            env.getProperty("alipay.app-id"),
            env.getProperty("alipay.merchant-private-key"),
            "json",
            "UTF-8",
            env.getProperty("alipay.alipay-public-key"),
            "RSA2");

    AlipayFundTransUniTransferRequest request = new AlipayFundTransUniTransferRequest();
    request.setBizContent("{"
            + ""out_biz_no":"" + outBizNo + "","
            + ""payee_type":"ALIPAY_LOGON_ID","
            + ""payee_account":"" + payeeAccount + "","
            + ""amount":"" + amount + "","
            + ""remark":"转账备注""
            + "}");

    try {
        return alipayClient.execute(request).getBody();
    } catch (Exception e) {
        e.printStackTrace();
        return null;
    }
}

4. 退款功能

实现退款功能:
java复制
import com.alipay.api.request.AlipayTradeRefundRequest;

public String refund(String outTradeNo, String refundAmount) {
    AlipayClient alipayClient = new DefaultAlipayClient(
            env.getProperty("alipay.gateway-url"),
            env.getProperty("alipay.app-id"),
            env.getProperty("alipay.merchant-private-key"),
            "json",
            "UTF-8",
            env.getProperty("alipay.alipay-public-key"),
            "RSA2");

    AlipayTradeRefundRequest request = new AlipayTradeRefundRequest();
    request.setBizContent("{"
            + ""out_trade_no":"" + outTradeNo + "","
            + ""refund_amount":"" + refundAmount + """
            + "}");

    try {
        return alipayClient.execute(request).getBody();
    } catch (Exception e) {
        e.printStackTrace();
        return null;
    }
}

5. 异步通知处理

创建一个Controller处理支付宝的异步通知:
java复制
@PostMapping("/notify")
public String handleNotify(HttpServletRequest request) {
    Map<String, String> params = request.getParameterMap().entrySet().stream()
            .collect(Collectors.toMap(Map.Entry::getKey, e -> e.getValue()[0]));

    boolean verifyResult = AlipaySignature.rsaCheckV1(params, env.getProperty("alipay.alipay-public-key"), "UTF-8", "RSA2");
    if (verifyResult) {
        String outTradeNo = params.get("out_trade_no");
        String totalAmount = params.get("total_amount");
        // 更新订单状态等业务逻辑
        return "success";
    } else {
        return "fail";
    }
}

6. 安全与测试

  • 签名验证:确保所有回调和请求都进行签名验证,防止数据被篡改。
  • HTTPS配置:强制使用HTTPS,保护用户数据。
  • 沙箱测试:在支付宝沙箱环境中测试支付、退款、回调等功能。
通过以上步骤,你可以在Spring Boot项目中完整实现支付宝的网站支付、APP支付、单笔转账和退款功能。

[自动更新内容]