Java简单支付实现指南
在电商、金融等系统中,支付功能是核心模块之一,本文将介绍如何使用Java实现一个简单但功能完整的支付系统,涵盖支付流程、核心代码实现及注意事项。

支付系统架构设计
一个基础的支付系统通常包含三个角色:用户、商户和支付渠道(如支付宝、微信支付),系统需支持以下功能:
- 支付请求:商户系统调用支付接口,生成支付订单。
- 支付回调:支付渠道处理支付后,异步通知商户系统结果。
- 订单查询:商户或用户主动查询支付状态。
技术选型上,可采用Spring Boot框架快速搭建服务,结合HTTP协议与支付渠道的API进行交互。
核心功能实现
支付订单创建
首先定义订单实体类,包含订单号、金额、商品信息等字段:
public class Order {
private String orderId; // 订单号
private BigDecimal amount; // 支付金额
private String subject; // 商品名称
// 省略getter/setter
}
然后编写支付接口,调用支付渠道的统一下单API(以支付宝为例):
@Service
public class PaymentService {
public String createPayment(Order order) {
// 1. 初始化AlipayClient
AlipayClient client = new DefaultAlipayClient(
"https://openapi.alipay.com/gateway.do",
"APP_ID",
"APP_PRIVATE_KEY",
"JSON",
"UTF-8",
"ALIPAY_PUBLIC_KEY"
);
// 2. 设置请求参数
AlipayTradePagePayRequest request = new AlipayTradePagePayRequest();
request.setBizContent("{\"out_trade_no\":\"" + order.getOrderId() + "\","
+ "\"total_amount\":\"" + order.getAmount() + "\","
+ "\"subject\":\"" + order.getSubject() + "\","
+ "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}");
// 3. 发起请求并返回支付表单
try {
return client.pageExecute(request).getBody();
} catch (AlipayApiException e) {
throw new RuntimeException("支付创建失败", e);
}
}
}
支付回调处理
支付渠道处理完成后,会向商户系统发送异步通知(Notify URL),需验证通知的真实性并更新订单状态:

@RestController
@RequestMapping("/payment")
public class PaymentController {
@Autowired
private PaymentService paymentService;
@PostMapping("/notify")
public String handleNotify(HttpServletRequest request) {
Map<String, String> params = new HashMap<>();
request.getParameterMap().forEach((k, v) -> params.put(k, v[0]));
// 验证签名
boolean signVerified = paymentService.verifySign(params);
if (signVerified) {
String orderId = params.get("out_trade_no");
String tradeStatus = params.get("trade_status");
if ("TRADE_SUCCESS".equals(tradeStatus)) {
// 更新订单为已支付
paymentService.updateOrderStatus(orderId, "PAID");
}
return "success";
} else {
return "fail";
}
}
}
关键注意事项
-
安全性:
- 支付回调必须验证签名,防止伪造通知。
- 敏感信息(如私钥)需通过配置文件或密钥管理服务存储,避免硬编码。
-
幂等性:
支付回调可能重复发送,需通过订单号确保同一订单只处理一次。
-
异常处理:
捕获支付渠道API的异常,记录日志并重试或人工介入。

-
测试环境:
支付渠道通常提供沙箱环境,先在沙箱调试通过后再切换到生产环境。
扩展建议
若需支持多支付渠道(如微信支付),可采用策略模式封装不同支付方式,便于后续扩展,可引入分布式锁(如Redis)解决高并发下的订单重复问题。
通过以上步骤,即可用Java实现一个简单但稳定的支付系统,实际项目中还需结合业务需求优化流程,例如增加退款、对账等功能,确保系统的完整性和可靠性。














