700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 支付宝java代码_支付宝回调JAVA版代码

支付宝java代码_支付宝回调JAVA版代码

时间:2022-01-27 21:29:28

相关推荐

支付宝java代码_支付宝回调JAVA版代码

支付宝回调:

1 //这个是支付宝回调的信息

2 @RequestMapping("alipay_callback.do")

3 @ResponseBody

4 public Object alipayCallback(HttpServletRequest request){

5 Map params = Maps.newHashMap();

6 //getParameterMap()一般多用于接收前台表单多参数传输的数据

7 //支付宝的回调都是把信息放到request里面

8 Map requestParams = request.getParameterMap();

9 //keyset()是获取所有的key值,iterator()是迭代遍历

10 for(Iterator iter = requestParams.keySet().iterator();iter.hasNext();){

11 String name = (String)iter.next();

12 //这里把key放到数组里面

13 String[] values = (String[]) requestParams.get(name);

14 String valueStr = "";

15 //这个for循环的尊用就是把上面那个String中的值都遍历一遍

16 for(int i = 0 ; i

17 //这个是三元运算符

18 valueStr = (i == values.length -1)?valueStr + values[i]:valueStr + values[i]+",";

19 }

20 //把数据全部加进map集合中 name就是key valueStr就是value

21 params.put(name,valueStr);

22 }

23 //sign就是签名 trade_status是交易的状态

24 logger.info("支付宝回调,sign:{},trade_status:{},参数:{}",params.get("sign"),params.get("trade_status"),params.toString());

25

26 //非常重要,验证回调的正确性,是不是支付宝发的.并且呢还要避免重复通知.

27 //这个非常重要,但是不知道这个是什么意思

//这个是签名类型 sign参数已经帮我们删除掉了,在这里我们要把签名类型删除掉

28 params.remove("sign_type");

29 try {

30 //这里是RSA验证签名

31 // Configs.getAlipayPublicKey() 其实就是支付宝的应用公钥(记住不是支付宝的公钥,是支付宝应用公钥)

32 //Configs.getSignType()也就是支付宝文本类型里面的签名类型:RSA2

33 boolean alipayRSACheckedV2 = AlipaySignature.rsaCheckV2(params, Configs.getAlipayPublicKey(),"utf-8",Configs.getSignType());

34 //如果验证上面的boolean为true的话,我们就应该更改下订单的状态,减少下库存这些操作

35 if(!alipayRSACheckedV2){

36 return ServerResponse.createByErrorMessage("非法请求,验证不通过,再恶意请求我就报警找网警了");

37 }

38 } catch (AlipayApiException e) {

39 logger.error("支付宝验证回调异常",e);

40 }

//回调之后修改账单状态

ServerResponse serverResponse = iOrderService.aliCallback(params);if(serverResponse.isSuccess()){return Const.AlipayCallback.RESPONSE_SUCCESS;

}return Const.AlipayCallback.RESPONSE_FAILED;

}

支付宝回调之后修改账单的状态

//这个是回调地址之后更新一些订单状态的方法

public ServerResponse aliCallback(Mapparams){//订单号

Long orderNo = Long.parseLong(params.get("out_trade_no"));//支付宝的交易号

String tradeNo = params.get("trade_no");//支付宝的交易状态

String tradeStatus = params.get("trade_status");//在这个方法里面查询一下,看一下这个订单号码是否存在

Order order = orderMapper.selectByOrderNo(orderNo);if(order == null){return ServerResponse.createByErrorMessage("非快乐慕商城的订单,回调忽略");

}//在这里调用枚举类,判断订单是否已经支付

if(order.getStatus() >= Const.OrderStatusEnum.PAID.getCode()){return ServerResponse.createBySuccess("支付宝重复调用");

}//这里调用的是支付宝官方的枚举

//“TRADE_STATUS_TRADE_SUCCESS”是交易完成的意思

if(Const.AlipayCallback.TRADE_STATUS_TRADE_SUCCESS.equals(tradeStatus)){//记录交易的时间,这个字符串是固定的

order.setPaymentTime(DateTimeUtil.strToDate(params.get("gmt_payment")));

order.setStatus(Const.OrderStatusEnum.PAID.getCode());

orderMapper.updateByPrimaryKeySelective(order);//把订单状态改成已付款

}

PayInfo payInfo= newPayInfo();

payInfo.setUserId(order.getUserId());

payInfo.setOrderNo(order.getOrderNo());

payInfo.setPayPlatform(Const.PayPlatformEnum.ALIPAY.getCode());

payInfo.setPlatformNumber(tradeNo);

payInfo.setPlatformStatus(tradeStatus);

payInfoMapper.insert(payInfo);return ServerResponse.createBySuccess();

}

支付宝通知返回时的交易状态列表

即时到帐接口——交易状态列表

交易状态操作:支付宝有交易记录,没付款

交易状态(trade_status):WAIT_BUYER_PAY

备注:通知不会返回,不能申请修改。

交易状态操作:交易完成

交易状态(trade_status):TRADE_FINISHED

备注:交易结束,不可退款

交易状态操作:交易完成

交易状态(trade_status):TRADE_SUCCESS

备注:高级即时到帐状态下

交易状态操作:交易关闭

交易状态(trade_status):TRADE_CLOSED

备注:默认通知不返回,可申请修改(条件需开通高级即时到帐功能,且非常需要退款的同步)。出现该情况在开通高级即时到帐时的人工操作退款时、买家没付款系统自动或卖家手动关闭了该笔交易

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。