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中创建线程有四种方式,分别是继承Thread类、实现Runnable接口、实现Callable接口并使用FutureTask包装器把Callable装载成一个线程、使用Executor框架创建线程池。下面依次介绍这四种方式: 继承Thread类 我们可以继承Thread类并重写run()方法实…

    Java 2023年5月18日
    00
  • Java多线程实现模拟12306火车站售票系统

    了解Java多线程和模拟火车站售票系统的开发者可以通过以下步骤实现: 步骤一:创建火车站售票系统的框架 开发者需要创建一个完整的火车站售票系统框架,需要包含以下几个模块: 模块一:火车站模块 这个模块包括火车站的基本信息,例如火车站名称、火车站位置等。同时,这个模块还需要包括火车站售票相关的方法,例如查询余票数量、购票等。 模块二:列车模块 这个模块包括列车…

    Java 2023年5月19日
    00
  • Spring整合Springmvc的相关介绍

    Spring和SpringMVC是两个非常流行的Java框架,它们可以很好地协同工作。在本文中,我们将介绍如何将Spring和SpringMVC整合在一起。 1. 配置Spring 首先,我们需要配置Spring。我们可以使用XML配置文件或Java配置类来配置Spring。例如,我们可以使用Java配置类来配置Spring。例如: @Configurati…

    Java 2023年5月18日
    00
  • 深入浅出解析Java ThreadLocal原理

    深入浅出解析Java ThreadLocal原理 什么是ThreadLocal Java线程中的一个变量,用于在各个线程之间独立存储数据 可以理解为每个线程拥有一个独立的变量副本,不受其他线程的影响 ThreadLocal的使用方法 ThreadLocal是一个泛型类,可以通过创建ThreadLocal对象,并通过get和set方法操作对应的变量副本 示例代…

    Java 2023年5月27日
    00
  • Java如何获取Date的“昨天”与“明天”示例代码

    获取Date的“昨天”与“明天”可以通过以下步骤实现: 步骤一:获取当前日期 首先,我们需要获取当前的日期。Java中可以使用java.util.Date类来表示日期时间。可以通过new Date()方法获取到当前的日期: Date today = new Date(); 步骤二:计算“昨天” 要计算“昨天”,我们需要通过java.util.Calendar…

    Java 2023年5月20日
    00
  • Python漏洞验证程序Poc利用入门到实战编写

    Python漏洞验证程序Poc(Proof of Concept)利用入门到实战编写的攻略主要包含以下几个步骤: 1. 确定漏洞类型及目标 在编写Poc的前提下,需要先确定目标攻击对象以及攻击的漏洞类型。例如,确定攻击Python web应用程序中的SQL注入漏洞。 2. 进行漏洞测试 在确定漏洞类型之后,需要利用工具或手动方式进行漏洞测试确认漏洞是否存在以…

    Java 2023年5月20日
    00
  • java最新版本连接mysql失败的解决过程

    下面我将详细讲解 Java 最新版本连接 MySQL 失败的解决过程的完整攻略。 问题描述 在使用 Java 最新版本连接 MySQL 数据库时,可能会遇到连接失败的问题。这个问题可能涉及到 MySQL 数据库、Java 连接、Java 依赖库等多个方面。具体的表现可能包括但不限于以下情况: 报错信息中包含“java.sql.SQLNonTransientC…

    Java 2023年5月20日
    00
  • 完美实现bootstrap分页查询

    实现 Bootstrap 分页查询的步骤如下: 1. 引入 Bootstrap 在 HTML 文件中引入 Bootstrap 的 CSS 和 JavaScript 文件: <!– 引入 Bootstrap CSS 文件 –> <link rel="stylesheet" href="https://cdn.…

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