支付宝及时到账异步支付不成功问题
简述:用handler来处理支付宝异步post过来的form信息。
前阵子给自己公司的站点做支付宝的支付即时到帐功能。
在客户支付的时候。尤其是通过银行网银转账将费用付款到公司支付宝的时候,会经过两次跳转。
比如用建设银行网银来举例:
第一次是:建行缴费成功后,会给一个支付成功的提示,然后3秒后跳转至支付宝支付成功页面
第二次是:支付宝成功页面等待3秒后,跳转回公司站点页面。
由于我接手的是现成的站点,站点的最初开发找的是本地一家规模不算很小的软件公司做的,asp.net,c#程序。(四线城市,能有软件公司就不错了……)
软件公司挺不负责的只做了即时到帐支付的同步(我不知道别人怎么叫,反正支付宝客服这么叫)部分,也就是经过最多两次跳转,最少一次跳转后,支付宝支付成功界面会跳转到公司站点预设的订单界面。公司站点在接收到这次跳转中包含的订单支付成功信息后,对这个订单进行逻辑处理操作。
这就出现了这么一个问题:如果一旦客户看到支付成功页面后,手快关闭了这个即将跳转回公司站点的页面,那就完蛋了。公司站点接收不到需要跳转回来才确认的订单信息,导致订单一直处于未支付成功状态。
经过两次投诉后,领导令我不许出现第三次这种问题。于是开始了为期三天的支付宝即时到帐接口研究之旅。
咨询支付宝,支付宝给的回复是:这是同步支付确认收款的弊病,建议使用异步支付。
下载了接口教程(原谅我是小白没接触过这个接口,原接口还是软件公司做的)研究过后发现,异步当时是写过了的,只不过不能用。
给支付宝打了几个电话,最后告诉我技术问题在站点咨询。(https://b.alipay.com/order/techService.htm?src=nsf05 页面右侧的 “有问题点我” 头像)
询问后,查了客户交费的订单号,给我支付宝发送异步post请求的一个截图,
(上方部分涉及隐私已截去)
告诉我说:是站点重定向问题。具体原因他们也没法确定,反正是公司站点的问题,不是他们的问题。
我以小白的身份继续追问,他们告诉我:
作为一个小白,我很天真的去找站点中的redirect。
结果当然是没有找到。
继续追问,支付宝告诉我,他们这种方式是:
支付宝向指定的站点url发送一个form的post。
站点需要接收这个post后,反馈给支付宝服务器“sucess”,来确认站点已经完成了订单处理信息。
支付宝api教程中,给的是一个aspx页面。页面无内容,只有后台代码中插入了接收form的逻辑,并需要根据订单处理方式加入订单处理逻辑。
我检查了所有的跳转,包括url重写和web.config中的404跳转,都没有发现问题。
最后想到了以前用handler处理本站的form提交信息。试用一下,果然,异步成功。
(P.S.说了半天,除了上一句和第一句,其他的都是废话。)
(其实我就是记录一下支付宝问题的处理方式,兰后顺便遇到这种postform的问题知道可以用handler接收处理。)
(其实,就是我脑子小,怕忘了罢了。。。)