|
申请PayPal注册网址:https://www.paypal.com/
paypal接口与其它接口有些不同,稍微复杂一点。
在这里提一下,所谓paypal ipn(Instant Payment Notification),就是Paypal开发的一种能主动通知第三方卖家系统交易状态的一种机制。IPN的原理很简单,就是当产生了一个交易之后, 交易状态发生变化时,如用户已经付款、或者退款、撤销时,Paypal利用常用的HTTP POST方式,将交易的一些变量提交给网站的某个页面(称之为IPN Handler),当这个页面接受到请求时候,将这些数据原封不动加上一个指示验证的cmd=_notify-validate,POST回Paypal 的接口地址,如果数据正确,那么Paypal返回字符串VERIFIED,否则为INVALID,如果结果为VERIFIED,那么你的程序就可以使用这 些数据进行操作。
开设Sandbox帐号
但代码的调试是一件很痛苦的事情,因为作为第三方开发人员,不可能开两个帐号,每次测试还要之间交易一些钱,所以Paypal专门开发了Sandbox给 开发人员进行开发,首先到https://developer.paypal.com/注册一个开发帐号,好了之后再进入Sandbox建立测试用的Paypal虚拟帐号(至少应该建立一个Business的和一个Personal的),这 种账号注册方法和Paypal的流程一样,信息可以是假的,包括银行帐号、信用卡(其实Paypal Sandbox会自动生成一些随机的号码)。接下来需要激活Paypal Sandbox的虚拟帐号,注意,这里不管你在Paypal Sanbox注册时填什么邮件地址,有任何发送到虚拟帐号所填邮箱的邮件都存会在开发帐号的管理界面中的Email页(导航栏上有)中。登录 Sandbox的虚拟Paypal环境,还需要验证虚拟帐号的银行,这里可以随便填,然后通过Add Funds来给账户充值(想填多少填多少 920-203 920-533 )。然后,还需要激活IPN的选项,在Business的那个账户的Profile设置页面中,点击,然后点击Edit按钮,打开IPN,这里如果你使用 的是固定的IPN Handle,可以直接将地址填入。
接下来,我们测试的时候,应该将Paypal接口的地址设置为https://www.sandbox.paypal.com/cgi-bin/webscr
用以下代码可以生成一个paypal付款按钮,其中相关数据需要确认核实。
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>goto paypal</title>
</head>
<body bgcolor="#000000" leftmargin="0" topmargin="0" marginwidth="0" marginheight="0">
<form name="paypal" action="https://www.paypal.com/cgi-bin/webscr" method="post">
<input type="hidden" name="cmd" value="_xclick">
<input type="hidden" name="business" value="paypal@xxx.com"><!--这里填写你的paypal账户email-->
<input type="hidden" name="item_name" value="order information"><!--这里填写客户订单的一些相关信息,当客户连到paypal网站付款的时候将看到这些信息-->
<input type="hidden" name="amount" value="220.00"><!--订单的总金额信息-->
<input type="hidden" name="currency_code" value="USD"><!--订单总金额对应的货币类型 ,客户可以用其他币种来付款,比如这里订单币种是美元USD,客户可以用欧元EUR来付款,由paypal根据当前汇率自动实现币种之间的换算-->
<input type="hidden" name="on0" value="customerId"><!-- 自定义的参数1 -->
<input type="hidden" name="os0" value="stephen"><!-- 对应上面自定义参数1对应的值 -->
<input type="hidden" name="on1" value="address"><!-- 自定义的参数2 -->
<input type="hidden" name="os1" value="shanghai china"><!-- 对应上面自定义参数2对应的值 -->
<input type="hidden" name="notify_url" value="http://www.xxx.com/notifyurl.jsp?order_id=23876412"><!--这里告诉paypal付款的通信url,即当客户付款后调用这个url通知系统-->
<input name="Paypal" type="button" value="Go to Paypal" ></td>
</form>
</body>
</html>
这是paypal 官方给出的,表单详细参数,不过全英文: https://cms.paypal.com/us/cgi-bin/?cmd=_render-content&content_ID=developer/e_howto_html_Appx_websitestandard_htmlvariables
在生成上面的paypal表单时,其中的[cmd],[action],[business],[amount],[currency_code],[notify_url]参数设置绝对不能出错,[cmd]和[action]指定paypaly接口类型,[business]出错,你将收不到客户的付款,[amount]与[currency_code]关系到订单的金额,[notify_url]是系统与paypal的付款通知接口url。
当客户下单后看到上面的页面后,就可以通过设置的按钮[Go to Paypal]连接到paypal.com网站,然后登录并进行付款。
paypay将付款信息返回给系统
当客户付款后,paypal就会自动调用上面表单提供的[notify_url],post一堆数据给这个页面,用户就可以在这个页面中队付款状态进行一系列的,验证,操作等
为了确保付款已进入您的PayPal账户,您必须验证用作“receiver_email”的电子邮件地址是否已在您的PayPal账户中注册并得到确认。
服务器收到即时付款通知后,您将需要通过构建一个发送到PayPal的 HTTP POST 对其进行确认。您的 POST 应发送到https://www.paypal.com/cgi-bin/webscr
您必须完全按照收到表单变量时的原样发送所有收到的表单变量。您还需要将一个值为“_notify-validate”的名为“cmd”变量(例如,cmd=_notify-validate)附加到 POST 字符串。
PayPal将回复该 POST,并在回复的正文中包含一个单词“VERIFIED”或“INVALID”。当您收到 VERIFIED 回复时,您需要在实施订单之前执行若干检查:
确认“payment_status”为“Completed”,因为系统也会为其他结果(如“Pending”或“Failed”)发送 IPN。
检查“txn_id”是否未重复,以防止欺诈者重复使用旧的已完成的交易。
验证“receiver_email”是已在您的PayPal账户中注册的电子邮件地址,以防止将付款发送到欺诈者的账户 。
检查其他交易详情(如物品号和价格),以确认价格未改变完成了以上检查后,您可以使用 IPN 数据更新您的数据库,并处理购物。
如果收到“无效”通知,则应将其视为可疑通知,并应对其进行调查。
一下为普通返回post返回变量详细解释
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 | 运送费 | 这是paypal官方给出的,返回值详细列表,https://cms.paypal.com/us/cgi-bin/?cmd=_render-content&content_ID=developer/e_howto_html_IPNandPDTVariables |
|
|