该页面有短暂的停留时间,买家看到这个提示信息后有可能会把当前页面关掉,导致页面没有自动跳转回商户网站(return_url)使得商户的业务数据没有被处理(如:订单没有更新)。出现这种情况的原因是:商户网站的支付宝接口并没有利用服务器异步通知页面文件(notify_url)或是该页面在订单执行过程中也出现异常。
解决方法:
解决人员:商户网店开发、维护或管理的程序开发技术人员、商户网店系统提供商
解决步骤:
1、打开return_url页面文件(参数参数return_url对应返回文件),找到已经编写好的业务逻辑处理程序代码段,对其增加防止该笔交易被重复处理判断。
2、打开notify_url页面文件(参数参数notify_url对应返回文件),找到可插入商户的业务逻辑处理程序代码的地方,编写与return_url页面文件中相类似的程序,也需要包含防止该笔交易被重复处理的判断。
修改完成后效果:
当买家关掉自动跳转回商户网站的返回页面(参数return_url对应的return_url返回文件)时,商户的业务处理依旧被notify_url页面文件所执行,因此就不会发生业务没有同步的现象出现(如:订单没有被更新)
注意:
1、注意获取值的方式,notify_url页面文件是POST方式获取(request.form("参数名 ")、$_POST['参数名']),return_url页面文件是GET方式获取(request.querrystring("参数名 ")、$_GET['参数名'])
2、notify_url文件的特性是:
1) 必须保证服务器异步通知页面(notify_url)上无任何字符,如空格、HTML标签、开发系统自带抛出的异常提示信息等;
2) 该页面中获得参数的方式,需要使用POST方式获取,如:request.Form(“out_order_no”)、$_POST['out_order_no'];
3、 支付宝主动发起通知,该方式才会被启用;
4、 只有在支付宝的交易管理中存在该笔交易,且发生了交易状态的改变,支付宝才会通过该方式发起服务器通知(即时到账中交易状态为“等待买家付款”的状态默认是不会发送通知的);
5、 服务器间的交互,不像页面跳转同步服务器异步通知页面可以在页面上显示出来,这种交互方式是不可见的;
6、 第一次交易状态改变(即时到账中此时交易状态是交易完成)时,不仅页面跳转同步通知页面会启用,而且服务器异步通知页面也会收到支付宝发来的处理结果通知;
7、 程序执行完后必须打印输出“success”(不包含引号)。如果商户反馈给支付宝的字符不是success这7个字符,支付宝服务器会不断重发通知,直到超过24小时22分钟。
在25小时内完成6~10次通知(通知频率:5s,2m,10m,15m,1h,2h,6h,15h);
8、 程序执行完成后,该页面不能执行页面跳转。如果执行页面跳转,支付宝会收不到success字符,会被支付宝服务器判定为该页面程序运行出现异常,而重发处理结果通知;
9、 cookies、session等在此页面会失效,即无法获取这些数据;
10、 该方式的调试与运行必须在服务器上,即互联网上能访问;
11、 该方式的作用主要防止订单丢失,即页面跳转同步服务器异步通知页面没有处理订单更新,它则去处理;
12、 通知ID(参数notify_id)只有一分钟有效期,超过一分钟该次通知会验证失败。一旦验证成功下次再验证就会失效。