在官网的例子中return_rul页面和notice_url页面的代码中有这么一个判断,如下
SortedDictionary<string, string> sPara = GetRequestGet(); if (sPara.Count > 0)//判断是否有带返回参数 { //其他代码略 } else { Response.Write("无返回参数"); }
就是判断支付宝接口有没有返回参数,我想问的是,如果没有返回参数是个什么情况,怎么处理?尤其是在return_url页面,我们需要呈现一个支付结果页面,告诉用户支付是成功还是失败,但如果一旦出现无返回参数这一情况,该怎么处理,支付是成功呢还是失败呢?总不能告诉用户的信息是“无返回参数”吧!我想用户也不懂这是什么意思。
通常无返回参数是不太会发生的。如果有人直接拿你的returnurl或者notifyurl进行访问,可能参数就什么也没有。当然也不排除因为网络环境、信号衰减等导致传输过程中有丢包发生。
解决方法也较为简单,如无返回参数发生在return_url处,可以直接显示一段较为友好的话术,提示用户稍等或者让用户进入订单系统查看支付结果。支付宝后台会通过notify_url进行异步通知,如果异步通知也失败,你直接返回不是success的字符串,支付宝会尝试再次通知你,好像是25个小时内有8次异步通知。就算后台通知还是不成功,支付宝也提供了查询接口,可以查到支付结果。
再请教一个问题,支付宝接口是不是只有当我在notify_url中发送了success 标识之后,才向return_url页面发送参数消息?否则是不是会一直不会调用return_url页面?这两个页面是什么关系?
望赐教!
@njl_041x: 不是的。用户在支付宝支付完成后,会根据returnurl通过页面跳转返回,同时支付宝后台通过notifyurl异步回调通知你的站点支付已经完成,这两步其实是并行进行的,很可能异步通知先通知到你的站点。
非常感谢你的回复。我也查了一些资料return_url和notify_url确实没什么关系,甚至在支付宝的早期版本中是没有notify_url调用的,notify_url的增加只是对return_url的补充,避免交易不完整。