首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > ASP >

用ASP接收Paypal的notify_url通知“偶尔”出错解决思路

2012-04-01 
用ASP接收Paypal的notify_url通知“偶尔”出错向paypal提交支付申请的表单里面,我用hidden加了个notify_url

用ASP接收Paypal的notify_url通知“偶尔”出错
向paypal提交支付申请的表单里面,我用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获取自定义订单号获取订单的IDOrderCode=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 ifset objHttp=Nothing


[解决办法]

每一笔订单成功付款之后paypal都会向网站发送关于该订单的post字符串让网站进行数据处理,这些字符串登录paypal收款邮箱可以找到,在及时付款通知里面。

可以找到有问题订单的及时付款通知,把那些字符串拷贝出来放到本地模拟执行一下,看看问题出在哪
[解决办法]
callback的url是否能PayPal返回的。最好检查一下。

热点排行