网上说的那些都是对的,就是没有说在sandbox中Paypal身份标记怎么得到,按网上说的,在sandbox中根本打不开,最后找了几天才找到,要把人找死。按下面的步骤来找吧。
按上图点sandbox site登录进入商家账户中心
点右边的红色圈住的管理用户
再点 【返回至“我的用户信息”】
再点【网站付款习惯设定】
进去设定好后,再返回就可以得到Paypal身份标记了!
藏得真深啊!其它的按下面的去做
-----------------------------------------------------------------------------------------------------------------------------------------------
ASP做贝宝(paypal)支付接口 !!
今天网速很慢,想想整理一下前些天做的接口吧! 整理 ! 整理一下 !
事实上,paypal可以说分两个 :
国际www.paypal.com
中国www.paypal.com/cn
国际的这个只支付 美元 收付 ! 而中国的这个支持 人民币 收付 !
这个先清楚了 !
流程思路:
事实上贝宝帐号上直接就可以得到一个支付接口的: 如下:
<form target='paypal' action='upload/2015/3/201503271436108484.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身份标记 就是这里整够了,几天才找出来,如果是在测试环境 https://www.sandbox.paypal.com/应该登录的sandbox的用户中心去找到设置的地方,我找了3天,终于在一个脚落找到了,害人啊
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://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 '>
’=============================================================
----------完毕, 写了那么多天的程序,查找了那么多相关资料, 就是这么点儿总结了, 和大家分享 !-----------
最新评论