请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

支付宝沙盘付款前能收到回调 付款成功后收不到回调

我的支付宝沙盘付款前(扫码未支付)能收到回调,返回状态是WAIT_BUYER_PAY,付款成功后为什么收不到回调呢?支付成功状态为什么一直没收到?是轮询的事吗

正在回答 回答被采纳积分+3

2回答

小锤锤yeah 2019-10-28 19:39:17

我当时也是这个情况,后来仔细检查代码,发现OrderServiceImpl里的pay方法switch case SUCCESS

if(!folder.exists()){
   folder.setWritable(true);
   folder.mkdirs();
}

里面的!忘写了,太马虎了俺

0 回复 有任何疑惑可以回复我~
geelylucky 2019-06-16 23:53:52

同学,有1个疑问:

  1. 付款成功后为什么收不到回调,是通过debug判断得出的结论还是查看数据库状态得出的结论?

    如果是debug得出的结论,就是支付宝沙箱自身的问题,需要给支付宝下工单。如果是通过查看数据库状态得出的结论,其实这个结论并不靠谱,有可能存在,支付成功并且回调了,但是你的代码逻辑有问题导致没有修改数据库状态。

0 回复 有任何疑惑可以回复我~
  • 提问者 245192766 #1
    老师,是这么个情况。我在回调函数中写了几个输出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();
           。省略
        }
    回复 有任何疑惑可以回复我~ 2019-06-17 09:37:29
  • 提问者 245192766 #2
    稍微调整一下代码 
    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);
     }
    。省略 
    }
    回复 有任何疑惑可以回复我~ 2019-06-17 09:39:45
  • geelylucky 回复 提问者 245192766 #3
    同学,这样,你在controller的alipayCallback方法执行的第一行上面打个断点测试一下,仅仅通过syso不一定能抓住重点信息。相信我,去打个断点看一下。
    回复 有任何疑惑可以回复我~ 2019-06-17 19:51:27
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号