注冊支付寶開放平台
支付寶開放平台:https://www.alipay.com/
支付寶掃碼注冊後,以後掃碼就可以登入了。
使用沙箱環境
選擇 開發中心 → 研發服務。
使用沙箱環境文檔:https://docs.open.alipay.com/200/105311/
栗子
添加 maven 依賴:
<dependency>
<groupId>com.alipay.sdk</groupId>
<artifactId>alipay-sdk-java</artifactId>
<version>3.7.73.ALL</version>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.1.1</version>
</dependency>
支付方法:
- 檢視沙箱應用,可以找到 appid、gateway_url(支付寶網關)、alipay_public_key(支付寶公鑰)。
- 生成密鑰(merchant_private_key):https://docs.open.alipay.com/291/105971
- sign_type:RSA2
- notify_url:外網可以通路的回調位址。
- return_url:外網可以通路的傳回位址。
@PostMapping("goPay")
@ResponseBody
public String goPay(@RequestParam("taskId") String taskId) {
String result = "";
try {
AlipayClient alipayClient = new DefaultAlipayClient(gateway_url, app_id, merchant_private_key, "json", charset, alipay_public_key, sign_type);
AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest();
alipayRequest.setReturnUrl(return_url);
alipayRequest.setNotifyUrl(notify_url);
Order order = orderService.get(taskId);
String out_trade_no = taskId + "_" + new Date().getTime();
Double amount = (double) order.getAmount();
String total_amount = (amount / 100) + "";
String subject = taskId;
String timeout_express = "1c";
alipayRequest.setBizContent("{\"out_trade_no\":\"" + out_trade_no + "\","
+ "\"total_amount\":\"" + total_amount + "\","
+ "\"subject\":\"" + subject + "\","
+ "\"timeout_express\":\"" + timeout_express + "\","
+ "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}");
result = alipayClient.pageExecute(alipayRequest).getBody();
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
回調方法:
@RequestMapping("/notifyUrl")
public void notifyUrl(HttpServletRequest request) throws Exception {
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] + ",";
}
params.put(name, valueStr);
}
boolean signVerified = AlipaySignature.rsaCheckV1(params, alipay_public_key, charset, sign_type);
if (!signVerified) {
return;
}
String trade_status = request.getParameter("trade_status");
if (trade_status.equals("TRADE_SUCCESS")) {
System.out.println("支付成功");
}
}
傳回方法:
@RequestMapping("/returnUrl")
public String returnUrl() {
return "success";
}