语言吧技术网欢迎您投稿,程序员的世界我懂你!=====>点此登录投搞
当前位置: 首页 >>ASP.NET >>ASP技巧 >>用纯ASP对接paypal支付接口的实例代码

用纯ASP对接paypal支付接口的实例代码

2019/7/30 11:17:31 0人评论 442次 作者: weixin_33910434

ASP做贝宝(paypal)支付接口 !!


今天网速很慢,想想整理一下前些天做的接口吧! 整理 ! 整理一下 !


事实上,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") s

ql="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 "> 

’=============================================================

----------完毕, 写了那么多天的程序,查找了那么多相关资料, 就是这么点儿总结了, 和大家分享 !-----------


CopyRight:2007-2018 语言吧 备案ICP:湘ICP备09009000号-15 http://www.yuyanba.com
欢迎【广东省 广州市】的朋友
内容与素材部分来源于网络,如有侵权请告知删除
分享按钮