最近在做支付,但是遇到了一个问题,不管是支付宝还是其他网银支付,付款成功后,他们都会发多次结果,支付宝和银联或招行支付,都要连续发5次支付结果来,然后我后台就处理五次支付结果,这样照成了我多次确认付款,我也做了验证,就是每次收到结果的时候先去判断这条记录是否被处理,如果没有处理,就先写入数据库,然后在做处理,但是每次支付结果回调都间隔时间都很短,照成我数据都还没有写完,已经处理了5次数据了,请问各位是怎么处理支付回调的?

解决方案 »

  1.   

    时间很短来不及判断是吧, 我觉得不会呀,是不是这么个逻辑后台有一个判断的功能, 付完款比如发了5次请求,接到第一次的时候 我用一个变量存在viewState中,然后去判断得到结果,再根据结果取决于是否要进行判断2,3,4,5 当然理论上说应该是不需要的,因为第一次已经成功了。试试,每次判断都根据上次的结果去判断,这样存在一个关系,所以后面的应该是可以拦下来的,而不是每次单独去判断不管上次的结果。
      

  2.   

    用viewState肯定不行,因为每次支付回调的时候都是重新打开页面的
      

  3.   

    这个问题应该是前台多次提交造成的。在按钮提交加一个js button.disabled=false; 就可以了另外在后台加入一个事务处理
    把事务贯穿查询和提交就可以了。或者用类似的写法 update table set ddqr=true where 单号=‘’ and ddqr=false
      

  4.   

    //它是每隔一段时间都会发送一个结果。如果你确定结果了处理成功之后你要回发个数据给它。否则会每隔断/时间异步给你那个Notify页面发送结果//如果失败你返回
    Response.Write("fail");然后会继续发送结果
    //如果成功之后你得返回
    Response.Write("success");     //返回给支付宝消息,成功
     //success与fail及其他字符的区别在于,支付宝的服务器若遇到success时,则不再发送请求通知(即不再调用该页面,让该页面再次运行起来),
                    //若不是success,则支付宝默认没有收到成功的信息,则会反复不停地调用该页面直到失效,有效调用时间是24小时以内。