springboot集成支付宝支付

本人研究了半天终于完成了支付宝支付操作,至于支付完成后的回调由于是本机无法测试,所以暂时未作,现在把步骤写一下,以免以后有用。

1.商户审核,这就不用说了。支付宝那里就有,而且主要是沙箱测试,所以只需申请密钥就可以

2.application.yml的配置

ali_return_url: 同步回调地址
ali_notify_url: 异步回调地址
product_code: FAST_INSTANT_TRADE_PAY
timeout_express: 15m
url: https://openapi.alipaydev.com/gateway.do
appid: **************
private_key: 生成密钥时的私钥
ali_public_key: 查看支付宝公钥
sign_type: RSA2

3.商品信息的实体类

import org.springframework.web.servlet.tags.Param;

public class AlipayParam extends Param {
    /*金额*/
    private String amount;
    /*订单名称*/
    private String orderName;
    /*订单号唯一标识*/
    private String orderId;

    public String getAmount() {
        return amount;
    }

    public String getOrderName() {
        return orderName;
    }

    public String getOrderId() {
        return orderId;
    }

    public void setAmount(String amount) {
        this.amount = amount;
    }

    public void setOrderName(String orderName) {
        this.orderName = orderName;
    }

    public void setOrderId(String orderId) {
        this.orderId = orderId;
    }
}

4.controller

import com.cy.param.AlipayParam;
import com.cy.service.AliPayService;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@Controller
@RequestMapping("alipay")
public class AliPayController {
    @Resource
    private AliPayService alipayService;

    //1.申请付款
    @RequestMapping(value = "/pay", method = RequestMethod.POST)
    public String alipay(AlipayParam alipayParam, ModelMap map){
        map.addAttribute("form", alipayService.alipay(alipayParam));
        return "pay";
    }
}

5.传入的商品信息类(此类可以和商品信息实体类合并,只是正式项目有很多其他操作,现分开使用)

import org.springframework.web.servlet.tags.Param;

public class AlipayOrderParam extends Param {
    private String out_trade_no;//商户订单号
    private String total_amount;//总金额
    private String subject;//订单标题
    private String product_code;//销售产品码,与支付宝签约的产品码名称。
    private String timeout_express;//该笔订单允许的最晚付款时间,逾期将关闭交易。

    public String getOut_trade_no() {
        return out_trade_no;
    }

    public String getTotal_amount() {
        return total_amount;
    }

    public String getSubject() {
        return subject;
    }

    public String getProduct_code() {
        return product_code;
    }

    public String getTimeout_express() {
        return timeout_express;
    }

    public void setOut_trade_no(String out_trade_no) {
        this.out_trade_no = out_trade_no;
    }

    public void setTotal_amount(String total_amount) {
        this.total_amount = total_amount;
    }

    public void setSubject(String subject) {
        this.subject = subject;
    }

    public void setProduct_code(String product_code) {
        this.product_code = product_code;
    }

    public void setTimeout_express(String timeout_express) {
        this.timeout_express = timeout_express;
    }
}

6.支付处理的接口类

import com.cy.param.AlipayParam;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public interface AliPayService {

    /**
     * 付款
     * @param alipayParam 付款参数
     * @return 付款返回值
     */
    String alipay(AlipayParam alipayParam);

    /**
     * 付款同步返回地址
     * @param request
     * @return
     */
    String synchronous(HttpServletRequest request);

    /**
     * 付款异步通知调用地址
     * @param request 新增参数
     * @return 新增返回值
     */
    void notify(HttpServletRequest request, HttpServletResponse response);
}

7.支付处理

import com.alibaba.fastjson.JSON;
import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.request.AlipayTradePagePayRequest;
import com.cy.param.AlipayOrderParam;
import com.cy.param.AlipayParam;
import com.cy.service.AliPayService;
import com.cy.untils.CustomAnnotationScan;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@Service
public class AlipayServiceImpl implements AliPayService {

    private static final Logger logger = LoggerFactory.getLogger(CustomAnnotationScan.class);

    @Value("${ali_return_url}")
    private String ali_return_url;

    @Value("${ali_notify_url}")
    private String ali_notify_url;

    @Value("${product_code}")
    private String product_code;

    @Value("${timeout_express}")
    private String timeout_express;

    @Value("${url}")
    private String url;

    @Value("${appid}")
    private String appid;

    @Value("${private_key}")
    private String private_key;

    @Value("${ali_public_key}")
    private String ali_public_key;

    @Value("${sign_type}")
    private String sign_type;

    @Override
    public String alipay(AlipayParam alipayParam) {
        AlipayClient alipayClient = new DefaultAlipayClient(url, appid, private_key, "json", "UTF-8", ali_public_key, sign_type);
        AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest();
        alipayRequest.setReturnUrl(ali_return_url);
        alipayRequest.setNotifyUrl(ali_notify_url);
        AlipayOrderParam alipayOrderParam = new AlipayOrderParam();
        alipayOrderParam.setOut_trade_no(alipayParam.getOrderId());//唯一标识
        alipayOrderParam.setSubject(alipayParam.getOrderName());
        alipayOrderParam.setTotal_amount(alipayParam.getAmount());
        alipayOrderParam.setProduct_code(product_code);
        alipayOrderParam.setTimeout_express(timeout_express);
        alipayRequest.setBizContent(JSON.toJSONString(alipayOrderParam));
        String webForm = "";
        try {
            webForm = alipayClient.pageExecute(alipayRequest).getBody(); //调用SDK生成表单
        } catch (Exception e) {
            logger.error("支付请求发送失败");
        }
        return webForm;
    }

    @Override
    public String synchronous(HttpServletRequest request) {
        return null;
    }

    @Override
    public void notify(HttpServletRequest request, HttpServletResponse response) {

    }
}

8.支付页面

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>支付宝电脑网站支付</title>
</head>
<body th:utext=${form}>

</body>
</html>

9.项目使用的maven需要的包

<dependency>
    <groupId>com.alipay.sdk</groupId>
    <artifactId>alipay-sdk-java</artifactId>
    <version>3.7.26.ALL</version>
</dependency>
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.49</version>
</dependency>

统一收单下单并支付页面接口的地址:小程序文档 - 支付宝文档中心

快速接入的地址:小程序文档 - 支付宝文档中心

SDK&Demo的地址:小程序文档 - 支付宝文档中心

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值