-
導入相關依賴
<!-- https://mvnrepository.com/artifact/com.alipay.sdk/alipay-sdk-java --> <dependency> <groupId>com.alipay.sdk</groupId> <artifactId>alipay-sdk-java</artifactId> <version>4.13.50.ALL</version> </dependency>
-
下載下傳對應的版本的支付樣例進行修改使用(本測試是使用手機網站支付DEMO)

-
在配置類中按要求進行相關配置
本測試隻配置應用ID,商戶私鑰,支付寶公鑰,頁面跳轉同步通知路徑以及支付寶開發環境下的網關public class AlipayConfig { //↓↓↓↓↓↓↓↓↓↓請在這裡配置您的基本資訊↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ // 應用ID,您的APPID,收款賬号既是您的APPID對應支付寶賬号 public static String app_id = ""; // 商戶私鑰,您的PKCS8格式RSA2私鑰 public static String merchant_private_key = ""; // 支付寶公鑰,檢視位址:https://openhome.alipay.com/platform/keyManage.htm 對應APPID下的支付寶公鑰。 public static String alipay_public_key = ""; // 伺服器異步通知頁面路徑 需http://格式的完整路徑,不能加?id=123這類自定義參數,必須外網可以正常通路 public static String notify_url = "http://工程公網通路位址/alipay.trade.page.pay-JAVA-UTF-8/notify_url.jsp"; // 頁面跳轉同步通知頁面路徑 需http://格式的完整路徑,不能加?id=123這類自定義參數,必須外網可以正常通路 public static String return_url = "http://localhost:8080/pay_war/alipay.trade.page.pay-JAVA-UTF-8/return_url.jsp"; // 簽名方式 public static String sign_type = "RSA2"; // 字元編碼格式 public static String charset = "utf-8"; // 支付寶網關 public static String gatewayUrl = "https://openapi.alipaydev.com/gateway.do"; // 支付寶網關 public static String log_path = "C:\\"; }
-
将下載下傳DEMO中支付頁面以及支付後跳轉的頁面進行相關設定
将兩個jsp頁面中的java代碼放到controller層進行相關配置
@RequestMapping("/pay")
public void pay(String id, String money, HttpServletResponse response) throws AlipayApiException, IOException {
//獲得初始化的AlipayClient
AlipayClient alipayClient = new DefaultAlipayClient(AlipayConfig.gatewayUrl, 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 out_trade_no = id;
//付款金額,必填
String total_amount = money;
//訂單名稱,必填
String subject = id;
//商品描述,可空
String body = "";
alipayRequest.setBizContent("{\"out_trade_no\":\""+ out_trade_no +"\","
+ "\"total_amount\":\""+ total_amount +"\","
+ "\"subject\":\""+ subject +"\","
+ "\"body\":\""+ body +"\","
+ "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}");
//若想給BizContent增加其他可選請求參數,以增加自定義逾時時間參數timeout_express來舉例說明
//alipayRequest.setBizContent("{\"out_trade_no\":\""+ out_trade_no +"\","
// + "\"total_amount\":\""+ total_amount +"\","
// + "\"subject\":\""+ subject +"\","
// + "\"body\":\""+ body +"\","
// + "\"timeout_express\":\"10m\","
// + "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}");
//請求參數可查閱【電腦網站支付的API文檔-alipay.trade.page.pay-請求參數】章節
//請求
String result = alipayClient.pageExecute(alipayRequest).getBody();
//輸出
//out.println(result);
response.setContentType("text/html");
response.getWriter().println(result);
}
@RequestMapping("/paysuccess")
public String paysuccess(HttpServletRequest request) throws UnsupportedEncodingException, AlipayApiException {
//擷取支付寶GET過來回報資訊
Map<String,String> params = new HashMap<String,String>();
Map<String,String[]> requestParams = request.getParameterMap();
for (Iterator<String> iter = requestParams.keySet().iterator(); iter.hasNext();) {
String name = (String) iter.next();
String[] values = (String[]) requestParams.get(name);
String valueStr = "";
for (int i = 0; i < values.length; i++) {
valueStr = (i == values.length - 1) ? valueStr + values[i]
: valueStr + values[i] + ",";
}
//亂碼解決,這段代碼在出現亂碼時使用
valueStr = new String(valueStr.getBytes("ISO-8859-1"), "utf-8");
params.put(name, valueStr);
}
boolean signVerified = AlipaySignature.rsaCheckV1(params, AlipayConfig.alipay_public_key, AlipayConfig.charset, AlipayConfig.sign_type); //調用SDK驗證簽名
//——請在這裡編寫您的程式(以下代碼僅作參考)——
if(signVerified) {
//商戶訂單号
String id = new String(request.getParameter("out_trade_no").getBytes("ISO-8859-1"),"UTF-8");
//支付寶交易号
String trade_no = new String(request.getParameter("trade_no").getBytes("ISO-8859-1"),"UTF-8");
//付款金額
String total_amount = new String(request.getParameter("total_amount").getBytes("ISO-8859-1"),"UTF-8");
orderService.updateOrderStatue(id);
return "redirect:/client/paysuccess.jsp";
//out.println("trade_no:"+trade_no+"<br/>out_trade_no:"+out_trade_no+"<br/>total_amount:"+total_amount);
}else {
//out.println("驗簽失敗");
return "redirect:/client/fail.jsp";
}
}
otal_amount);
}else {
//out.println("驗簽失敗");
return "redirect:/client/fail.jsp";
}
}