以下是基于 JSP/Java Web/Servlet 实现支付宝支付接口的详细步骤:
1. 准备工作
-
注册支付宝开放平台账号:登录支付宝开放平台,完成入驻流程。
-
生成密钥:在开发者中心的沙箱环境或正式环境中生成 RSA2 密钥,包括商户私钥和支付宝公钥。
-
下载支付宝 SDK:从支付宝开放平台下载 Java 版本的支付宝 SDK。
2. 配置支付参数
在项目中创建配置文件(如 AlipayConfig.java),配置支付宝相关参数:
java复制
public class AlipayConfig {
public static final String APP_ID = "你的AppId"; // 支付宝分配的AppId
public static final String MERCHANT_PRIVATE_KEY = "你的商户私钥"; // 商户私钥
public static final String ALIPAY_PUBLIC_KEY = "支付宝公钥"; // 支付宝公钥
public static final String GATEWAY_URL = "https://openapi.alipay.com/gateway.do"; // 支付宝网关
public static final String NOTIFY_URL = "http://你的域名/notify"; // 异步通知地址
public static final String RETURN_URL = "http://你的域名/return"; // 同步通知地址
public static final String CHARSET = "UTF-8"; // 编码格式
public static final String SIGN_TYPE = "RSA2"; // 签名算法
}
3. 构建支付请求
在 Servlet 中构建支付请求并跳转到支付宝支付页面:
java复制
import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.request.AlipayTradePagePayRequest;
public class OrderServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 初始化 AlipayClient
AlipayClient alipayClient = new DefaultAlipayClient(
AlipayConfig.GATEWAY_URL,
AlipayConfig.APP_ID,
AlipayConfig.MERCHANT_PRIVATE_KEY,
"json",
AlipayConfig.CHARSET,
AlipayConfig.ALIPAY_PUBLIC_KEY,
AlipayConfig.SIGN_TYPE
);
// 创建支付请求
AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest();
alipayRequest.setReturnUrl(AlipayConfig.RETURN_URL);
alipayRequest.setNotifyUrl(AlipayConfig.NOTIFY_URL);
// 设置业务参数
String outTradeNo = "订单号"; // 商户订单号
String totalAmount = "金额"; // 订单金额
String subject = "商品名称"; // 商品名称
String body = "商品描述"; // 商品描述
alipayRequest.setBizContent("{\"out_trade_no\":\"" + outTradeNo + "\","
+ "\"total_amount\":\"" + totalAmount + "\","
+ "\"subject\":\"" + subject + "\","
+ "\"body\":\"" + body + "\","
+ "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}");
try {
// 获取支付页面 URL
String result = alipayClient.pageExecute(alipayRequest).getBody();
response.setContentType("text/html;charset=UTF-8");
response.getWriter().write(result);
} catch (AlipayApiException e) {
e.printStackTrace();
}
}
}
4. 支付回调处理
异步通知(Notify URL)
创建一个 Servlet 用于处理异步通知:
java复制
public class NotifyServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Map<String, String> params = new HashMap<>();
Map<String, String[]> requestParams = request.getParameterMap();
for (Map.Entry<String, String[]> entry : requestParams.entrySet()) {
params.put(entry.getKey(), entry.getValue()[0]);
}
// 验证签名
boolean verifyResult = AlipaySignature.rsaCheckV1(params, AlipayConfig.ALIPAY_PUBLIC_KEY, AlipayConfig.CHARSET, AlipayConfig.SIGN_TYPE);
if (verifyResult) {
// 处理业务逻辑,如更新订单状态
String tradeStatus = params.get("trade_status");
String outTradeNo = params.get("out_trade_no");
if ("TRADE_SUCCESS".equals(tradeStatus) || "TRADE_FINISHED".equals(tradeStatus)) {
// 支付成功,更新订单状态
}
}
response.getWriter().write("success"); // 必须返回 success 或 fail
}
}
同步通知(Return URL)
创建一个 JSP 页面用于处理同步通知:
jsp复制
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title>支付结果</title>
</head>
<body>
<h1>支付成功!</h1>
<p>订单号:<%= request.getParameter("out_trade_no") %></p>
<p>支付金额:<%= request.getParameter("total_amount") %></p>
</body>
</html>
5. 测试
-
在支付宝沙箱环境中测试支付流程。
-
确保异步通知和同步通知的 URL 可以正常访问。
以上步骤即可完成基于 JSP/Java Web/Servlet 的支付宝支付接口对接。

6978

被折叠的 条评论
为什么被折叠?



