PHP payal 支付 接口 开发详解

本文介绍了PayPal支付接口的工作原理及如何配置Sandbox环境进行测试。涵盖了Instant Payment Notification (IPN) 的工作流程,以及如何生成支付按钮和验证支付状态。
部署运行你感兴趣的模型镜像

 

 

 申请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" onclick="javaScript:this.form.submit();"></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

您可能感兴趣的与本文相关的镜像

Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值