spring boot 集成支付宝模块(沙箱)--简单版本 --快速入门

本文详细介绍了如何在Java项目中整合支付宝SDK,包括添加依赖、配置沙箱环境、创建初始化bean以及编写支付和回调接口。通过示例代码展示了支付接口的关键参数设置,同时提供了支付回调接口的实现,确保支付状态的正确更新。内网穿透工具NATAPP被推荐用于测试回调接口。

1.导入相关依赖

<!--支付宝-->
        <dependency>
            <groupId>com.alipay.sdk</groupId>
            <artifactId>alipay-easysdk</artifactId>
            <version>2.2.0</version>
        </dependency>

2.登录支付获取沙箱环境

登录支付宝开发者

 开启默认公玥得到公玥与私玥

 下面才是私玥

 3.创建bean获取后续必须要用的值

application.yml配置(noyifyUrl没有公网请用内网穿透工具 后面我会讲)

 创建初始化阿里支付的bean

import com.alipay.easysdk.factory.Factory;
import com.alipay.easysdk.kernel.Config;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;

@Data
@Component
@ConfigurationProperties(prefix = "aliyun.pay")
@Slf4j
public class AliPayBean {
    private String appId; //ID
    private String appPrivateKey; //私玥
    private String appPublicKey; //公玥
    private String notifyUrl; //支付成功 回调地址 必须是公网IP

    @PostConstruct
    public void init(){
        //支付初始化
        Config option=getOptions();
        option.appId=this.appId;
        option.merchantPrivateKey=this.appPrivateKey;
        option.alipayPublicKey=this.appPublicKey;
        option.notifyUrl=this.notifyUrl;
        Factory.setOptions(option);
        log.info("支付宝bean初始化成功");
    }
    public Config getOptions(){
        Config config=new Config();
        config.protocol="https";
        config.gatewayHost="openapi.alipaydev.com"; //设置网关 支付宝默认
        config.signType="RSA2"; //加密方式
        return config;
    }
}

编写支付Vo

@Data
public class AliPay {
    private String subject; //商家名
    private String traceNo; //订单号 自拟 11都行
    private String totalAmount; //支付金额
}

3.编写支付接口

重点说三个参数:1.subject:商家名称  2.支付单号(可自拟)3.支付金额

 @GetMapping("pay")
    public String alipay(AliPay aliPay) throws Exception {
        //禁止重复支付
        QueryWrapper<Order> orderQueryWrapper=new QueryWrapper<>();
        orderQueryWrapper.eq("order_no",aliPay.getTraceNo());
        orderQueryWrapper.eq("status",1);//支付状态1 已支付
        long count = service.count(orderQueryWrapper);
        if (count!=0){
            return "PAYED(请勿重复支付)";//已支付
        }
        //校验金额是否正确
        QueryWrapper<Order> QueryWrapper=new QueryWrapper<>();
        QueryWrapper.eq("order_no",aliPay.getTraceNo());
        QueryWrapper.eq("total_fee",aliPay.getTotalAmount());//金额校验
        long flag = service.count(QueryWrapper);
        if (flag==0){
            return "小黑客你在想啥呢...............";
        }
        AlipayTradePagePayResponse response;
        response=Factory.Payment.Page()
                .pay(URLEncoder.encode(aliPay.getSubject(),"UTF-8"),aliPay.getTraceNo(),aliPay.getTotalAmount(),"");
        return response.getBody();
    }

 4.编写支付回调接口(查看回调是否成功,成功表示支付成功)如果你支付成功 请求就会打在你的公网回调地址

自我测试建议使用内网穿透工具,临时将自己主机变成公网ip 这里我给你们推荐免费工具

NATAPP-内网穿透 基于ngrok的国内高速内网映射工具

(使用请注意使用当前服务端口映射正确)

@PostMapping("callback")
    public String callback(HttpServletRequest request){
        if (request.getParameter("trade_status")==null){
            log.info("出现非法请求支付回调api");
            return "PAY IS ERROR";
        }
        if (request.getParameter("trade_status").equals("TRADE_SUCCESS")){
            Map<String,String> params=new HashMap<>();
            Map<String,String[]> requestParams=request.getParameterMap();
            for (String name : requestParams.keySet()) {
                params.put(name,request.getParameter(name));
                //回调各种参数
            }
            String orderNo=params.get("out_trade_no");
            Integer updateStatus=1; //1 表示已支付
            //更新支付状态
            UpdateWrapper<Order> orderUpdateWrapper=new UpdateWrapper<>();
            orderUpdateWrapper.eq("order_no",orderNo);
            orderUpdateWrapper.set("status",updateStatus);
            service.update(orderUpdateWrapper);
        }
        return "SUCCESS";
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值