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 中限制方法的返回时间最新方法

    下面我将详细讲解“Java 中限制方法的返回时间最新方法”的完整攻略。 1. 背景 在某些场景下,我们需要限制某些方法的返回时间,以避免对系统资源的过度占用或者对用户造成不良体验等问题。 然而,Java 原生并没有提供限制方法返回时间的接口或者关键字,因此我们需要通过一些技巧来实现这个功能。 2. 解决方案 2.1 使用 ExecutorService 实现…

    Java 2023年5月20日
    00
  • Sprint Boot @ResponseStatus使用方法详解

    Spring Boot的@ResponseStatus的作用与使用方法 在Spring Boot中,@ResponseStatus注解用于指定HTTP响应的状态码和原因短语。通过使用@ResponseStatus注解,可以方便地指定HTTP响应的状态码和原因短语,从而更好地控制HTTP响应。在本文中,我们将详细介绍@ResponseStatus注解的作用和使…

    Java 2023年5月5日
    00
  • Java简易计算器程序设计

    下面我就给您讲解Java简易计算器程序设计的完整攻略。 1. 确定需求 在开始设计Java简易计算器程序之前,我们需要先明确需求,即我们要实现什么样的功能。在这里,我们可以列出计算器程序的基本功能: 支持基本的加减乘除四则运算 支持小数计算 支持括号功能 2. 设计代码框架 在明确需求之后,我们需要开始设计Java程序的代码框架。我们可以将计算器程序分成以下…

    Java 2023年5月23日
    00
  • 详解手把手Maven搭建SpringMVC+Spring+MyBatis框架(超级详细版)

    详解手把手Maven搭建SpringMVC+Spring+MyBatis框架(超级详细版) 本文将详细讲解如何使用Maven搭建SpringMVC+Spring+MyBatis框架,并提供两个示例说明。 环境准备 在开始搭建框架之前,我们需要准备以下环境: JDK 1.8或以上版本 Maven 3.6.3或以上版本 Tomcat 9.0或以上版本 MySQL…

    Java 2023年5月17日
    00
  • java 实现反射 json动态转实体类–fastjson

    Java中的反射是一种可以在运行时动态获取类的信息的机制。而fastjson则是一种常用的Java JSON 库,它支持将JSON字符串快速地转换为Java对象,以及将Java对象快速地序列化为JSON字符串。下面将详细介绍如何使用Java反射结合fastjson实现JSON字符串到Java对象的转换。 1. 添加依赖接口 我们需要在项目中添加fastjso…

    Java 2023年5月26日
    00
  • 在java中由类名和方法名字符串实现其调用方式

    在Java中,可以通过类名和方法名字符串来实现对方法的调用。这通常用于在运行时动态执行代码,从而实现更加灵活的程序设计。 以下是实现该过程的完整攻略: 获取类名对应的Class对象 首先需要获取类名对应的Class对象,这可以通过Class.forName()方法来实现,该方法的参数为类的全名字符串,例如: Class<?> clazz = Cl…

    Java 2023年5月27日
    00
  • 五分钟带你了解Java的接口数据校验

    介绍Java中的接口数据校验,通常使用的是验证框架Hibernate Validator。我们可以使用它来验证javabean实例的数据是否合法。 安装 Hibernate Validator 在Maven中,我们可以使用以下代码引入Hibernate Validator: <dependency> <groupId>org.hibe…

    Java 2023年6月1日
    00
  • jsp实现用户自动登录功能

    实现用户自动登录功能通常需要使用到Cookies技术,下面是jsp实现用户自动登录功能的完整攻略: 步骤一:创建登录页面和处理登录请求的代码 首先,我们需要创建一个登录页面,用户输入用户名和密码后提交表单。表单中的action属性需要指向一个jsp页面: <form name="loginForm" method="pos…

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