详解java集成支付宝支付接口(JSP+支付宝20160912)

详解java集成支付宝支付接口(JSP+支付宝20160912)攻略

概述

本篇攻略将详细讲解Java如何集成支付宝支付接口,并实现简单的支付流程。

准备工作

  1. 首先,需要到支付宝开放平台注册账号,并创建应用,拿到app_id、商户私钥和支付宝公钥;
  2. 在本地环境配置Java开发环境、Maven,确定要编写的Java版本,本篇攻略使用的是Java 1.8;
  3. 下载集成支付宝的Demo代码,进行必要的修改,使得程序能够进行正常的调试和测试。

集成步骤

第一步:添加Maven依赖

pom.xml文件中添加以下依赖:

<dependency>
    <groupId>com.alipay.sdk</groupId>
    <artifactId>alipay-sdk-java</artifactId>
    <version>3.6.0.ALL</version>
</dependency>

第二步:编写配置文件

创建alipay.properties配置文件,配置必要的参数:

# 应用ID
app_id=

# 商户私钥,去掉头尾
merchant_private_key=

# 支付宝公钥,去掉头尾
alipay_public_key=

# 服务器异步通知页面路径
notify_url=http://yourwebsite.com/notify_url.jsp

# 页面跳转同步通知页面路径
return_url=http://yourwebsite.com/return_url.jsp

第三步:编写支付接口

编写支付接口的Java代码,直接调用支付宝提供的API即可:

@RequestMapping(value = "/pay", method = RequestMethod.POST)
@ResponseBody
public String pay(HttpServletRequest request) throws AlipayApiException {

    // 生成订单号
    String out_trade_no = "order" + System.currentTimeMillis();

    // 订单总金额,单位为元
    String total_amount = "0.01";

    // 订单标题
    String subject = "测试订单";

    // 订单描述
    String body = "测试订单详细信息";

    // 商品明细列表,可以为空
    List<GoodsDetail> goodsDetailList = new ArrayList<>();

    // 创建API对应的request
    AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest();
    alipayRequest.setReturnUrl(AlipayConfig.return_url);
    alipayRequest.setNotifyUrl(AlipayConfig.notify_url);

    // 填充订单参数
    AlipayTradePagePayModel model = new AlipayTradePagePayModel();

    model.setOutTradeNo(out_trade_no);
    model.setTotalAmount(total_amount);
    model.setSubject(subject);
    model.setBody(body);

    // 商品明细列表
    if (!goodsDetailList.isEmpty()) {
        model.setGoodsDetail(goodsDetailList);
    }

    alipayRequest.setBizModel(model);

    String form = alipayClient.pageExecute(alipayRequest).getBody();

    // 返回支付宝提交表单
    return form;
}

第四步:编写回调接口

编写回调接口的Java代码,处理支付状态的回调:

@RequestMapping(value = "/notify_url")
public void notifyUrl(HttpServletRequest request, HttpServletResponse response) throws Exception {

    Map<String, String> params = new HashMap<>();
    Map<String, String[]> requestParams = request.getParameterMap();

    for (String name : requestParams.keySet()) {
        String[] values = requestParams.get(name);
        String valueStr = "";

        for (int i = 0; i < values.length; i++) {
            valueStr = (i == values.length - 1) ? valueStr + values[i] : valueStr + values[i] + ",";
        }

        params.put(name, valueStr);
    }

    boolean verify_result = AlipaySignature.rsaCheckV1(params, AlipayConfig.alipay_public_key, "UTF-8", "RSA2");

    // 验证签名是否正确
    if (verify_result) {
        // TODO: 处理支付成功的逻辑
    } else {
        // TODO: 处理支付失败的逻辑
    }

}

第五步:编写前端页面

编写前端页面,例如pay.jspreturn_url.jsp

pay.jsp页面中,引入集成支付宝的Demo代码提供的JavaScript代码:

<script src="/alipay/js/jquery-1.12.4.min.js"></script>
<script src="/alipay/js/alipay.trade.common.js"></script>
<script src="/alipay/js/alipay.trade.page.pay.js"></script>

然后在需要付款的地方,添加如下代码:

$('#submitPay').click(function () {

    // 调用支付接口
    $.ajax({
        url: '/pay',
        type: 'post',
        success: function (data) {
            $('body').append(data);
            $('form').submit();
        }
    });
});

最后,在return_url.jsp页面中,可以根据支付状态,显示相应的内容。

示例说明

示例一

假设现在有一个网站需要接入支付宝支付功能,用户在购买商品的时候,可以选择使用支付宝进行付款。

在购买页面,用户点击“去支付”按钮,会跳转到支付页面,进行支付操作。

在支付页面,用户可以选择支付宝的各种支付方式,如余额支付、网银支付、花呗分期等。完成支付后,页面会自动跳转到“支付成功”或“支付失败”页面。

如果支付成功,系统会保存相应的订单信息,同时通知商家进行发货处理。

示例二

假设现在有一个APP需要接入支付宝支付功能,用户在购买虚拟物品的时候,可以选择使用支付宝进行付款。

在APP内,用户点击“去支付”按钮,会调用支付接口,传递相应的参数,进行支付操作。

支付宝会自动跳转到相应的支付页面,用户可以选择支付宝的各种支付方式,如余额支付、网银支付、花呗分期等。完成支付后,APP会收到支付宝的支付结果通知,根据支付状态进行相应的处理。

如果支付成功,APP会保存相应的订单信息,同时通知用户进行查看相关信息。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解java集成支付宝支付接口(JSP+支付宝20160912) - Python技术站

(0)
上一篇 2023年6月15日
下一篇 2023年6月15日

相关文章

  • 关于log4j漏洞修复解决方案及源码编译

    关于log4j漏洞修复解决方案及源码编译,我会给出下面的完整攻略。 1. 了解Log4j漏洞 最近,Log4j2.0这个常用的Java日志框架出现了一个安全漏洞,攻击者可以通过构造恶意代码的方式,远程执行任意命令。此漏洞受到了国内外广泛关注,因此及时修复这个漏洞变得尤为必要。 2. 解决方案 下面就是在Windows环境下解决这个问题的步骤。 2.1 检查是…

    Java 2023年5月19日
    00
  • 使用java.nio.file 库优雅的操作文件详解

    使用Java.nio.file库可以实现优雅而高效的文件操作。Java.nio.file库提供了几个主要的类和方法,包括Path、Files和FileSystem等。下面详细讲解如何使用这些类和方法来完成文件操作。 Path类 Path类代表一个文件或目录的路径。可以通过Paths类的静态方法获取一个Path对象,例如: Path path = Paths.…

    Java 2023年5月20日
    00
  • Java如何找出数组中重复的数字

    要找出Java数组中的重复数字,可能有以下几种方法: 方法一:暴力方法 这个方法虽然简单易懂,但其时间复杂度也比较高,不过对于小型数组来说还是可以接受的。 简单来说就是遍历整个数组,对于每一个数字,都依次遍历后面的数字,如果发现该数字已经出现过,那么就把它输出出来即可。 这个方法的Java代码示例如下: public void findDuplicate(i…

    Java 2023年5月19日
    00
  • Java类库BeanUtils组件使用方法及实例详解

    Java类库BeanUtils是一个十分实用的组件,它可以通过反射机制动态的操作JavaBean,无需进行手动编写set与get方法。下面我将详细讲解BeanUtils组件的使用方法及实例。 导入BeanUtils库 使用BeanUtils之前,需要先导入BeanUtils库依赖,以Maven为例,在pom.xml文件中加入以下代码: <depende…

    Java 2023年5月26日
    00
  • 揭开汇编死循环的神秘面纱

    以下是”揭开汇编死循环的神秘面纱”的完整攻略。 关于汇编死循环 汇编语言中可能会出现死循环,它会执行无限次,直到程序被强行终止。这种情况通常是由于编写代码时的逻辑错误或故意编写的死循环。此类死循环对系统造成的负担很大,因为它们会一直占用系统资源。了解如何识别和消除死循环是编程中的重要知识点。 如何识别死循环 死循环通常是由于程序中的一个或多个操作导致了一种无…

    Java 2023年5月23日
    00
  • 下载远程maven仓库的jar 手动放到本地仓库详细操作

    下面是下载远程maven仓库的jar 手动放到本地仓库的详细攻略: 准备工作 在进行手动安装过程前,请确保以下工作已经完成: 安装了 Maven,并配置好了环境变量。 存在一个 Maven 仓库地址,可以是远程仓库地址或本地仓库地址。 手动下载 jar 包 首先,你需要手动下载需要安装的 jar 包。可以在 Maven 仓库中寻找需要的 jar 包的地址,也…

    Java 2023年6月2日
    00
  • JAVA简单实现MD5注册登录加密实例代码

    下面是“JAVA简单实现MD5注册登录加密实例代码”的攻略: 1. MD5简介 MD5,全称为Message-Digest Algorithm 5,是一种常用的密码散列函数,可以将任意长度的信息(不限于字符串)映射为一个128位(16字节)的哈希值。通常用于数据完整性校验和密码存储等场合。 2. MD5加密步骤概述 MD5算法分为4步: 填充数据 初始化状态…

    Java 2023年6月15日
    00
  • Spring Bean的实例化之属性注入源码剖析过程

    详细讲解“Spring Bean的实例化之属性注入源码剖析过程”的攻略如下。 1. Spring Bean的实例化 Spring Bean的实例化是指将一个Java对象实例化,并加入到Spring容器中,成为Spring管理的Bean。实例化Bean的过程可以通过XML配置文件、注解等方式来完成。 2. 属性注入 属性注入是指在Bean实例化之后,通过反射等…

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