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

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

详解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)

基础教程推荐