支付寶即時到賬(雙接口)流程:
return_url(頁面提示)+ 異步 POST notify_url(資金確認)。notify_url 驗簽成功 → 更新訂單狀態 → 返回 success。| 類 | 職責 |
|---|---|
AlipayConfig | 單例持有:partner、key、seller_email、notify_url、return_url、簽名方式、輸入編碼 |
AlipayFunction | 參數過濾、排序拼接、MD5 簽名、日誌記錄、防釣魚時間戳查詢 |
Md5Encrypt | MD5 摘要算法實現(指定 charset) |
AlipayService | 構造業務參數 Map → 過濾簽名 → 生成自動提交 <form> HTML |
AlipayNotify | 異步通知驗證:本地重算簽名 + 遠程 notify_verify 雙重校驗 |
// 1. 過濾空值、sign、sign_type
Map<String,String> filtered = AlipayFunction.ParaFilter(params);
// 2. 按 key 排序拼接 key=val&key=val...
String prestr = AlipayFunction.CreateLinkString(filtered);
// 3. 拼接商戶私鑰
prestr += AlipayConfig.getInstance().key;
// 4. MD5
String sign = Md5Encrypt.md5(prestr);
StringBuilder sb = new StringBuilder();
sb.append("<form id='alipaysubmit' name='alipaysubmit' action='")
.append(gateway).append("' method='POST'>");
// 遍歷 filtered 參數生成 hidden input
for (String key : filtered.keySet()) {
sb.append("<input type='hidden' name='").append(key)
.append("' value='").append(filtered.get(key)).append("'/>");
}
sb.append("<input type='hidden' name='sign' value='").append(sign).append("'/>");
sb.append("<input type='hidden' name='sign_type' value='MD5'/>");
sb.append("<script>document.forms['alipaysubmit'].submit();</script>");
public String alipayTrade() {
// 1. 本地驗簽
String mySign = AlipayNotify.GetMysign(requestParams, key);
if (!mySign.equals(requestParams.get("sign"))) return "fail";
// 2. 遠程驗證 notify_id
String response = AlipayNotify.Verify(requestParams.get("notify_id"));
if (!"true".equals(response)) return "fail";
// 3. 業務判斷
if ("TRADE_SUCCESS".equals(trade_status) && "T".equals(is_success)) {
OrderForm order = orderService.findByOutTradeNo(out_trade_no);
if (order != null && order.getTradeStatus() != 1) {
order.setTradeStatus(1); order.setTradeNo(trade_no);
orderService.update(order);
// 處理子訂單、發貨、積分等...
}
return "success"; // 告訴支付寶處理完成
}
return "fail";
}
BigDecimal。notify_url 可能重複調用,必須判斷訂單狀態防重複處理。transport=https,防釣魚時間戳需服務器支援 SSL。UTF-8,_input_charset、JSP pageEncoding、DB 連接均統一。alipay-sdk-java) 替換手工工具類,自動維護簽名、網關、異步驗證邏輯。alipay.trade.pay) 等新版 API,支援更多支付渠道。