惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

A
About on SuperTechFans
Y
Y Combinator Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Microsoft Security Blog
Microsoft Security Blog
aimingoo的专栏
aimingoo的专栏
I
InfoQ
C
Check Point Blog
IT之家
IT之家
MyScale Blog
MyScale Blog
Apple Machine Learning Research
Apple Machine Learning Research
Vercel News
Vercel News
Last Week in AI
Last Week in AI
GbyAI
GbyAI
P
Proofpoint News Feed
量子位
Stack Overflow Blog
Stack Overflow Blog
Microsoft Azure Blog
Microsoft Azure Blog
月光博客
月光博客
阮一峰的网络日志
阮一峰的网络日志
人人都是产品经理
人人都是产品经理
B
Blog
T
The Blog of Author Tim Ferriss
H
Help Net Security
云风的 BLOG
云风的 BLOG

博客园 - 投石问路

asp paypal接口处理 - 投石问路 - 博客园 Asp.Net 学习资源列表 推荐几个.NET开源图表组件 机器克隆会导致DTC进程堵死 [SQLServer2005]ADO.NET2.0中的查询通知 SQL数据缓存依赖 [SqlServer | Cache | SqlCacheDependency ] -- [转] 讲解SQL 2000的Collection排序规则 (3)[转] 讲解SQL 2000的Collection排序规则 (2)[转] 讲解SQL 2000的Collection排序规则 (1)[转] IIS出现server application error,解决方案一 C#动态获取当前屏幕中光标所在位置的颜色 Excel开发(VSTO2005):简化工作表中选定区域的操作。[轉載] .NET 2.0 CER学习笔记 [转载] 格式化类型连接地址 FLV Flash video streaming with ASP.NET 2.0, IIS and HTTP handler [转载] ASP.NET 视频截图功能的C#代码[转载] NET 2.0(C#)调用ffmpeg处理视频的方法 利用Mencoder转换视频格式[转载] FLV播放器 源码二例[转载]
ASP做贝宝(paypal)支付接口(推荐)[转] - 投石问路 - 博客园
投石问路 · 2009-06-22 · via 博客园 - 投石问路

事实上,paypal可以说分两个 :

国际www.paypal.com
中国
www.paypal.com/cn

国际的这个只支付 美元 收付 ! 而中国的这个支持 人民币 收付 !

这个先清楚了 !

流程思路:

事实上贝宝帐号上直接就可以得到一个支付接口的:
如下:

<form target="paypal" action="https://www.paypal.com/cgi-bin/webscr" method="post">
<input type="image" src="
https://www.paypal.com/zh_CN/i/btn/x-click-but22.gif" border="0" name="submit" alt="贝宝— 最安全便捷的在线支付方式!">
<input type="hidden" name="add" value="1">
<input type="hidden" name="cmd" value="_cart">
<input type="hidden" name="business" value="
zwfec@163.com">
<input type="hidden" name="item_name" value="asss">
<input type="hidden" name="item_number" value="df">
<input type="hidden" name="amount" value="10.00">
<input type="hidden" name="no_shipping" value="0">
<input type="hidden" name="no_note" value="1">
<input type="hidden" name="currency_code" value="CNY">
<input type="hidden" name="weight" value="1">
<input type="hidden" name="weight_unit" value="kgs">
<input type="hidden" name="bn" value="PP-ShopCartBF">
</form>


直接使用这种代码有些不方便! 要一个个添加才可以, 不过想一想, 这段代码, 也可以动态生成的, 用php,asp都可以,只要里面授的一些值改变一下,你的商品的支付代码就可以通过读取数据库来生成了,也不用一个个来写入了!!

我是这样写的:
读取数据库:rs 这个大家应该都知道的吧

<form action="https://www.paypal.com/cgi-bin/webscr" method="post">
    <input type="hidden" name="cmd" value="_xclick">
    <input type="hidden" name="business" value="<%=rs("email")%>">      '你的paypal帐号
    <input type="hidden" name="item_name" value="<%=rs("ordernum")%>"> '你的网站上的购物车上的订单号
    <input type="hidden" name="currency_code" value="USD">              'USD 美元 ! CNY 人民币 !
    <input type="hidden" name="amount" value="<%=rs("price")%>">        '产品价格
<input type="hidden" name="return" value="
http://<%                 '这里是客户支付成功, 返回信息的地址!
theurl=LCase(Request.ServerVariables("HTTP_HOST"))&Request.ServerVariables("URL")
theurl=Left(theurl,InstrRev(theurl,"/"))
response.write theurl&"inc/paypalreturn.asp"
%>">   
<input type="submit" name="Submit3" value="Use Paypal Payment">
</form>

这个支付肯定是可以的? 至于是否支付成功, 做一个认证然后更改订单状态 !

这个认证就是在paypalreturn.asp这个页里来实现:
代码如下 :
paypalreturn.asp:

<%
mainpath="paypal.mdb"
Set conn = Server.CreateObject("ADODB.Connection")
connstr="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath(mainpath)
conn.Open connstr

Function viate(itemnumber,paymentid,payamount,payeremail)
set rs=server.CreateObject("adodb.recordset")
sql="select * from orders where ordernum='"&itemnumber&"'"   '这里是订单表 如果会员支付成功, 更改订单状态为已付款 !
rs.open sql,conn,1,3

If Not(rs.bof Or rs.eof) Then
   rs("orderline")="3"
   rs("paymentid")=paymentid
   rs("payamount")=payamount
   rs("payeremail")=payeremail
   rs("paydate")=Now()
   rs.update

Else
   response.write "<script>alert('NO this order number ! Please contact website administrator !!');</script>"
End If
rs.close
Set rs=Nothing
End Function

function urldecode(encodestr)   '这个函数是对paypal返回值的urldecode解码的
newstr=""
havechar=false
lastchar=""
for i=1 to len(encodestr)
char_c=mid(encodestr,i,1)
if char_c="+" then
newstr=newstr & " "
elseif char_c="%" then
next_1_c=mid(encodestr,i+1,2)
next_1_num=cint("&H" & next_1_c)
if havechar then
havechar=false
newstr=newstr & chr(cint("&H" & lastchar & next_1_c))
else
if abs(next_1_num)<=127 then
newstr=newstr & chr(next_1_num)
else
havechar=true
lastchar=next_1_c
end if
end if
i=i+2
else
newstr=newstr & char_c
end if
next
urldecode=newstr
end Function

str1=Trim(request.querystring("tx"))
str2="&at=RDqubRmDD5AWgXJh5q2HMHKmcetP4Q8Ulj9AaPIx0B1l3f9aQiv9EPN1084"                             '这里是Paypal身份标记    获取方法

str = "?tx="&str1& "&cmd=_notify-synch"&str2
'https://www.sandbox.paypal.com/cgi-bin/webscr
paypalurl="
https://www.paypal.com/cgi-bin/webscr"
paypalurl=paypalurl&str
'response.write "<br>"&paypalurl&"<br>"&"<br>"&"<br>"

Set objHttp=Server.CreateObject("Msxml2.ServerXMLHTTP.3.0")
objHttp.setOption 2, 13056
objHttp.open "POST",paypalurl,False,"",""
objHttp.send()

ResponseTxt = objHttp.ResponseText           '示例下面有写
Set objHttp=Nothing
'-------------------------------------------------核对取得值
ResponseTxt=UrlDecode(ResponseTxt)                '将返回值解码并赋给 responsetxt
If Mid(ResponseTxt,1,7) = "SUCCESS" Then          '取得返回值的状态, sucess表示支付成功 ! Fail 表示支付失败 ! 返回值只有这两种情况 !
ResponseTxt = Mid(ResponseTxt,9)                  '取得除了前9个字符的返回值,并返回给responsetxt
sParts = Split(ResponseTxt, vbLf)                 '将返回值以vbLf(在vb里面这是回车<换行>的意思)分开,并赋给一个数组sParts
iParts = UBound(sParts) - 1                      '对这个数组分离取值, 后面的应该都可以看得懂的吧!
ReDim sResults(iParts, 1)
For i = 0 To iParts
aParts = Split(sParts(i), "=")
sKey = aParts(0)
sValue = aParts(1)
sResults(i, 0) = sKey
sResults(i, 1) = sValue

Select Case sKey
Case "first_name"
firstName = sValue
Case "last_name"
lastName = sValue
Case "item_name"
itemName = sValue
Case "mc_gross"
mcGross = sValue
Case "mc_currency"
mcCurrency = sValue
Case "txn_id"
liushuihao = Trim(sValue)
Case "payer_email"
payeremail=Trim(sValue)
End Select
Next
Call viate(itemName,liushuihao,mcGross,payeremail)        '这里调用viate()这个function 进行认证, 并对这个订单状态进行更新 !
Msg="Pay for success! Please wait for delivery! "&"\n \n Your Order Number: "&itemName&" !"
Else
Msg="Sorry ! Your operating error! Please contact website administrator !!"
End If
response.write "<script>alert('"&msg&"');location.href='user.asp'</script>" '支付完毕返回 用户信息页 !
%>

ResponseTxt 示例:

SUCCESS mc_gross=44.00 protection_eligibility=Eligible address_status=confirmed payer_id=TMTNG8HATR5Y6 tax=0.00 address_street=1+Main+St payment_date=07%3A32%3A55+Dec+22%2C+2008+PST payment_status=Completed charset=windows-1252 address_zip=95131 first_name=Test mc_fee=1.58 address_country_code=US address_name=Test+User custom= payer_status=verified business=q2_1227410340_biz%40163.com address_country=United+States address_city=San+Jose quantity=1 payer_email=q1_1227410229_per%40163.com contact_phone= txn_id=7U833557W75672524 payment_type=instant last_name=User address_state=CA receiver_email=q2_1227410340_biz%40163.com payment_fee=1.58 receiver_id=5Q2AS9DBJGWLC txn_type=web_accept item_name=20081222225300 mc_currency=USD item_number= residence_country=US handling_amount=0.00 transaction_subject=20081222225300 payment_gross=44.00 shipping=0.00


说明一下: 可能你的paypal帐号也没钱来做测试,所在paypal想的还是很周到的, 做一个与paypal一样功能的二级域名的网站:

https://developer.paypal.com/

接口:https://www.sandbox.paypal.com/cgi-bin/webscr

在这里注册一个帐号后, 在里面可以设置两个测试帐号, 这两个测试帐号里的钱是用不完的, 你可以拿来做测试 ! 相关资料:   查看


注:

Paypal的提交时的字段与返回的字段含义

’========================================================
’mc_gross 交易收入  
’address_status 地址信息状态  
’paypal_address_id Paypal地址信息ID  
’payer_id 付款人的Paypal ID  
’tax 税收  
’address_street 通信地址  
’payment_date 交易时间  
’payment_status 交易状态  
’charset 语言编码  
’address_zip 邮编  
’first_name 付款人姓氏  
’address_country_code 国别  
’address_name 收件人姓名  
’custom 自定义值  
’payer_status 付款人账户状态  
’business 收款人Paypal账户  
’address_country 通信地址国家  
’address_city 通信地址城市  
’quantity 货物数量  
’payer_email 付款人email  
’txn_id 交易ID  
’payment_type 交易类型  
’last_name 付款人名  
’address_state 通信地址省份  
’receiver_email 收款人email  
’address_owner 尚未公布/正式启用  
’receiver_id 收款人ID  
’ebay_address_id 易趣用户地址ID  
’txn_type 交易通告方式  
’item_name 货品名称  
’mc_currency 货币种类  
’item_number 货品编号  
’payment_gross 交易总额[只适用于美元情况]  
’shipping 运送费

’========================================================
’主要参数:
’add:一次只能购买单种商品
’upload:可以购买多种商品
’购物车
’<input type="hidden" name="cmd" value="_cart">
’卖家的帐户
’<input type="hidden" name="business"
value=ziyunyang1981@sina.com>
’商品名
’<input type="hidden" name="item_name" value="Java">
’商品编号
’<input type="hidden" name="item_number" value="1001">
’商品价格
’<input type="hidden" name="amount" value="1.00">
’商品数量-针对每一种商品
’<input type="hidden" name="quantity" value="2">
’货币类型 CNY:人民币,USD:美元
’<input type="hidden" name="currency_code" value="CNY">
’取消交易并要返回的位置
’<input type="hidden" name="cancel_return" value="
http://www.updateweb.cn ;">
’交易完后自动返回的位置
’<input type="hidden" name="return" value="
http://www.updateweb.cn ">
’=============================================================

原文出处:http://hi.baidu.com/zwfec/blog/item/6e2288269a3960108b82a13c.html