1,:先调用支付宝支付接口,帮返回的form表单返给前端
2:前端触发submit按钮自动跳转
3:用户支付后触发 同步和异步
public class PayMentUtil {
//配置文件实体类
private final PayMent payMent;
public AlipayTradePagePayResponse pay(OrderDto orderDto) throws AlipayApiException {
AlipayClient alipayClient = new DefaultAlipayClient(payMent.getGatewayUrl(), payMent.getAppId(), payMent.getRsaPrivateKey(), payMent.getFormat(), payMent.getCharset(), payMent.getAlipayPublicKey(), payMent.getSignType());
AlipayTradePagePayRequest request = new AlipayTradePagePayRequest();
//同步触发 返回的页面
request.setNotifyUrl(payMent.getNotifyUrl());
//异步触发 支付完成后触发
request.setReturnUrl(payMent.getReturnUrl());
System.out.println(request);
JSONObject bizContent = new JSONObject();
bizContent.put("out_trade_no", orderDto.getOrderNo());
bizContent.put("total_amount", orderDto.getTotalAmount().divide(bigDecimal));
bizContent.put("subject", orderDto.getProductName());
bizContent.put("product_code", "FAST_INSTANT_TRADE_PAY");
// bizContent.put("time_expire","2021-11-24 19:18:32");
商品明细信息,按需传入http://36.7.111.213:9098/ser
//JSONArray goodsDetail = new JSONArray();
//JSONObject goods1 = new JSONObject();
//goods1.put("goods_id", "goodsNo1");
//goods1.put("goods_name", "子商品1");
//goods1.put("quantity", 1);
//goods1.put("price", 0.01);
//goodsDetail.add(goods1);
//bizContent.put("goods_detail", goodsDetail);
扩展信息,按需传入
//JSONObject extendParams = new JSONObject();
//extendParams.put("sys_service_provider_id", "2088511833207846");
//bizContent.put("extend_params", extendParams);
request.setBizContent(bizContent.toString());
log.info(bizContent.toString());
AlipayTradePagePayResponse response = alipayClient.pageExecute(request);
if (response.isSuccess()) {
System.out.println("调用成功");
} else {
System.out.println("调用失败");
}
System.out.println(response);
return response;
}
//查询接口
public String query(OrderDto orderDto) throws AlipayApiException {
AlipayClient alipayClient = new DefaultAlipayClient(payMent.getGatewayUrl(), payMent.getAppId(), payMent.getRsaPrivateKey(), payMent.getFormat(), payMent.getCharset(), payMent.getAlipayPublicKey(), payMent.getSignType());
AlipayTradeQueryRequest request = new AlipayTradeQueryRequest();
JSONObject bizContent = new JSONObject();
bizContent.put("out_trade_no", orderDto.getOrderNo());
request.setBizContent(bizContent.toString());
AlipayTradeQueryResponse response = alipayClient.execute(request);
if (response.isSuccess()) {
System.out.println("调用成功");
if ("TRADE_SUCCESS".equals(response.getTradeStatus())) {
return "success";
}
} else {
System.out.println("调用失败");
return "fail";
}
return "fail";
}
2:支付宝异步触发先验签,后用返回的结果做数据处理
//支付宝异步通知改变订单状态
@PostMapping("/notify")
public String notify(HttpServletRequest request) throws Exception {
log.info("异步通知开始");
//获取异步传来的数据
Map<String, String> map = new HashMap<String, String>();
Map requestParams = request.getParameterMap();
for (Iterator 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] + ",";
}
// //乱码解决,这段代码在出现乱码时使用
// try {
// valueStr = new String(valueStr.getBytes(), "utf-8");
// } catch (UnsupportedEncodingException e) {
// e.printStackTrace();
// }
map.put(name, valueStr);
}
System.out.println("支付结果---:" + map.toString());
//调用SDK验证签名
boolean signVerified = false;
try {
signVerified = AlipaySignature.rsaCheckV1(map, payMent.getAlipayPublicKey(), payMent.getCharset(), payMent.getSignType());
} catch (Exception e) {
e.printStackTrace();
}
if (signVerified) {
System.out.println("支付结果---:" + map.toString());
String trad_no = map.get("out_trade_no");
//根据交易流水号查询交易信息
//交易成功
if ("TRADE_SUCCESS".equals(map.get("trade_status"))) {
//数据处理
// orderService.updateOrderByOrderNo(trad_no);
}
return "success";
}
return "failure";
}
//支付宝同步通知,只会调到我们转回的页面
@GetMapping("/return")
public ModelAndView returnUrl(HttpServletRequest request) throws Exception {
log.info("同步验签");
//获取异步传来的数据
Map<String, String> map = new HashMap<String, String>();
Map requestParams = request.getParameterMap();
for (Iterator 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] + ",";
}
//乱码解决,这段代码在出现乱码时使用。如果mysign和sign不相等也可以使用这段代码转化
//valueStr = new String(valueStr.getBytes("ISO-8859-1"), "gbk");
map.put(name, valueStr);
}
log.info("支付结果---:" + map.toString());
//调用SDK验证签名
boolean signVerified = false;
try {
signVerified = AlipaySignature.rsaCheckV1(map, payMent.getAlipayPublicKey(), payMent.getCharset(), payMent.getSignType());
} catch (Exception e) {
e.printStackTrace();
}
ModelAndView view = new ModelAndView();
//页面路径
RedirectView redirectView = new RedirectView(payMent.getReturnOrder());
redirectView.setExpandUriTemplateVariables(false);
redirectView.setExposeModelAttributes(false);
view.setView(redirectView);
view.addObject("order", "finish");
return view;
}