添加依赖
<dependency>
<groupId>com.alipay.sdk</groupId>
<artifactId>alipay-sdk-java</artifactId>
<version>4.10.124.ALL</version>
</dependency>
实现代码
String outTradeNo = IdWorker.get32UUID();
log.info("调用支付宝app下单api");
//获得初始化的AlipayClient
AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do", appId, appPrivatekey, "JSON", "utf-8", alipayPublicKey, "RSA2");
AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest();
request.setNotifyUrl("");//支付完成回调地址
JSONObject bizContent = new JSONObject();
bizContent.put("subject", "本次下单");
bizContent.put("out_trade_no", outTradeNo);
bizContent.put("total_amount", 20);
bizContent.put("product_code", "QUICK_MSECURITY_PAY");
request.setBizContent(bizContent.toString());
try {
AlipayTradeAppPayResponse response = alipayClient.sdkExecute(request);
String body = response.getBody();
log.info(body);
} catch (Exception e) {
throw new AlipayApiException(e);
}
回调代码
/**
* 支付宝回调
*
* @return
*/
@RequestMapping("/aliPayNotify")
public String aliPayNotify(HttpServletRequest request, HttpServletResponse response) throws Exception {
Map<String, String> params = convertRequestParamsToMap(request); // 将异步通知中收到的待验证所有参数都存放到map中
String paramsJson = JSON.toJSONString(params);
log.info("支付宝回调,{}", paramsJson);
String result = "";
// 调用SDK验证签名
boolean signVerified = AlipaySignature.rsaCheckV1(params, alipayPublicKey, "utf-8", "RSA2");
if (signVerified) {
result = "success";
JSONObject jsonObject = JSON.parseObject(paramsJson);
log.info("支付宝回调签名认证成功");
return result;
}
result = "fail";
return result;
}
// 将request中的参数转换成Map
private static Map<String, String> convertRequestParamsToMap(HttpServletRequest request) {
Map<String, String> retMap = new HashMap<String, String>();
Set<Map.Entry<String, String[]>> entrySet = request.getParameterMap().entrySet();
for (Map.Entry<String, String[]> entry : entrySet) {
String name = entry.getKey();
String[] values = entry.getValue();
int valLen = values.length;
if (valLen == 1) {
retMap.put(name, values[0]);
} else if (valLen > 1) {
StringBuilder sb = new StringBuilder();
for (String val : values) {
sb.append(",").append(val);
}
retMap.put(name, sb.toString().substring(1));
} else {
retMap.put(name, "");
}
}
return retMap;
}