【支付】支付宝支付

下面为你详细介绍使用 Spring Boot 对接支付宝支付,实现支付与退款功能的具体步骤和代码示例。

  1. 添加依赖
    在 pom.xml 里添加支付宝 SDK 依赖:
<dependencies>
    <!-- Spring Boot Web -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <!-- 支付宝 SDK -->
    <dependency>
        <groupId>com.alipay.sdk</groupId>
        <artifactId>alipay-sdk-java</artifactId>
        <version>4.10.103.ALL</version>
    </dependency>
</dependencies>
  1. 配置支付宝信息
    在 application.yml 中配置支付宝相关信息:
alipay:
  app-id: your_app_id
  merchant-private-key: your_merchant_private_key
  alipay-public-key: your_alipay_public_key
  sign-type: RSA2
  gateway-url: https://openapi.alipay.com/gateway.do
  notify-url: your_notify_url
  1. 配置支付宝客户端
    创建配置类来初始化支付宝客户端:
import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class AlipayConfig {

    @Value("${alipay.app-id}")
    private String appId;

    @Value("${alipay.merchant-private-key}")
    private String merchantPrivateKey;

    @Value("${alipay.alipay-public-key}")
    private String alipayPublicKey;

    @Value("${alipay.sign-type}")
    private String signType;

    @Value("${alipay.gateway-url}")
    private String gatewayUrl;

    @Bean
    public AlipayClient alipayClient() {
        return new DefaultAlipayClient(gatewayUrl, appId, merchantPrivateKey, "json", "UTF-8", alipayPublicKey, signType);
    }
}
  1. 实现支付功能
    创建服务类来处理支付业务逻辑:
import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayClient;
import com.alipay.api.request.AlipayTradePagePayRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

@Service
public class AlipayService {

    @Autowired
    private AlipayClient alipayClient;

    @Value("${alipay.notify-url}")
    private String notifyUrl;

    public String pay(String outTradeNo, String totalAmount, String subject, String body) throws AlipayApiException {
        AlipayTradePagePayRequest request = new AlipayTradePagePayRequest();
        request.setReturnUrl(null);
        request.setNotifyUrl(notifyUrl);
        request.setBizContent("{\"out_trade_no\":\"" + outTradeNo + "\","
                + "\"total_amount\":\"" + totalAmount + "\","
                + "\"subject\":\"" + subject + "\","
                + "\"body\":\"" + body + "\","
                + "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}");
        return alipayClient.pageExecute(request).getBody();
    }
}
  1. 实现退款功能
    在服务类中添加退款方法:
import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayClient;
import com.alipay.api.request.AlipayTradeRefundRequest;
import com.alipay.api.response.AlipayTradeRefundResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class AlipayService {

    @Autowired
    private AlipayClient alipayClient;

    public AlipayTradeRefundResponse refund(String outTradeNo, String refundAmount) throws AlipayApiException {
        AlipayTradeRefundRequest request = new AlipayTradeRefundRequest();
        request.setBizContent("{\"out_trade_no\":\"" + outTradeNo + "\","
                + "\"refund_amount\":\"" + refundAmount + "\"}");
        return alipayClient.execute(request);
    }
}
  1. 创建控制器
    创建控制器来处理支付和退款请求:
import com.alipay.api.AlipayApiException;
import com.alipay.api.response.AlipayTradeRefundResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@RestController
@RequestMapping("/alipay")
public class AlipayController {

    @Autowired
    private AlipayService alipayService;

    @GetMapping("/pay")
    public void pay(@RequestParam String outTradeNo, @RequestParam String totalAmount, @RequestParam String subject, @RequestParam String body, HttpServletResponse response) throws AlipayApiException, IOException {
        String form = alipayService.pay(outTradeNo, totalAmount, subject, body);
        response.setContentType("text/html;charset=" + "UTF-8");
        response.getWriter().write(form);
        response.getWriter().flush();
        response.getWriter().close();
    }

    @GetMapping("/refund")
    public AlipayTradeRefundResponse refund(@RequestParam String outTradeNo, @RequestParam String refundAmount) throws AlipayApiException {
        return alipayService.refund(outTradeNo, refundAmount);
    }
}

代码解释
依赖添加:引入 Spring Boot Web 和支付宝 SDK 依赖,以支持 Web 开发和支付宝支付功能。
配置信息:在 application.yml 中配置支付宝所需的关键信息,如应用 ID、商户私钥、支付宝公钥等。
支付宝客户端配置:创建 AlipayConfig 类初始化支付宝客户端。
支付服务类:AlipayService 类包含支付和退款的业务逻辑,调用支付宝客户端的方法完成相应操作。
控制器:AlipayController 处理前端的支付和退款请求,调用服务类的方法完成支付和退款操作。
注意事项
要保证私钥和公钥的正确性与安全性。
处理支付和退款回调时,要对签名进行验证,防止数据被篡改。
严格按照支付宝的开发文档进行开发,及时处理可能出现的异常情况。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值