1:调用支付宝接口,获取的结果from表单给前端
2:将返回的结果发送给前端,前端触发submin表番
3:用户支付完成会触发 异步和同步
//手机唤起支付宝 //传参
public AlipayTradeWapPayResponse payPhone(OrderDto orderDto) throws AlipayApiException {
AlipayClient alipayClient = new DefaultAlipayClient(payMent.getGatewayUrl(), payMent.getAppId(), payMent.getRsaPrivateKey(), payMent.getFormat(), payMent.getCharset(), payMent.getAlipayPublicKey(), payMent.getSignType());
AlipayTradeWapPayRequest request = new AlipayTradeWapPayRequest();
request.setNotifyUrl(payMent.getNotifyUrl());
request.setReturnUrl(payMent.getReturnUrl());
JSONObject bizContent = new JSONObject();
bizContent.put("out_trade_no", orderDto.getOrderNo());
bizContent.put("total_amount", orderDto.getTotalAmount());
bizContent.put("subject", orderDto.getProductName());
bizContent.put("product_code", "QUICK_WAP_WAY");
request.setBizContent(bizContent.toString());
AlipayTradeWapPayResponse response = alipayClient.pageExecute(request);
if (response.isSuccess()) {
System.out.println("调用成功");
} else {
System.out.println("调用失败");
}
return response;
}
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("/PhoneReturn")
public ModelAndView PhoneReturn(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.getReturnPhoneUrl());
redirectView.setExpandUriTemplateVariables(false);
redirectView.setExposeModelAttributes(false);
view.setView(redirectView);
view.addObject("order", "finish");
return view;
}