实现支付宝订单状态查询
支付宝文档中的样例
1、首先通过基本参数初始化AlipayClient,此处和支付模块部分相同,不再详述。
2、业务参数
业务参数就两个,选哪个都可以,其中out_trade_no是电商系统生成的,trade_no是支付宝回调后产生的。因为有可能一直就没收到支付宝的回调,也就没有trade_no,所以咱们这里使用out_trade_no。
@Autowired AlipayClient alipayClient; public PaymentStatus checkAlipayPayment(PaymentInfo paymentInfo){ System.out.println(“开始主动检查支付状态,paymentInfo.toString() = ” + paymentInfo.toString()); //先检查当前数据库是否已经变为“已支付状态” if(paymentInfo.getId()==null){ System.out.println(“outTradeNo:”+paymentInfo.getOutTradeNo() ); paymentInfo = getPaymentInfo(paymentInfo); } if (paymentInfo.getPaymentStatus()== PaymentStatus.PAID){ System.out.println(“该单据已支付:”+paymentInfo.getOutTradeNo()); return PaymentStatus.PAID; } //如果不是已支付,继续去查询alipay的接口 System.out.println(“%% % % 查询alipay的接口” ); AlipayTradeQueryRequest alipayTradeQueryRequest=new AlipayTradeQueryRequest(); alipayTradeQueryRequest.setBizContent(“{\”out_trade_no\”:\””+paymentInfo.getOutTradeNo()+“\”}”); AlipayTradeQueryResponse response=null; try { response = alipayClient.execute(alipayTradeQueryRequest); } catch (AlipayApiException e) { e.printStackTrace(); } if(response.isSuccess()){ String tradeStatus = response.getTradeStatus(); if (“TRADE_SUCCESS”.equals(tradeStatus)){ System.out.println(“支付完成 ====================== ” ); //如果结果是支付成功 ,则更新支付状态 PaymentInfo paymentInfo4Upt=new PaymentInfo(); paymentInfo4Upt.setPaymentStatus(PaymentStatus.PAID); paymentInfo4Upt.setCallbackTime(new Date()); paymentInfo4Upt.setCallbackContent(response.getBody()); paymentInfo4Upt.setId(paymentInfo.getId()); paymentInfoMapper.updateByPrimaryKeySelective(paymentInfo4Upt); // 然后发送通知给订单 sendPaymentResult(paymentInfo,“success”); return PaymentStatus.PAID; }else{ System.out.println(“支付尚未完成 ?????????? ” ); return PaymentStatus.UNPAID; } }else{ System.out.println(“支付尚未完成 ?????????? ” ); return PaymentStatus.UNPAID; } } |