kidys 发表于 2017-4-6 09:42:39

PHP payal 支付 接口 开发详解

  申请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表单时,其中的,,,,,参数设置绝对不能出错,和指定paypaly接口类型,出错,你将收不到客户的付款,与关系到订单的金额,是系统与paypal的付款通知接口url。
  当客户下单后看到上面的页面后,就可以通过设置的按钮连接到paypal.com网站,然后登录并进行付款。
  paypay将付款信息返回给系统
  
当客户付款后,paypal就会自动调用上面表单提供的,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
页: [1]
查看完整版本: PHP payal 支付 接口 开发详解