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


Posted in PHP onFebruary 06, 2012

PayPal支付功能其实一直在更新文档和接口,这里说的是一个简单的支付功能大概流程如下

1,在网站的结账页面,设置一个提交到PayPal网站的form,里面有一些金额,商品名称,商家收款账号、结账成功后返回URL等内容,

2,用户结账时,通过点击‘使用PayPal结账'的按钮到达PayPal的结账页面,输入自己的PayPal用户名和密码并确认支付

3,PayPal会根据是否支付成功来决定返回网站的哪个页面,并在后台对网站的某个页面发起post请求,这个动作称作IPN,告诉网站这笔付款的到账情况,比如completed即为完成付款

4,网站收到PayPal的notify通知后,即可给用户发货或者其他的处理逻辑

这里有一张图来解释

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

更为简单的流程图

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

我们要完成整个流程,其实只需要两个页面来处理
  1. checkout.php 这个页面用来显示购物车信息,并让用户点击按钮导航到PayPal进行支付
  2. notify.php 这个页面是用来接收PayPal的IPN信息的,判断用户的付款是否到账等状态,并处理网站收款之后的业务逻辑

记录一下代码:
checkout.php 这个页面其实可以是HTML

<form action="https://www.paypal.com/cgi-bin/webscr" method="post"><input type="hidden" name="ev_csrf" value="9878824eb2cf4f1075dfa43c216d7cec"> <input type="hidden" name="cmd" value="_cart"> <input type="hidden" name="upload" value="1"> <input type="hidden" name="charset" value="utf-8"> <input type="hidden" name="currency_code" value="USD"> <input type="hidden" name="business" value=sales@test.com> <input type="hidden" name="cancel_return" value=”http://www.test.com/checkout.html”> <input type="hidden" name="return" value=”http://www.test.com/thanks.html”> <input type="hidden" name="notify_url" value="http://www.test.com/notify.php"> <input type="hidden" name="custom" value="userid:31;ip:182.114.240.221"> <input type="hidden" name="item_number" value="ARO0101"> <input type="hidden" name="item_name" value="AD182m"> <input type="hidden" name="quantity" value="1"> <input type="hidden" name="amount" value="70"> <input type="submit" value="Checkout with PayPal"> </form>

这个form中包含了一些PayPal支付必须要加的项,需要注意的是notify.php是PayPal会在后台进行调用的notify.php这个页面有两个功能,一个是接收PayPal的post内容并加上标签返回,一个是接收到PayPal的认证信息之后进行网站内部的逻辑处理
$req = 'cmd=_notify-validate'; 
foreach ($_POST as $key => $value) { 
$value = urlencode(stripslashes($value)); 
$req .= "&$key=$value"; 
} 
// post back to PayPal system to validate 
$header .= "POST /cgi-bin/webscr HTTP/1.0\r\n"; 
$header .= "Content-Type: application/x-www-form-urlencoded\r\n"; 
$header .= "Content-Length: " . strlen($req) . "\r\n\r\n"; 
$fp = fsockopen ('ssl://www.paypal.com', 443, $errno, $errstr, 30); 
if (!$fp) { 
// HTTP ERROR 
} else {//HTTP OK 
fputs ($fp, $header . $req); 
while (!feof($fp)) { 
$res = fgets ($fp, 1024); 
if (strcmp ($res, "VERIFIED") == 0) { 
//process business of website 
} 
else if (strcmp ($res, "INVALID") == 0) { 
// log for manual investigation 
} 
} 
fclose ($fp); 
}
PHP 相关文章推荐
PHP 抓取新浪读书频道的小说并生成txt电子书的代码
Dec 18 PHP
PHP生成等比缩略图类和自定义函数分享
Jun 25 PHP
Linux下PHP安装mcrypt扩展模块笔记
Sep 10 PHP
apache中为php 设置虚拟目录
Dec 17 PHP
浅析php设计模式之数据对象映射模式
Mar 03 PHP
php中array_column函数简单实现方法
Jul 11 PHP
php微信公众平台配置接口开发程序
Sep 22 PHP
解决Yii2邮件发送结果返回成功,但接收不到邮件的问题
May 23 PHP
PHP使用new StdClass()创建空对象的方法分析
Jun 06 PHP
利用PHP判断是否是连乘数字串的方法示例
Jul 03 PHP
PHP使用Redis长连接的方法详解
Feb 12 PHP
PHP registerXPathNamespace()函数讲解
Feb 03 PHP
PHP中call_user_func_array()函数的用法演示
Feb 05 #PHP
PHP高级对象构建 多个构造函数的使用
Feb 05 #PHP
PHP高级对象构建 工厂模式的使用
Feb 05 #PHP
PHP备份数据库生成SQL文件并下载的函数代码
Feb 05 #PHP
PHP将整个网站生成HTML纯静态网页的方法总结
Feb 05 #PHP
php 搜索框提示(自动完成)实例代码
Feb 05 #PHP
PHP持久连接mysql_pconnect()函数使用介绍
Feb 05 #PHP
You might like
DC最新动画电影:《战争之子》为何内容偏激,毁了一个不错的漫画
2020/04/09 欧美动漫
javascript 建设银行登陆键盘
2008/06/10 Javascript
jquery 页面全选框实践代码
2010/04/02 Javascript
DIY jquery plugin - tabs标签切换实现代码
2010/12/11 Javascript
在JavaScript应用中实现延迟加载的方法
2015/06/25 Javascript
jQuery动态星级评分效果实现方法
2015/08/06 Javascript
浅谈Javascript事件对象
2017/02/05 Javascript
利用JS实现简单的瀑布流加载图片效果
2017/04/22 Javascript
JS运动特效之任意值添加运动的方法分析
2018/01/24 Javascript
JS在if中的强制类型转换方式
2018/07/15 Javascript
使用angular-cli webpack创建多个包的方法
2018/10/16 Javascript
js实现ajax的用户简单登入功能
2020/06/18 Javascript
vue动态设置路由权限的主要思路
2021/01/13 Vue.js
[03:59]DOTA2英雄梦之声_第07期_水晶室女
2014/06/23 DOTA
python中django框架通过正则搜索页面上email地址的方法
2015/03/21 Python
Python新手入门最容易犯的错误总结
2017/04/24 Python
Python利用递归和walk()遍历目录文件的方法示例
2017/07/14 Python
使用Selenium破解新浪微博的四宫格验证码
2018/10/19 Python
Python之虚拟环境virtualenv,pipreqs生成项目依赖第三方包的方法
2019/07/23 Python
浅谈pytorch grad_fn以及权重梯度不更新的问题
2019/08/20 Python
Tensorflow获取张量Tensor的具体维数实例
2020/01/19 Python
Python 创建TCP服务器的方法
2020/07/28 Python
英国最大的电子产品和家电零售企业:Currys PC World
2016/09/24 全球购物
Farnell德国:电子元器件供应商
2018/07/10 全球购物
Helly Hansen工作服美国官方网上商店:为最恶劣的环境
2019/09/04 全球购物
俄罗斯女装店:12storeez
2019/10/25 全球购物
Chemist Warehouse中文网:澳洲连锁大药房
2021/02/05 全球购物
金蝶的一道SQL笔试题
2012/12/18 面试题
贷款委托书
2014/08/01 职场文书
学生实习证明范文
2014/09/28 职场文书
2015年世界艾滋病日活动总结
2015/03/24 职场文书
草房子读书笔记
2015/06/29 职场文书
详解Oracle数据库中自带的所有表结构(sql代码)
2021/11/20 Oracle
css3应用示例:新增的选择器
2022/03/16 HTML / CSS
分享几种python 变量合并方法
2022/03/20 Python
React四级菜单的实现
2022/04/08 Javascript