PayPal [ASP]

web相关

2009-06-23 15:37

PayPal 快速、安全而又方便,是跨国交易的首选在线付款方式。现在PayPal可以和国内大部分信用卡关联,可以实现国人的跨国交易收支。
申请PayPal注册网址:https://www.paypal.com/

paypal接口与其它接口有些不同,稍微复杂一点。 其实银行接口也算是一个站点的插件。

所谓paypal ipn(Instant Payment Notification),就是Paypal开发的一种能主动通知第三方卖家系统交易状态的一种机制。IPN的原理很简单,就是当产生了一个交易之后,交易状态发生变化时,如用户已经付款、或者退款、撤销时,Paypal利用常用的HTTP POST方式,将交易的一些变量提交给网站的某个页面(称之为IPN Handler),当这个页面接受到请求时候,将这些数据原封不动加上一个指示验证的cmd=_notify-validate,POST回Paypal的接口地址,如果数据正确,那么Paypal返回字符串VERIFIED,否则为INVALID,如果结果为VERIFIED,那么你的程序就可以使用这些数据进行操作。

IPN

PDT

付款确认页面
------------------------------------------------------------------------------------------------------------------------
<% invoice=cstr(date())&Cstr(Clng(Rnd*100000)) 产生订单号码%>
<% '讲用户填写的订单信息[地址,联系,购买物品等]写入数据库%>
<form target="paypal" action="https://www.sandbox.paypal.com/cgi-bin/webscr" method="post">
<input type="image" src="https://www.sandbox.paypal.com/en_US/i/btn/btn_paynowCC_LG.gif" border="0" name="submit" alt="PayPal is the safer, easier way to pay - PayPal">
<input type="hidden" name="cmd" value="_cart"> 类型
<input type="hidden" name="notify_url" value="http://bz.lanqiaobiz.com/shop/ipn.asp"> IPN返回地址
<input type="hidden" name="business" value=""> 收款邮件
<input type="hidden" name="invoice" value="<%=invoice%>">//用来根据订单的字符串
<%
i=1         
for each s in session("shop")   '遍历 购物车
           response.Write(" <input type='hidden' name='item_name_"&i&"' value='"&session("shop").item(s).item("title")&"'>")   ' 物品名称
           response.Write(" <input type='hidden' name='amount_"&i&"' value='"&session("shop").item(s).item("price")&"'>") '价格
           response.Write(" <input type='hidden' name='item_number_"&i&"' value='"&session("shop").item(s).item("id")&"'>") '您用于跟踪购买的传递变量
           Response.write(" <input type=""hidden"" name=""quantity_"&(i)&""" value="""&session("shop").item(s).item("num") &"""/>") '物品数量
if StrComp(request.Form("Country"),"Australia")=0 then
       if i=1 then
                Response.write(" <input type=""hidden"" name=""shipping_"&(i)&""" value=""6.9""/>")
       else
                  Response.write(" <input type=""hidden"" name=""shipping2_"&(i)&""" value=""2""/>")
       end if
       Response.write(" <input type=""hidden"" name=""shipping2_"&(i)&""" value=""2""/>")
else
       if i=1 then
            Response.write(" <input type=""hidden"" name=""shipping_"&(i)&""" value=""25""/>")
       else
           Response.write(" <input type=""hidden"" name=""shipping2_"&(i)&""" value=""5""/>")
      end if
       Response.write(" <input type=""hidden"" name=""shipping2_"&(i)&""" value=""5""/>")
end if
i=i+1
Next
%>
<input type="hidden" name="currency_code" value="AUD"> //货币
<input type="hidden" name="cancel_return" value="http://bz.lanqiaobiz.com/shop/buy.asp"> //取消返回
<input type="hidden" name="return" value="http://bz.lanqiaobiz.com/shop/pdt.asp">    //PDT地址
<input type="hidden" name="upload" value="1">
<input type="hidden" name="charset" value="UTF-8">
<input type="hidden" name="no_note" value="1">
<input type="hidden" name="bn" value="PP-BuyNowBF">
</form>

IPN
-------------------------------------------------------------------------------------------------------------------------
<!-- #include virtual="Init.asp" -->
<%

' 定义一些变量
Dim Item_name, Item_number, Payment_status, Payment_amount
Dim Txn_id, Receiver_email, Payer_email
Dim objHttp, str

'开始。IPN
' read post from PayPal system and add 'cmd'
str = Request.Form & "&cmd=_notify-validate"


' post back to PayPal system to validate
set objHttp = Server.CreateObject("Msxml2.ServerXMLHTTP")
' set objHttp = Server.CreateObject("Msxml2.ServerXMLHTTP.4.0")
' set objHttp = Server.CreateObject("Microsoft.XMLHTTP")
objHttp.open "POST", "https://www.sandbox.paypal.com/cgi-bin/webscr", false
objHttp.setRequestHeader "Content-type", "application/x-www-form-urlencoded"

objHttp.Send str


' 接受变量


invoice = Request.Form("invoice")
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")
firstName = Request.Form("cust_firstname")
lastName = Request.Form("cust_lastname")


'检查通知确认
if (objHttp.status <> 200 ) then
' HTTP的错误处理
elseif (objHttp.responseText = "VERIFIED") then

call initdb()
set rs3=server.CreateObject("adodb.recordset")
sqlx="select * from ice_dd where invoice='"&invoice&"'"'对比订单号码
rs3.open sqlx,conn,1,3
rs3("k")=1
rs3.update
rs3.close
set rs3=nothing
' 检查完成付款作用
' check that Txn_id has not been previously processed
' check that Receiver_email is your Primary PayPal email
' check that Payment_amount/Payment_currency are correct
' process payment

elseif (objHttp.responseText = "INVALID") then
' log for manual investigation
'添加代码来处理无效的情景

else
' 错误
end if

set objHttp = nothing
%>

中文地址
http://paypal.ebay.cn/integrationcenter/list_resource.html

---------------------------------------------------------------------------------------------

网站做完了 把测试帐号换成正式帐号的时候居然无法交易了

The seller accepts encrypted website payments only. You cannot pay the seller through un-encrypted buttons. Please contact your seller for more details.

卖方接受加密的网页只支付。你不能花钱请卖方通过un-encrypted按钮。请联系你的卖家为更多的细节。

郁闷一天 最后
今晚打老虎 9:56:32
你去你的帐号里 看看有没有 开通ipn这个选项
VICTOR 10:09:08
就是在我的帐号里有很多安全的设置, 原来是OFF ,我现在改成ON 就行了, 但估计涉及到一些不太安全的交易, 但起码好用了, 我再 看看其他的说明

一切正常!

到最后了 别忘记了 开通正式帐号的一些配置.. 汗~~