java对接支付宝支付项目的实战记录

 更新时间:2022年06月20日 15:59:03   作者:简单哟  
最近公司有一个需求是接入第三方支付(微信&支付宝),我接到了支付宝支付,所以下面这篇文章主要给大家介绍了关于java对接支付宝支付项目的相关资料,需要的朋友可以参考下

java对接支付宝支付演示

现在有不少的项目都需要对接支付,这里主要是进行讲解对接支付宝H5支付

废话不多说 上代码

引入支付宝官方的sdk

 <!-- https://mvnrepository.com/artifact/com.alipay.sdk/alipay-easysdk -->
        <dependency>
            <groupId>com.alipay.sdk</groupId>
            <artifactId>alipay-easysdk</artifactId>
            <version>2.2.0</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/com.alipay.sdk/alipay-sdk-java -->
        <dependency>
            <groupId>com.alipay.sdk</groupId>
            <artifactId>alipay-sdk-java</artifactId>
            <version>4.10.124.ALL</version>
        </dependency>

编写调用支付的方法

 @RequestMapping("/test")
    public void doPost(HttpServletRequest httpRequest,
                       HttpServletResponse httpResponse) throws ServletException, IOException {

        //商户号
        String APP_ID="";
        //私钥
        String APP_PRIVATE_KEY="";
        //编码
        String CHARSET="UTF-8";
        //公钥
        String ALIPAY_PUBLIC_KEY="";
        //我是沙箱环境 所有请求地址是沙箱版
        AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipaydev.com/gateway.do", APP_ID, APP_PRIVATE_KEY, "json", CHARSET, ALIPAY_PUBLIC_KEY, "RSA2"); //获得初始化的AlipayClient
        AlipayTradeWapPayRequest alipayRequest = new AlipayTradeWapPayRequest();//创建API对应的request
        //这里主要是设置回调 也就是支付成功之后你要做什么操作的地址
        alipayRequest.setReturnUrl("http://domain.com/CallBack/return_url.jsp");
        alipayRequest.setNotifyUrl("http://domain.com/CallBack/notify_url.jsp");//在公共参数中设置回跳和通知地址
        /**
         * @description:
         * @author: hwk
         * @date: 2022/6/14 16:34
         * @param: out_trade_no 订单编号
         * total_amount 付款金额
         * subject 商品名称
         * product_code 支付方式 如手机网站 pc网站 APP支付等
         **/
       JSONObject jsonObject = new JSONObject();
        jsonObject.put("out_trade_no", "264484811515156");
        jsonObject.put("total_amount", "66");
        jsonObject.put("subject", "测试支付");
        jsonObject.put("product_code", "QUICK_WAP_WAY");
        alipayRequest.setBizContent(jsonObject.toJSONString());
        String form="";
        try {
            form = alipayClient.pageExecute(alipayRequest).getBody();
        } catch (AlipayApiException e) {
            e.printStackTrace();
        }
        //因为我不会写前端 所以直接输出测试 如果在正式环境中 建议直接return 返回的from表单
        httpResponse.setContentType("text/html;charset=" + CHARSET);
        httpResponse.getWriter().write(form);//直接将完整的表单html输出到页面
        httpResponse.getWriter().flush();
        httpResponse.getWriter().close();
    }
    //支付回调
    @RequestMapping("/test1")
    public void aliPayNotify() {
            Map<String, String> params = getAllRequestParam(request);
            String tradeStatus = params.get("trade_status");
            if ("TRADE_SUCCESS".equals(tradeStatus)) {
                System.out.println("支付成功");
            }else {
                System.out.println("支付失败");
            }
    }


    private Map<String, String> getAllRequestParam(final HttpServletRequest request) {
        Map<String, String> res = new HashMap<>(8);
        Enumeration<?> temp = request.getParameterNames();
        while (temp.hasMoreElements()) {
            String en = (String) temp.nextElement();
            String value = request.getParameter(en);
            res.put(en, value);
        }
        return res;
    }

入参正式支付的时候 可以用string json等接收 我这里只是演示

成功演示图

讲解一下实际支付的时候所需要的参数吧

除去appid 公钥 私钥什么的

你正常支付所需要的参数无非 就是商品的id(主要是用于根据商品id查询商品的名称价格等后续调用支付的时候需要)、购买人
然后查询到商品的详情 set到对应的参数里面 去调用支付宝sdk 来生成from表单

你们可以在回调里面进行支付成功之后的一些操作

比如说:购买的是会员 然后在支付成功之后去给他进行开通会员或者续费会员

有一点要提醒你们 发起支付前创建的订单一定要是未支付 在回调里面判断用户是否成功

如果有用户主动查询是否支付成功的操作 建议根据订单号先去数据库查询是否等于支付成功 如果不等于去官方给的接口去查是否支付成功 这样做的好处就是有的时候回调慢了一点 用户主动去查询如果是支付成功不会造成返回支付失败

总结

到此这篇关于java对接支付宝支付项目的文章就介绍到这了,更多相关java对接支付宝支付内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • springboot 整合 SA-Token 使用详解

    springboot 整合 SA-Token 使用详解

    本文详细介绍了SA-Token这款安全框架的使用,并结合实际操作演示了如何集成到springboot项目中,感兴趣的朋友跟随小编一起看看吧
    2024-08-08
  • springboot读取resource配置文件生成容器对象的示例代码

    springboot读取resource配置文件生成容器对象的示例代码

    这篇文章主要介绍了springboot读取resource配置文件生成容器对象的示例代码,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-07-07
  • hadoop的wordcount实例代码

    hadoop的wordcount实例代码

    这篇文章主要介绍了hadoop的wordcount实例代码,分享了相关代码示例,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下
    2018-02-02
  • 一文秒懂idea的git插件跟翻译插件

    一文秒懂idea的git插件跟翻译插件

    idea之类的开发软件真的超级多的插件,今天给大家分享idea的git插件跟翻译插件,感兴趣的朋友跟随小编一起看看吧
    2021-04-04
  • Spring Security实现自动登陆功能示例

    Spring Security实现自动登陆功能示例

    自动登录在很多网站和APP上都能用的到,解决了用户每次输入账号密码的麻烦。本文就使用Spring Security实现自动登陆功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11
  • spring-integration连接MQTT全过程

    spring-integration连接MQTT全过程

    这篇文章主要介绍了spring-integration连接MQTT全过程,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • 在Java中实现线程安全的单例模式的常见方式

    在Java中实现线程安全的单例模式的常见方式

    单例模式是一种常用的软件设计模式,它确保一个类只有一个实例,并提供一个全局访问点,在多线程环境下,确保单例模式的线程安全性是非常重要的,因为多个线程可能会同时尝试创建实例,导致实例不唯一的问题,本文介绍了在Java中实现线程安全的单例模式有几种常见的方式
    2024-09-09
  • 详解Spring Boot实战之Restful API的构建

    详解Spring Boot实战之Restful API的构建

    这篇文章主要介绍了详解Spring Boot实战之Restful API的构建,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-01-01
  • 页面设计之事件处理综合介绍

    页面设计之事件处理综合介绍

    页面设计之事件处理,当你把界面都设计好了,总需要添加相应的执行动作给组件,在有相应的时间处理机制
    2012-12-12
  • Spring Boot整合持久层之JdbcTemplate多数据源

    Spring Boot整合持久层之JdbcTemplate多数据源

    持久层是JavaEE中访问数据库的核心操作,SpringBoot中对常见的持久层框架都提供了自动化配置,例如JdbcTemplate、JPA 等,MyBatis 的自动化配置则是MyBatis官方提供的。接下来分别向读者介绍Spring Boot整合这持久层技术中的整合JdbcTemplate
    2022-08-08

最新评论