专业网站建设品牌,十四年专业建站经验,服务6000+客户--广州京杭网络
免费热线:400-683-0016      微信咨询  |  联系我们

国际版PayPal在线支付接口ASP版,网站付款标准版

当前位置:网站建设 > 技术支持
资料来源:网络整理       时间:2023/2/14 0:03:43       共计:3658 浏览

暂时还没测试过,需要的朋友可以先参考下。

之前做了支付宝、快钱、财富通等等接口,可能是他们的接口文档做得比较符合国人的原因吧,没费多少时间和精力就完成了接口(包括返回网站并处理订单状态、自动发货)。
这次接了PayPal国际版的在线支付接口,那个技术文档有N个,就连一个简单的返回参数都有一个2.7M的技术文档……还全是英文的……
最后把所有文档载下来,看了一遍,好多内容重复。A文档里的内容,可能在B文档里有带过,或者也有相似的说明。
遗憾的是,看了一遍,还是不知道如何下手,因为净是理论了……
经过一番奋斗,把接口做好了,呵呵。
整理整个接口制作过程及关键问题:

A、PayPal国际版与PayPal国内版
在PayPal 进军中国之前,它只有一个全世界通用的版本,可称之为国际版;但 PayPal 为了进军国内电子支付市场,推出的一个有中国特色的版本,称之为贝宝,也可称之为国内版。
国内版贝宝与国际版 PayPal 相比,主要区别如下:国内版可以绑定银行借记卡(即普通银行卡);国内版使用人民币进行交易;国内版只能在国内使用,在世界上可以使用 PayPal 国际版的另外190多个和国家,国内版贝宝均无法使用。国内版与国际版公用数据库,也就是说,如果你的 email 帐号已经申请了国内版贝宝,也就无法再用来申请国际版 PayPal 。
国际的只支付 美元 收付 ! 国内的支持 人民币 收付。

B、网站付款标准版和网站付款专业版的区别
这里是指国际版的接口。
标准版,paypal收取每笔交易的手续费,不需要交其它费用;专业版,paypal好像是要收年费(看了忘记了,因为看了太多文档……汗一个);
标准版是HTML方式的接口,使用post或get方式进行数据的交接;专业版是API的方式,更为专业、安全和强大。
一般用标准版就够了,所以客户选择了标准版。

C、概述
标准版的接口里,包括单个产品的支付、购物车支付、Email支付……
弄得很复杂的样子,其实都不去考虑。
我统一这样处理:
1、不使用paypal提供的购物车功能,客户的网站如果需要购物车,直接自己写上去。比起使用paypal的购物车,省掉许多时间和精力去看paypal接口和参数,并且购物车在自己的网站上,不用担心paypal升级或者其它什么原因导致购物车不能用。这一点也是我做网站的一个原则,能使用自己的技术解决的,全部自己解决,省掉很多后期维护的麻烦,所花的时间也不会多多少。
2、paypal接口只使用在最后购物完成时,进行支付。即,客户订购单个商品时,订购完成后,进行paypal支付;客户使用购物车进行多个商品订购,完成后,进行paypal支付。其余的情况都不用考虑。

购物及支付流程:
客户选购商品 --> 到网站虚拟收银台,此时,记录入数据库,产生订单 --> 产生paypal接口代码(此时可选择加入三个参数:支付过程回调url、支付完成回调url、支付取消回调url),提供一个支付接钮 --> 客户点击支付按钮,向paypal官方提交支付数据 --> 在支付的过程中,利用paypal的三个回调url参数,完成与网站数据的结合,可完成订单的自动发货处理。
上面说的三个url参数,url地址是我们网站某些网页的url,用于处理数据,功能根据需要自己写。
支付过程回调url:在支付的过程中,paypal会回调该url,该url将在后台处理数据,客户是看不到的。可用于订单的自动发货处理。回调流程:客户支付 --> paypal回调该url,返回一些参数 --> 我们在该url中,对paypal返回的参数进行安全认证(认证方法见paypal的接口文档),安全认证通过的时候,进行订单状态的更改,比如改为已付款,或自动发货等。
支付完成回调url:在支付完成后,paypal会返回该url,客户看得到该url及内容。可用于提示感谢客户付款、多少时间寄发商品等信息。注意:paypal返回该url时,也同样会返回一些参数,一样可以进行安全认证,看有没有谁更改了参数。安全认证通过后,一样可以进行一些你想要的操作。
支付取消回调url:用户在支付过程中,取消支付,返回该url。
由于支付完成回调url本身就可以进行安全认证,并且客户又看得到界面上的内容。所以我直接屏弃了支付过程回调url参数。
整个流程成为:
客户下单 --> paypal支付 --> 支付完成,返回支付完成回调url,安全认证通过后,进行发货及提示处理。

D、相关代码(ASP)
付款界面:
<form action="https://www.paypal.com/cgi-bin/webscr" method="post">
<input type="hidden" name="cmd" value="_xclick">
<input type="hidden" name="business" value="你收款的paypal帐号,是个邮箱">
<input type="hidden" name="item_name" value="商品名称,请使用英文">
<input type="hidden" name="item_number" value="订单号,支付完paypal会返回该订单号">
<input type="hidden" name="amount" value="价钱数值,美元为单位">
<input type="hidden" name="no_shipping" value="1">
<input type="hidden" name="no_note" value="1">
<input type="hidden" name="currency_code" value="USD">
<input type="hidden" name="cancel_return" value="http://你的域名/paypal/paycancel.asp">
<input type="hidden" name="return" value="http://你的域名/paypal/paypalreturn.asp">
<input type="image" name="submit" src="这个地址填写按钮图片,图片中可以写“paypal在线支付”之类的">
</form>
这些参数填写上去就OK了。参数看不明白,或者想看明白,请参看paypal的技术文档吧,不一一解释。
cancel_return参数是支付取消回调url,你要自己建立那个文件,提示客户未支付款项,有问题联系本站之类的……
return参数是支付完成回调url,你要建立那个文件,至于源码下面提供一个供参考。

paypalreturn.asp参考代码:
<%
dim Msg

  • str1=Trim(request.querystring("tx"))
    '这里是Paypal身份标记
    str2="&at=alyWBrgKOppwrfK8EnAzySanef5NrdsQUXdTO8W1K7hlz80vbOnsbrO5-rS"
    str = "?tx="&str1& "&cmd=_notify-synch"&str2
    paypalurl="https://www.paypal.com/cgi-bin/webscr"
    paypalurl=paypalurl&str

    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)
    If Mid(ResponseTxt,1,7) = "SUCCESS" Then
    '//item_number是订单号
    item_number = request.QueryString("item_number")
    '//viate是处理订单的函数,你可以发货及其它
    Call viate(item_number)

    Msg = "非常感谢您,您的订单已支付成功,我们会在24小时内发货!"
    Else
    Msg = "非常抱歉,在支付过程中,本站验证支付数据出错,有问题请联系本站!"
    End If

    response.Write(Msg)

    '////////////////////函数
    Function viate(item_number)

    End Function

    function urldecode(encodestr)
    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
    %>

    Paypal身份标记获取方法:
    登录paypal,右上角选择中文语言,在“我的贝宝”-->“用户信息” -->“网站付款习惯设定” --> 自动返回设置为开启,返回url设置为上面的return参数的值,付款数据传输设置为开启,其它不用改,点保存。然后你就可以看到身份标记了,很长的那段字母和数字的结合字串。

    E、调试方法
    调试是个头疼的问题,因为你可能要支付很多次才能调试成功,那将浪费你很多美元,HOHO,因为要手续费滴。。。
    paypal提供了测试接口。
    请去https://developer.paypal.com注册个会员,然后在这个会员里,可以注册买家和卖家。然后登录买家和卖家帐户(在买家卖家管理界面上,有登录按钮)。这个虚拟的买家和卖家,登录后的操作,就像操作真实的paypal帐户一样了。然后可以在买家和卖家帐号里充值,要多少充多少,点充值明细的那个过程按钮,系统自动马上帮你充值成功。你就有用不完的钱可以用来测试接口了。
    把接口及代码中所有“business”设置为你注册的虚拟卖家帐号。https://www.paypal.com/cgi-bin/webscr均换为https://www.sandbox.paypal.com/cgi-bin/webscr,就可以了。测试吧,接口可以正常使用以后,把他们再换回正式的帐号和地址就完工了。

    好了,全部整理完毕。自己去实践吧。

  • ===================================================================================================

     

    ASP做paypal支付接口详细代码和实例

    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="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.zhaoxi.net;"> 
    ’交易完后自动返回的位置 ’<input type="hidden" name="return" value=http://www.zhaoxi.net
    ’=============================================================

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

    #Asp
    版权说明:
    本网站凡注明“广州京杭 原创”的皆为本站原创文章,如需转载请注明出处!
    本网转载皆注明出处,遵循行业规范,如发现作品内容版权或其它问题的,请与我们联系处理!
    欢迎扫描右侧微信二维码与我们联系。
    ·上一条:win2008 IIS7中启用JS的gzip压缩的方法 | ·下一条:PayPal支付接口参数

    Copyright © 广州京杭网络科技有限公司 2005-2024 版权所有    粤ICP备16019765号 

    广州京杭网络科技有限公司 版权所有