采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
我的支付宝沙盘付款前(扫码未支付)能收到回调,返回状态是WAIT_BUYER_PAY,付款成功后为什么收不到回调呢?支付成功状态为什么一直没收到?是轮询的事吗
我当时也是这个情况,后来仔细检查代码,发现OrderServiceImpl里的pay方法switch case SUCCESS
if(!folder.exists()){ folder.setWritable(true); folder.mkdirs();}
里面的!忘写了,太马虎了俺
同学,有1个疑问:
付款成功后为什么收不到回调,是通过debug判断得出的结论还是查看数据库状态得出的结论?
如果是debug得出的结论,就是支付宝沙箱自身的问题,需要给支付宝下工单。如果是通过查看数据库状态得出的结论,其实这个结论并不靠谱,有可能存在,支付成功并且回调了,但是你的代码逻辑有问题导致没有修改数据库状态。
老师,是这么个情况。我在回调函数中写了几个输出sout,发现只有 “第二个地方222”那里是运行不到的,因为调用这个函数的时候,返回的 状态是WAIT_BUYER_PAY,而不是支付成功!创建的新PayInfo信息里面状态也是WAIT_BUYER_PAY。 public ServerResponse aliCallback(Map<String,String> params){ //省略 Order order = orderMapper.selectByOrderNo(orderNo); if(order == null){ return ServerResponse.createByErrorMessage("非快乐慕商城的订单,回调忽略"); } System.out.println("trade_no: "+tradeNo); System.out.println("tradeStatus: "+tradeStatus); if(order.getStatus() >= Constant.OrderStatusEnum.PAID.getCode()){ return ServerResponse.createBySuccess("支付宝重复调用"); } if(Constant.AlipayCallback.TRADE_STATUS_TRADE_SUCCESS.equals(tradeStatus)){ System.out.println("第二个地方2222"); order.setPaymentTime(DateUtils.strToDate(params.get("gmt_payment"))); order.setStatus(Constant.OrderStatusEnum.PAID.getCode()); orderMapper.updateByPrimaryKeySelective(order); } PayInfo payInfo = new PayInfo(); 。省略 }
稍微调整一下代码 public ServerResponse aliCallback(){ //省略 System.out.println("tradeStatus: "+tradeStatus); 这里一直是WAIT_BUYER_PAY //下面的if里面一直运行不到 if(Constant.AlipayCallback.TRADE_STATUS_TRADE_SUCCESS.equals(tradeStatus)){ System.out.println("第二个地方2222"); order.setPaymentTime(DateUtils.strToDate(params.get("gmt_payment"))); order.setStatus(Constant.OrderStatusEnum.PAID.getCode()); orderMapper.updateByPrimaryKeySelective(order); } 。省略 }
同学,这样,你在controller的alipayCallback方法执行的第一行上面打个断点测试一下,仅仅通过syso不一定能抓住重点信息。相信我,去打个断点看一下。
登录后可查看更多问答,登录/注册
前后端分离,数据库接口设计,架构设计,功能开发,上线运维
10.6k 10
2.0k 22
1.5k 21
2.4k 21
2.1k 18
购课补贴联系客服咨询优惠详情
慕课网APP您的移动学习伙伴
扫描二维码关注慕课网微信公众号