呵呵,多谢! 不过,用户有时确实是会提前关闭页面,导致网站数据无法更新的,这就是一种"掉单"的原因,所以就需要这个服务器异步通知页来"补单".
当然,我们都希望用户不会这么快关闭页面,甚至也可以在一些帮助页面中明确提示用户支付成功后需等待页面跳转回网站相应页面,但是这种情况还是会发生,所以这个服务器异步通知页就很重要了.
我查看了所有支付宝社区上相关的贴子,还是没有解决.下面是我的通知页代码,能帮我看一下哪里有错误吗? 程序很简单的.
<!--#include file="conn.asp"-->
<%
'功能:支付宝主动通知调用的页面(服务器异步通知页面)
'版本:3.1
'日期:2010-10-29
'说明:
'以下代码只是为了方便商户测试而提供的样例代码,商户可以根据自己网站的需要,按照技术文档编写,并非一定要使用该代码。
'该代码仅供学习和研究支付宝接口使用,只是提供一个参考。
''''''''''''页面功能说明'''''''''''''''''''
'创建该页面文件时,请留心该页面文件中无任何HTML代码及空格。
'该页面不能在本机电脑测试,请到服务器上做测试。请确保外部可以访问该页面。
'该页面调试工具请使用写文本函数log_result,该函数已被默认开启,见alipay_notify.asp中的函数notify_verify
'TRADE_FINISHED(表示交易已经成功结束,通用即时到帐反馈的交易状态成功标志);
'TRADE_SUCCESS(表示交易已经成功结束,高级即时到帐反馈的交易状态成功标志);
'该服务器异步通知页面面主要功能是:对于返回页面(return_url.asp)做补单处理。如果没有收到该页面返回的 success 信息,支付宝会在24小时内按一定的时间策略重发通知
'''''''''''''''''''''''''''''''''''''''''''
%>
<!--#include file="alipay_config.asp"-->
<!--#include file="class/alipay_notify.asp"-->
<%
'计算得出通知验证结果
verify_result = notify_verify()
if verify_result then '验证成功
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'请在这里加上商户的业务逻辑程序代码
'——请根据您的业务逻辑来编写程序(以下代码仅作参考)——
'获取支付宝的通知返回参数,可参考技术文档中服务器异步通知参数列表
order_no = request.Form("out_trade_no") '获取订单号
total_fee = request.Form("total_fee") '获取总金额
extra_common_param = request.Form("extra_common_param") '获取客户的注册用户名
if request.Form("trade_status") = "TRADE_FINISHED" or request.Form("trade_status") = "TRADE_SUCCESS" then
'判断该笔订单是否在商户网站中已做过处理,如果做过处理,则不执行程序
dim rsd
set rsd=server.createobject("ADODB.RECORDSET")
rsd.open "select * from payzfb where ordnum='"&order_no&"' and username='"&extra_common_param&"' order by ID desc",conn,1,3,1
if rsd.eof or rsd.bof then
rsd.addnew
rsd("ordnum")=order_no
rsd("ordsta")=1
rsd("username")=extra_common_param
rsd.update
rsd.close
set rsd=nothing
dim rs
set rs=server.createobject("ADODB.RECORDSET")
rs.open "select * from account where buser='"&extra_common_param&"'order by btime asc",conn,1,3,1
if rs.eof or rs.bof then
rs.addnew
rs("balance")=total_fee
rs("byue")=total_fee
rs("balhelp")="网银支付"
rs("buser")=extra_common_param
rs("btime")=DateAdd("h",15,now())
rs.update
else
rs.movelast '获得该客户最新余额
zuiyue=rs("byue")
rs.addnew
rs("balance")=total_fee
rs("byue")=zuiyue+total_fee
rs("balhelp")="网银支付"
rs("buser")=extra_common_param
rs("btime")=DateAdd("h",15,now())
rs.update
end if
rs.close
set rs=nothing
end if
response.Write "success" '请不要修改或删除
'调试用,写文本函数记录程序运行情况是否正常
'log_result("这里写入想要调试的代码变量值,或其他运行的结果记录")
else
response.Write "success" '其他状态判断。普通即时到帐中,其他状态不用判断,直接打印success。
'调试用,写文本函数记录程序运行情况是否正常
'log_result ("这里写入想要调试的代码变量值,或其他运行的结果记录")
end if
'——请根据您的业务逻辑来编写程序(以上代码仅作参考)——
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
else '验证失败
response.Write "fail"
'调试用,写文本函数记录程序运行情况是否正常
'log_result ("这里写入想要调试的代码变量值,或其他运行的结果记录")
end if
%> |