思想决定人生,态度改变一切

成功者找方法,失败者找借口! 做事先做人;安分做人,本分做事!

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

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

 

posted on 2009-06-22 22:52  投石问路  阅读(2070)  评论(0编辑  收藏  举报