问题描述
最近在做支付,但是遇到了一个问题,不管是支付宝还是其他网银支付,付款成功后,他们都会发多次结果,支付宝和银联或招行支付,都要连续发5次支付结果来,然后我后台就处理五次支付结果,这样照成了我多次确认付款,我也做了验证,就是每次收到结果的时候先去判断这条记录是否被处理,如果没有处理,就先写入数据库,然后在做处理,但是每次支付结果回调都间隔时间都很短,照成我数据都还没有写完,已经处理了5次数据了,请问各位是怎么处理支付回调的?
解决方案
解决方案二:
应该先判断订单号,重复的将会过滤,这样就可以了因为客户支付的订单号是肯定是唯一的,所以只要这里过滤了,就可以了
解决方案三:
引用1楼fei2yun的回复:
应该先判断订单号,重复的将会过滤,这样就可以了因为客户支付的订单号是肯定是唯一的,所以只要这里过滤了,就可以了
我做了订单号判断的,因为支付回调的5次结果间隔时间很短,所以经常是我这边第一条数据都还没有处理完成,这样五次回复记录已经都在执行了。
解决方案四:
如果订单号部分的判断是正确的话,无论你时间有多短都不可能出现重复的情况所谓的并发其实一样存在队列的问题所以建议检查订单号判断的位置代码
解决方案五:
时间很短来不及判断是吧,我觉得不会呀,是不是这么个逻辑后台有一个判断的功能,付完款比如发了5次请求,接到第一次的时候我用一个变量存在viewState中,然后去判断得到结果,再根据结果取决于是否要进行判断2,3,4,5当然理论上说应该是不需要的,因为第一次已经成功了。试试,每次判断都根据上次的结果去判断,这样存在一个关系,所以后面的应该是可以拦下来的,而不是每次单独去判断不管上次的结果。
解决方案六:
我想每发送一次的请求时间应该没有我存在变量中的时间快吧。
解决方案七:
用viewState肯定不行,因为每次支付回调的时候都是重新打开页面的引用5楼ilove_aspnet的回复:
我想每发送一次的请求时间应该没有我存在变量中的时间快吧。
解决方案八:
这个问题应该是前台多次提交造成的。在按钮提交加一个jsbutton.disabled=false;就可以了另外在后台加入一个事务处理把事务贯穿查询和提交就可以了。或者用类似的写法updatetablesetddqr=truewhere单号=‘’andddqr=false
解决方案九:
//它是每隔一段时间都会发送一个结果。如果你确定结果了处理成功之后你要回发个数据给它。否则会每隔断/时间异步给你那个Notify页面发送结果//如果失败你返回Response.Write("fail");然后会继续发送结果//如果成功之后你得返回Response.Write("success");//返回给支付宝消息,成功//success与fail及其他字符的区别在于,支付宝的服务器若遇到success时,则不再发送请求通知(即不再调用该页面,让该页面再次运行起来),//若不是success,则支付宝默认没有收到成功的信息,则会反复不停地调用该页面直到失效,有效调用时间是24小时以内。
解决方案十:
引用7楼yeness的回复:
这个问题应该是前台多次提交造成的。在按钮提交加一个jsbutton.disabled=false;就可以了另外在后台加入一个事务处理把事务贯穿查询和提交就可以了。或者用类似的写法updatetablesetddqr=truewhere单号=‘’andddqr=false
+1