Java中通过多态实现支付回调处理,核心是定义统一PaymentCallbackHandler接口,微信、支付宝、银联等各自实现verify()和handle()方法,工厂根据channel动态获取处理器并多态调用,解耦逻辑且支持扩展。

Java 中通过多态实现不同支付回调处理,核心是把“具体支付渠道的回调逻辑”抽象成统一接口或父类,让微信、支付宝、银联等各自实现自己的处理方式,调用时无需 if-else 判断渠道类型,直接交由多态分发。
定义统一回调处理器接口
声明一个规范回调行为的接口,比如:
public interface PaymentCallbackHandler {
/**
* 处理支付回调
* @param notifyData 原始通知数据(如 JSON 字符串或 Map)
* @return 处理结果(成功/失败 + 业务响应)
*/
CallbackResult handle(String notifyData);
<pre class="brush:php;toolbar:false;">/**
* 校验通知是否合法(签名、时间戳、订单状态等)
*/
boolean verify(String notifyData);}
所有支付渠道都实现这个接口,各自封装验签、解析、更新订单、发消息等逻辑。
为各渠道提供具体实现类
每个支付方式写一个实现类,例如:
- WechatCallbackHandler:解析微信 XML 回调,验证微信签名,调用微信查单 API 补单;
- AlipayCallbackHandler:解析支付宝 notify_url 的 form 参数,用支付宝 SDK 验签,处理交易状态;
- UnionpayCallbackHandler:解析银联 JSON 回调,校验证书签名,处理网关返回码。
它们都重写 verify() 和 handle(),内部细节完全解耦,互不影响。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
用工厂或策略模式动态获取处理器
根据请求中的渠道标识(如 channel=wechat),自动选择对应处理器:
public class CallbackHandlerFactory {
private static final Map<string paymentcallbackhandler> HANDLERS = Map.of(
"wechat", new WechatCallbackHandler(),
"alipay", new AlipayCallbackHandler(),
"unionpay", new UnionpayCallbackHandler()
);
<pre class="brush:php;toolbar:false;">public static PaymentCallbackHandler getHandler(String channel) {
return HANDLERS.getOrDefault(channel, null);
}
}
控制器中这样用:
@PostMapping("/callback/{channel}")
public ResponseEntity> onCallback(@PathVariable String channel, @RequestBody String rawNotify) {
PaymentCallbackHandler handler = CallbackHandlerFactory.getHandler(channel);
if (handler == null || !handler.verify(rawNotify)) {
return ResponseEntity.badRequest().build();
}
return ResponseEntity.ok(handler.handle(rawNotify)); // 多态调用!
}进阶:支持运行时扩展(如新增支付渠道)
避免每次加渠道就改工厂代码,可结合 Spring 的 @Component + 接口扫描:
- @Service("wechatCallbackHandler") 等限定名;
- Map
,key 为 bean 名(如 "wechat");
这样既保持多态干净,又具备良好可扩展性。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










