网上下载了些示例,但是有些问题。。
它下面这种回调是不是写错了呀?支付宝支付成功后的回调,回调是无返回的,它这里有一个String返回呢。
下面是控制层
@ResponseBody
@RequestMapping("/notify")
public String notify(HttpServletRequest request, HttpServletResponse response) {
return alipayViewService.notify(request, response);
}
service层
/**
* @Function: App支付成功 支付宝异步通知回调
*/
public String notify(HttpServletRequest request, HttpServletResponse response) {
Map<String, String> params = new HashMap<String, String>();
//从支付宝回调的request域中取
Map<String, String[]> requestParams = request.getParameterMap();
for (Iterator<String> iter = requestParams.keySet().iterator(); iter.hasNext(); ) {
String name = iter.next();
String[] values = 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不相等也可以使用这段代码转化
try {
valueStr = new String(valueStr.getBytes("ISO-8859-1"), "gbk");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
params.put(name, valueStr);
}
//商品订单号
String out_trade_no = request.getParameter("out_trade_no");// 商户订单号
// 当前交易状态
String tradeStatus = request.getParameter("trade_status"); //交易状态
// 支付金额
String totalAmount = request.getParameter("total_amount"); //交易状态
// 支付时间
String payDate = request.getParameter("gmt_payment"); //交易状态
// 3.签名验证(对支付宝返回的数据验证,确定是支付宝返回的)
boolean signVerified = false;
try {
//3.1调用SDK验证签名
signVerified = AlipaySignature.rsaCheckV1(params, publicKey, "utf-8", "RSA2");
} catch (AlipayApiException e) {
e.printStackTrace();
}
//返回状态存入redis中
// 对验签进行处理
if (signVerified) {
//验签通过
if (tradeStatus.equals("TRADE_SUCCESS")) {
//支付成功后的业务处理
Order order = orderMapper.getOrderInfo(Long.valueOf(out_trade_no));
if (!Util.isEmpty(order)) {
order.setStatus(CalculatStaticConstant.CHECK_ONE);
order.setCompleteTime(DateUtil.currentDate());
orderMapper.updateOrder(order);
/* 添加支付信息 */
OrderPayEntity orderPay = new OrderPayEntity();
GOrder.setId(Long.valueOf(IdUtils.getPrimaryKey()));
orderPay.setOrderId(order.getId());
orderPay.setUserId(order.getUserId());
orderPay.setPayPrice(Double.valueOf(totalAmount));
orderPay.setPayType(PayTypeEnum.ALI_PAY.intKey());
orderPay.setStatus(CalculatStaticConstant.CHECK_ONE);
orderPay.setPayTime(payDate);
orderMapper.saveOrderPay(orderPay);
RedisUtil.set("ali" + out_trade_no, tradeStatus, 300);
return "success";
} else {
//验签不通过
System.err.println("验签失败");
return "failure";
}
return "failure";
}
}
}
且,这个Service层,又是要(HttpServletRequest request, HttpServletResponse response) 它是微服务的一种吧?不然怎么会在Service层 要一个http这些呢?