Java如何实现支付宝电脑支付基于servlet版本

Java 如何实现支付宝电脑支付基于 Servlet 版本,具体的实现步骤如下:

1. 注册支付宝商家账号

首先需要注册一个支付宝商家账号。

2. 下载支付宝开发者工具包

下载支付宝提供的开发者工具包,官方推荐使用 Java 版本的 SDK。

3. 创建订单

在进行支付前需要创建一个订单,在创建订单时需要填写订单的一些基本信息,例如订单金额、商品名称、订单号等。

以下是创建一个订单的示例代码:

public String createOrder(HttpServletRequest req, HttpServletResponse resp){
    //商户订单号,必填
    String out_trade_no = req.getParameter("orderNo");

    //订单名称,必填
    String subject = req.getParameter("subject");

    //付款金额,必填
    String total_fee = req.getParameter("totalFee");

    //商品描述,可空
    String body = req.getParameter("body");

    //获得初始化的AlipayClient
    AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do", app_id, merchant_private_key, "json", charset, alipay_public_key, sign_type);

    //设置请求参数
    AlipayTradeCreateRequest request = new AlipayTradeCreateRequest();
    request.setBizContent("{" +
        "    \"out_trade_no\":\""+ out_trade_no +"\"," +
        "    \"seller_id\":\""+ seller_id +"\"," +
        "    \"total_amount\":\""+ total_fee +"\"," +
        "    \"subject\":\""+ subject +"\"," +
        "    \"body\":\""+ body +"\"," +
        "    \"timeout_express\":\"30m\"}");

    //请求支付宝创建订单
    AlipayTradeCreateResponse response = alipayClient.execute(request);

    return response.getBody();
}

4. 获取支付页面

在创建订单后,需要将用户重定向到支付页面。支付宝提供了一个接口,用于获取支付页面的 URL,具体的步骤如下:

以下是获取支付页面 URL 的示例代码:

public String getPaymentPage(HttpServletRequest req, HttpServletResponse resp){
    //商户订单号,必填
    String out_trade_no = req.getParameter("orderNo");

    //获得初始化的AlipayClient
    AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do", app_id, merchant_private_key, "json", charset, alipay_public_key, sign_type);

    //设置请求参数
    AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest();
    alipayRequest.setReturnUrl(return_url);
    alipayRequest.setNotifyUrl(notify_url);

    //商户订单号,商户网站订单系统中唯一订单号,必填
    String out_trade_no = new String(req.getParameter("orderNo").getBytes("ISO-8859-1"),"UTF-8");
    //付款金额,必填
    String total_amount = new String(req.getParameter("totalFee").getBytes("ISO-8859-1"),"UTF-8");
    //订单名称,必填
    String subject = new String(req.getParameter("subject").getBytes("ISO-8859-1"),"UTF-8");
    //商品描述,可空
    String body = new String(req.getParameter("body").getBytes("ISO-8859-1"),"UTF-8");

    alipayRequest.setBizContent("{\"out_trade_no\":\""+ out_trade_no +"\","
            + "\"total_amount\":\""+ total_amount +"\","
            + "\"subject\":\""+ subject +"\","
            + "\"body\":\""+ body +"\","
            + "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}");

    //请求支付宝页面支付
    String result = alipayClient.pageExecute(alipayRequest).getBody();

    return result;
}

5. 处理回调通知

在用户完成支付后支付宝会发送一个回调通知,该通知用于告诉商家用户已经支付成功。商家需要在接收到回调通知后,对用户进行确认,确认成功后才能将订单标记为已支付。以下是处理回调通知的示例代码:

public void notify(HttpServletRequest request, HttpServletResponse response) throws Exception {
    //获取支付宝POST过来反馈信息
    Map<String,String> params = new HashMap<String,String>();
    Map<String,String[]> requestParams = request.getParameterMap();
    for (Iterator<String> iter = requestParams.keySet().iterator(); iter.hasNext();) {
        String name = (String) iter.next();
        String[] values = (String[]) requestParams.get(name);
        String valueStr = "";
        for (int i = 0; i < values.length; i++) {
            valueStr = (i == values.length - 1) ? valueStr + values[i]
                                                 : valueStr + values[i] + ",";
        }
        //乱码解决,这段代码在出现乱码时使用
        //valueStr = new String(valueStr.getBytes("ISO-8859-1"), "utf-8");
        params.put(name, valueStr);
    }

    //商户订单号
    String out_trade_no = new String(request.getParameter("out_trade_no").getBytes("ISO-8859-1"),"UTF-8");

    //支付宝交易号
    String trade_no = new String(request.getParameter("trade_no").getBytes("ISO-8859-1"),"UTF-8");

    //交易状态
    String trade_status = new String(request.getParameter("trade_status").getBytes("ISO-8859-1"),"UTF-8");

    if(trade_status.equals("TRADE_FINISHED")){
        //判断该笔订单是否在商户网站中已经做过处理
        //如果没有做过处理,根据订单号(out_trade_no)和支付宝交易号(trade_no)进行返利操作
        //如果有做过处理,不执行返利操作

        //注意:TRADE_FINISHED只会在支付完成后触发,TRADE_SUCCESS则需要去进行后续的订单确认操作
        response.getWriter().write("success");
    }else if (trade_status.equals("TRADE_SUCCESS")){
        //判断该笔订单是否在商户网站中已经做过处理
        //如果没有做过处理,根据订单号(out_trade_no)和支付宝交易号(trade_no)进行返利操作
        //如果有做过处理,不执行返利操作

        //注意:TRADE_SUCCESS通常表示支付完成,同时需要在商家后台进行订单确认操作
        response.getWriter().write("success");
    }
}

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java如何实现支付宝电脑支付基于servlet版本 - Python技术站

(0)
上一篇 2023年5月26日
下一篇 2023年5月26日

相关文章

  • java实现输出文件夹下某个格式的所有文件实例代码

    下面是详细的攻略: 1. 获取文件夹下所有文件 为了获取一个文件夹下的所有文件,我们可以使用Java中的File类和递归算法。可以先定义一个方法,传入文件夹的路径,使用该方法时传入希望查找的文件格式。 import java.io.File; public class FileUtil { /** * 获取指定文件夹下某一类型的所有文件 * * @param…

    Java 2023年5月20日
    00
  • SpringBoot登录拦截配置详解(实测可用)

    我来为您详细讲解“SpringBoot登录拦截配置详解(实测可用)”的完整攻略。 1. 概述 SpringBoot是一款广受欢迎的Java Web框架,它为用户提供了便利的开发方式和高效的运行效率。在开发Web应用中,安全问题一直都是我们需要重视的问题。为了保护Web应用的安全,我们可以通过登录拦截的方式进行控制。本文将带大家详细讲解SpringBoot的登…

    Java 2023年5月15日
    00
  • Java中不常用但很好用的开发小技巧分享

    下面是 “Java中不常用但很好用的开发小技巧分享” 的完整攻略: 一、使用Lambda表达式简化代码 Lambda表达式是Java 8中引入的新特性,它可以将方法当做参数进行传递,从而简化代码。比如,在Java 8之前,如果我们要对一个集合进行排序,通常需要实现Comparator接口,然后实现compare方法。而在Java 8中,我们可以使用Lambd…

    Java 2023年5月23日
    00
  • JSP Spring中Druid连接池配置详解

    JSP Spring中Druid连接池配置详解,以下是完整攻略: 一、什么是Druid连接池 Druid连接池是阿里巴巴开发的一款数据库连接池,性能强大,并且具有完善的监控功能。在JSP Spring中使用Druid连接池可以有效地提高数据库连接的效率,降低连接的等待时间。 二、Druid连接池的配置 在使用Druid连接池之前,需要进行一系列的配置。 1.…

    Java 2023年6月15日
    00
  • SpringSecurity定义多个过滤器链的操作代码

    要定义多个过滤器链,需要使用Spring Security提供的WebSecurityConfigurerAdapter类,该类可以用于配置Spring Security的安全性过滤器链。 以下是定义多个过滤器链的完整攻略: 创建一个类继承WebSecurityConfigurerAdapter类,并覆盖configure(HttpSecurity http…

    Java 2023年5月20日
    00
  • SpringMVC框架的介绍与使用详解

    以下是关于“SpringMVC框架的介绍与使用详解”的完整攻略,其中包含两个示例。 1. 前言 SpringMVC是一种常用的Java Web开发框架,它可以帮助开发者快速构建Web应用程序。本攻略将详细讲解SpringMVC框架的介绍与使用方法,帮助读者更好地掌握SpringMVC框架。 2. SpringMVC框架介绍 SpringMVC框架是Sprin…

    Java 2023年5月16日
    00
  • Linux折腾记(十):Bash脚本编程语言中的美学与哲学

    让我来详细讲解一下“Linux折腾记(十):Bash脚本编程语言中的美学与哲学”的完整攻略。 Bash脚本编程语言中的美学与哲学 Bash是Linux和Unix操作系统上使用最为广泛的一种脚本编程语言,支持许多快速编写脚本的便捷特性和基本编程思想,但同时也继承了Unix哲学的精湛技艺。Bash脚本编程语言的美学和哲学对于每位工程师来说都至关重要,掌握这些美学…

    Java 2023年5月26日
    00
  • Java SpringBoot模板引擎之 Thymeleaf入门详解

    Java SpringBoot模板引擎之 Thymeleaf入门详解 Thymeleaf简介 Thymeleaf是一个服务端的Java模板引擎,它能够将网页模板和Java代码结合起来,从而动态地生成HTML页面,使网页开发更加灵活和易于维护。 Thymeleaf的主要特点是: 完全支持HTML5。 可以处理SVG和其他任意XML文件。 支持Spring框架,…

    Java 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部