隐藏

用ASP接收Paypal的notify_url通知“偶尔”出错

发布:2015/1/6 11:43:57作者:管理员 来源:本站 浏览次数:1762

用hidden加了个notify_url的项目,value就是我要进行数据库处理的一个程序页面。
这个程序页面一般情况下没啥问题,但是偶尔会出现问题:就是paypal收到钱了,但是我这notify_url指向的Link却没有执行,导致数据库状态没更改过来。
查看日志文件,也没有保留,说明在这个异步请求里面,返回的值还是200。
当返回值是200,并且返回的字符串是“VERIFIED”的时候,我这就直接写数据库了(因为其他地方比较麻烦,我没做验证。)。
问题似乎就出在这个elseif上,因为其他错误我都写了日志的。

这个错误也不是说每次交易都出现,一般情况下是正常的。目前这个功能已经试运行了大约10天了,只出过两次错误,并且两次都是同一个用户提交了多个订单(因为我们还没做购物车),然后支付的时候明明已经付钱给paypal,但是我这数据库状态没更改过来。

如果说是因为多订单的问题,那这10天内也不止两个客户提交多个订单啊,绝大多数客户的订单都没问题的。
目前这个问题很头疼,求助。

notify_url返回的url中主要程序如下(其实就是paypal的官方文档说的那样):

VBScript code





Dim Item_name, Item_number, Payment_status, Payment_amount

Dim Txn_id, Receiver_email, Payer_email

Dim objHttp, str 

Dim OrderCode

'这里因为我们之前的程序员卷铺盖走人,我没办法才用querystring获取自定义订单号获取订单的ID

OrderCode=Trim(Request.QueryString("oc"))

'从PayPal 出读取POST 信息同时添加变量 "cmd‟

str = Request.Form & "&cmd=_notify-validate"

'建议在此将接受到的信息记录到日志文件中以确认是否收到IPN 信息 '将信息POST 回给PayPal 进行验证

set objHttp = Server.CreateObject("Msxml2.ServerXMLHTTP")

'set obj Http = Server.CreateObject("Msxml2.ServerXMLHTTP.4.0") 

'set obj Http = Server.CreateObject("Microsoft.XMLHTTP") 

objHttp.open "POST", "https://www.paypal.com/cgi-bin/webscr", false

objHttp.setRequestHeader "Content-type", "application/x-www-form-urlencoded"

objHttp.Send str Item_name = Request.Form("item_name")

Item_number = Request.Form("item_number")

Payment_status = Request.Form("payment_status")

Payment_amount = Request.Form("mc_gross")

Payment_currency = Request.Form("mc_currency")

Txn_id = Request.Form("txn_id")

Receiver_email = Request.Form("receiver_email")

Payer_email = Request.Form("payer_email")

'检查通知是否合法

if (objHttp.status <> 200 ) then

'写入日志,http错误 

elseif (objHttp.responseText = "VERIFIED") then

'一通验证之后执行rs.open sql,conn,1,3之类的写入数据库操作

elseif (objHttp.responseText = "INVALID") then

'这个是服务器跟paypal核对的信息不一致的错误,paypal说是一般这是因为编码错误或者非法post变量导致。

'这个也写入日志

else

'paypal的官方文档说这是其他错误,我在错误日志里面没发现这个类型的错误 

end if

set objHttp=Nothing