解析PayPal支付接口的PHP开发方式

申请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将向位于指定 URL (type=”hidden” name=”notify_url” value=” “)的服务器发送一个通知。此通知中将包括您的客户的所有付款信息(例如,客户名称、金额),以及一段加密代码。当服务器收到通知时,它随后会将该信息 (包括加密代码)发送回安全的PayPal URL。PayPal将通过检查加密字符串对交易进行身份验证。这种将 IPN 数据传回PayPal的操作防止了“欺骗”,因此您可以确保 IPN 来自PayPal。在进行验证时,PayPal会将其合法性的确认信息发送回您的服务器。

提示:要启用即时付款通知,您将需要输入一个 URL,通过它您可以接收到来自您的用户信息的通知。

启用了即时付款通知后,每次当您接收付款时您的服务器都会收到一个通知,此通知将以隐藏的“FORM POST”的方式发送到指定的 URL,并将包括所有付款信息。此页面的底部列出了通知的 FORM 变量。

每次收到来自PayPal的 IPN 时,您必须在实施订单之前完成如下所述的通知确认过程。确认列出的信息将可确保交易合法。

通知确认IPN

为了确保付款已进入您的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 数据更新您的数据库,并处理购物。

如果收到“无效”通知,则应将其视为可疑通知,并应对其进行调查。

主要参数:

向PayPal提交粘贴代码时,应包括以下 4 个隐藏变量及一张图片,这就是说,您粘贴到PayPal的最短必需代码应如下:

<form action="https://www.paypal.com/row/cgi-bin/webscr" method="post">

<input type="hidden" name="cmd" value="_xclick">  // "_xclick" 立即购买

<input type="hidden" name="business" value="you@youremail.com">  
//PayPal账户上的电子邮件地址

<input type="hidden" name="item_name" value="Item Name">
//物品名称(或购物车名称)

<input type="hidden" name="currency_code" value="USD">
//定义币种以标示货币变量 值可以为 "USD"、"EUR"、"GBP"、"CAD"、"JPY"。

<input type="hidden" name="amount" value="0.00">
//物品的价格(购物车中所有物品的总价格,因为是_Xclick模式)
<input type="image" src="http://www.paypal.com/zh_XC/i/btn/x-click-but01.
gif" name="submit" alt="请使用PayPal付款!">

</form>

可用变量

business 您的PayPal账户上的电子邮件地址

quantity 物品数量。大于 1 时,会与金额相乘

item_name 物品名称(或购物车名称)。必须是字母数字字符,最多为 127 个字符

item_number 用于跟踪付款的可选传递变量。必须是字母数字字符,最多为 127 个字符

amount 物品的价格(购物车中所有物品的总价格)

shipping 该物品的运送成本

shipping2 每增加一件物品所需的运送成本

handling 手续费

tax 基于交易的税额。如果使用该变量,传递值将覆盖所有用户信息税收设置(不管买家所在位置)。

no_shipping 送货地址。如果设为 "1",则不会要求您的客户提供送货地址。该变量为可选项;如果省略或设为 "0",将提示您的客户输入送货地址

cn 可选标签,会在提示栏上显示(最多 40 个字符)

no_note 为付款加入提示。如果设为 "1",则不会提示您的客户输入提示。该变量为可选项;如果省略或设为 "0",将提示您的客户输入提示。

on0 第一选项栏名称。最多 64 个字符

os0 第一组选项值。最多 200 个字符。"on0" 必须定义,以便识别 "os0"。

on1 第二选项栏名称。最多 64 个字符

os1 第二组选项值。最多 200 个字符。"on1" 必须定义,以便识别 "os1"。

custom 决不会向您的客户显示的可选转递变量。可用于跟踪存货

invoice 决不会向您的客户显示的可选转递变量。可用于跟踪账单号

notify_url 仅与 IPN 一起使用。发送 IPN Form Post 的互联网 URL

return 您的客户完成付款后将返回的互联网 URL

cancel_return 您的客户取消付款后将返回的互联网 URL

image_url 您要用作图标的图片的互联网 URL,图片大小为 150 X 50 像素

cs 设置您的付款页面的背景色。如果设为 "1",背景色将为黑色。该变量为可选项;如果省略或设为 "0",背景色将为白色

扩展变量

PayPal 允许您粘贴扩展变量,条件是将改变以下 "cmd" 值:

到:

通过上述 “cmd” 值修改,您还可使用以下变量:

扩展变量

email 客户的电子邮件地址

first_name 客户的名。必须是字母数字字符,最多为 32 个字符

last_name 客户的姓。必须是字母数字字符,最多为 64 个字符

address1 客户地址所在国家或地区。必须是字母数字字符,最多为 100 个字符

address2 客户地址第二行。必须是字母数字字符,最多为 100 个字符

city 客户地址所在城市。必须是字母数字字符,最多为 100 个字符

state 客户地址所在州。必须是正式的 2 个字母缩写

zip 客户地址的邮政编码

night_phone_a 客户夜间联系电话号码的区号

night_phone_b 客户夜间联系电话号码前三位

day_phone_a 客户白天联系电话号码的区号

day_phone_b 客户白天联系电话号码前三位

提示:若要更改”用户信息”中的默认运费和手续费设置,请转至您的用户信息,编辑您的运费计算,然后点击”允许采用基于交易的运费”复选框。

将单个物品传递给PayPal

如果您的第三方购物车可设置成向PayPal传递单个物品,有关物品的信息将加入买家和卖家的记录日志和系统通知中。要加入该物品的信息,您需要将 HTML 格式元素粘贴至PayPal购物车流程的新版本。该过程与 #1 节"将总购物车数量传递给PayPal"描述的非常相似,不同之处在于:

将 "cmd" 变量设置到 "_cart"

更换必要的 HTML 行

添加称为 “upload” 的新变量

在 <表格> 和 标签之间新增以下行:

定义物品明细

对于以下各特定物品参数,定义与通过您的合作商购物车购买的各物品对应的一组新值。将 “_x” 附加到变量名称,其中 x 是物品号码,从 1 开始,每加入一物品增加一。

item_name_x (物品 #x 需要)购物车中物品 #x 的名称。必须是字母数字字符,最多为 127 个字符

item_number_x 与购物车中物品 #x 关联的可选传递变量。必须是字母数字字符,最多为 127 个字符

amount_x (物品 #x 需要)物品 #x 的价格

shipping_x 运送物品 #x 的第一件(数量 1)的成本

shipping2_x 每增加一件运送物品 #x(数量 2 或更多)所需的运送成本

handling_x 物品 #x 的处理成本

on0_x 物品 #x 的第一选项栏名称。最多 64 个字符

os0_x 物品 #x 的第一组选项值。最多 200 个字符。”on0_x” 必须定义,以便识别 “os0_x”。

on1_x 物品 #x 的第二选项栏名称。最多 64 个字符

os1_x 物品 #x 的第二组选项值。最多 200 个字符。”on1_x” 必须定义,以便识别 “os1_x”。

为购物车中每件物品重复此设定

为您的买家购物车中的各物品加入以上表格中的一组必需的变量和任何选项变量。购物车中的第一物品必须用以 “_1″ 结束的参数定义,如 “item_name_1″、”amount_1″ 等。同样,第二物品应用变量 “item_name_2″、”amount_2″ 等命名。提示:”_x” 值必须以一为单位按序递增,以便识别。如果从 item #1 跳到 item #3 而不定义 item #2,则第三个物品会被忽略。

要指定币种:所有货币变量(金额、运费、运费 2、手续费、税款)将以粘贴在付款上的 “currency_code” 变量指定的币种显示。因为其不是随物品不同的,无需向变量名称附加 “_x”。如果没有粘贴 “currency_code” 变量,我们将假定所有货币变量值为美元。

以上就是本文所介绍的运用PHP开发PayPal支付接口的主要操作步骤。

(0)

相关推荐

  • php实现paypal 授权登录

    php实现paypal 授权登录 <?php /** * @project paypal login * @author jiangjianhe * @date 2015-04-03 */ class paypallogin { //沙箱token链接 private $_sanbox_oauth2_auth_uri = 'https://www.sandbox.paypal.com/webapps/auth/protocol/openidconnect/v1/authorize'; priva

  • 网站用php实现paypal整合方法

    所以今天我就来讲讲如何将你的网站和paypal进行整合. 首先,去paypal申请一个号吧,资料都补充完整之后,我们就可以开始行动乐,对了,申请paypal时,要申请那种可以接受别人付款的帐号. 接下来,我们就真正开始paypal与网站的整合了. 其实,paypal有提供傻瓜式的付款按钮创建方式,但一般情况下我们不用,因为我们要根据自己网站的实际情况来写customized的付款按钮.先来一段代码: 复制代码 代码如下: <form action="https://www.sandbox.

  • Paypal实现循环扣款(订阅)功能

    起因 业务需求要集成Paypal,实现循环扣款功能,然而百度和GOOGLE了一圈,除官网外,没找到相关开发教程,只好在Paypal上看,花了两天后集成成功,这里对如何使用Paypal的支付接口做下总结. Paypal现在有多套接口: 通过Braintree(后面会谈Braintree)实现Express Checkout; 创建App,通过REST Api的接口方式(现在的主流接口方式); NVP/SOAP API apps的接口(旧接口); Braintree的接口 Braintree是Pay

  • php与paypal整合方法

    我晕,最近这个用paypal付款的功能搞了我2天,还没搞完.郁闷死了. 先做个笔记,把已经搞定的部分写下来,省的以后忘了. 1 注册SandBox账号,并且建立两个虚拟账号,可以选择自动建立的那一项.一个buyer,一个seller.以供 开发的时候测试使用. 2 实现快速购买的代码.链接暂时指向SandBox便于开发时的测试.以后再改成正式的. 复制代码 代码如下: if(!defined("_f_afficherButtonPayPal")) { define("_f_a

  • zen cart实现订单中增加paypal中预留电话的方法

    本文实例讲述了zen cart实现订单中增加paypal中预留电话的方法.分享给大家供大家参考,具体如下: 在PayPal的IPN返回值中联系电话是 contact_phone, 前提是你帐户设定了买家在付款时预留电话,如果没有要求的话,该值默认是不会返回的. 但在zen cart的PAYPAL的支付插件里是不获取这个信息的,需要手动修改PAYPAL的程序.下面我们就修改: 一.在 paypal 表中增加 contact_phone 字段 ALTER TABLE `paypal` ADD `co

  • PHP中集成PayPal标准支付的实现方法分享

    PayPal支付功能其实一直在更新文档和接口,这里说的是一个简单的支付功能大概流程如下 1,在网站的结账页面,设置一个提交到PayPal网站的form,里面有一些金额,商品名称,商家收款账号.结账成功后返回URL等内容, 2,用户结账时,通过点击'使用PayPal结账'的按钮到达PayPal的结账页面,输入自己的PayPal用户名和密码并确认支付 3,PayPal会根据是否支付成功来决定返回网站的哪个页面,并在后台对网站的某个页面发起post请求,这个动作称作IPN,告诉网站这笔付款的到账情况,

  • PHP整合PayPal支付

    简单整理一下PHP项目整合PayPal支付功能. 一.表单的构建: <form method="post" name="form" action="https://www.paypal.com/cgi-bin/webscr"> <input type="hidden" name="rm" value="2"/> <input type="hidde

  • php购物网站支付paypal使用方法

    详细参考: https://cms.paypal.com/us/cgi-bin/?cmd=_render-content&content_ID=developer/e_howto_html_Appx_websitestandard_htmlvariables 定义常量paypalurl const PAYPAL_URL = 'https://www.sandbox.paypal.com/'; 将要传送的数据记录为一个数组 $paypalData = array(                 

  • paypal即时到账php实现代码

    http://paypal.ebay.cn/integrationcenter/list__resource_2.html 中文php开发简介:http://www.paypal-china.org/wangzhai/197.html 以下是ecshop中paypal的支付代码 这段代码是向paypal支付接口提交的 {{{ <form target="_blank" method="post" action="https://www.paypal.

  • 解析PayPal支付接口的PHP开发方式

    申请PayPal注册网址:https://www.paypal.com/ paypal接口与其它接口有些不同,稍微复杂一点. 其实银行接口也算是一个站点的插件. 所谓paypal ipn(Instant Payment Notification),就是Paypal开发的一种能主动通知第三方卖家系统交易状态的一种机制.IPN的原理很简单,就是当产生了一个交易之后, 交易状态发生变化时,如用户已经付款.或者退款.撤销时,Paypal利用常用的HTTP POST方式,将交易的一些变量提交给网站的某个页

  • 快速对接payjq的个人微信支付接口过程解析

    近期在了解个人支付接口,希望能解决我在微信上支付的问题.找了很多平台对比再三,感觉 payjq 比较专业.同时支持支付宝和微信,由于本人支付宝还没开通(需要有一定流量才给开通),本文重点讲一下微信收银台模式的对接.记录一下. 收银台模式对接其实非常简单,官方有开发包可以直接使用,或者自己开发也比较简单. 一.个人通过代码实现的办法 配置商户号和通信密钥 $mchid = '**************'; // PAYJQ 商户号 $key = '**************'; // 通信密钥

  • 代理商能不能用自己的支付接口?能不能送自己的二级域名?

    1.代理商不能使用自己的网上支付接口.目前的财务结构是每一笔款项都是真实的金额,就是说,代理商帐上的钱,在管理员那儿都应该有汇入的银行记录.如果代理商能用自己的接口,就会造成钱汇入代理商那儿,如果允许这样做,就会造成存在"虚钱",例如代理商给名下用户入款1万元,如果代理商不做代理了,这笔钱最终用户只能找管理员处理,但管理员是无法处理的,因为汇入了代理的帐号. 2.只有独立模式的代理商,代理名下的用户,才能在开主机送二级域名时使用自己的二级域名.原因如下:主站通常不只是一台服务器,可能有

  • php版交通银行网银支付接口开发入门教程

    本文实例讲述了php版交通银行网银支付接口实现方法.分享给大家供大家参考,具体如下: 概述:网银支付接口 和支付宝接口大体上差不多,主要的区别是 交通银行提供的 接口核心的比如,加密等是通过java实现的,所以,要想办法使php和java能正常的通信,为此,官方也提供了两套实现方法,一个是通过 socket 进行通信,另一个方法是通过 java 桥接,下面演示的是 socket方法. 1. 配置运行环境 1.1  安装java,自行到oracle官网下载 java,然后安装,并配置正确的 环境变

  • 微信小程序调用微信支付接口的实现方法

    前言:应项目要求,需要使用微信小程序做支付,写完后告知手续费太高方案不予通过(宝宝心里苦,但宝宝不说).此次开发在因站在巨人的肩膀上顺利完成. 微信支付文档传送门:https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=7_3 1.开发工具: Eclipse+Tomcat+微信web开发工具 2.开发环境: java+maven 3.开发前准备: 3.1 所需材料 小程序的appid,APPsecret,支付商户号(mch_i

  • java后端PayPal支付实现教程

    首先引入 PayPal的sdk 这里我引入的是1.0.4版本的 <!-- 贝宝支付 SDK --> <dependency> <groupId>com.paypal.sdk</groupId> <artifactId>checkout-sdk</artifactId> <paypal-sdk.version>1.0.4</paypal-sdk.version> </dependency> yml文件

  • Thinkphp微信公众号支付接口

    本文实例为大家分享了Thinkphp微信公众号支付接口,供大家参考,具体内容如下 第一步  先把文件夹的那两个图片 配置成一样的路径 除了域名要改 其他保持一致. 第二步  把 Weixinpay 这个文件夹放在 \ThinkPHP\Library\Vendor  将Weixinpay文件夹放置到这个Vendor文件夹中 第三步  把  WxJsAPIController.class.php 这个php文件  \Home\Controller  这里面 第四步  把 WxJsAPI这个文件夹 

  • 解析微信支付的实现方法(.NET版)

    前段时间做了网页版微信支付,遇到很多问题,不过最终还是解决了,现在在这里记录下开发流程以及说明,给其他人一些参考. 一.准备工作 首先肯定得先要开通微信支付功能,之前开通微信支付需要三万的押金的,现在不需要了,所以就做了这个功能. 要进行微信支付开发,需要在公众号后台和微信商户后台进行相关的设置. 1.开发目录配置 微信支付需要在公众号后台(微信支付=>开发配置)进行配置支付授权目录.这里授权目录需要是线上地址,也就是可以通过互联网访问到的地址,微信支付系统需要能够通过互联网访问到你的地址. 微

  • php支付宝在线支付接口开发教程

    1.什么是第三方支付 所谓第三方支付,就是一些和各大银行签约.并具备一定实力和信誉保障的第三方独立机构提供的交易支持平台.在通过第三方支付平台的交易中,买方选购商品后,使用第三方平台提供的账户进行货款支付,由第三方通知卖家货款到达. 目前提供第三方支付的机构很多,常见的有支付宝.财付通.快钱.网银在线.易宝支付.云网等各大支付平台.网站如果需要实现第三方支付首先应该向第三方支付平台申请一个账号并签署协议,协议生效后第三方支付平台将为其开通在线支付功能,通过程序将接口集成到网站中. 为什么要使用第

随机推荐