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制作图型计数器的例子
Oct 09 PHP
为查询结果建立向后/向前按钮
Oct 09 PHP
CI(CodeIgniter)框架介绍
Jun 09 PHP
PHP把小数转成整数3种方法
Jun 30 PHP
PHP中curl_setopt函数用法实例分析
Apr 16 PHP
非常经典的PHP文件上传类分享
May 15 PHP
CI框架出现mysql数据库连接资源无法释放的解决方法
May 17 PHP
php利用header函数下载各种文件
Aug 24 PHP
PHP防止图片盗用(盗链)的方法小结
Nov 11 PHP
php json中文编码为null的解决办法
Dec 14 PHP
Laravel 5使用Laravel Excel实现Excel/CSV文件导入导出的功能详解
Oct 11 PHP
Ajax中的JSON格式与php传输过程全面解析
Nov 14 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
图书管理程序(二)
2006/10/09 PHP
解析PHP中的unset究竟会不会释放内存
2013/07/18 PHP
php实现smarty模板无限极分类的方法
2015/12/07 PHP
Yii2框架使用计划任务的方法
2016/05/25 PHP
php版交通银行网银支付接口开发入门教程
2016/09/26 PHP
PHP页面输出时js设置input框的选中值
2016/09/30 PHP
php 判断字符串编码是utf-8 或gb2312实例
2016/11/01 PHP
详解phpstorm2020最新破解方法
2020/09/17 PHP
在多个页面使用同一个HTML片段的代码
2011/03/04 Javascript
Jquery性能优化详解
2014/05/15 Javascript
jQuery插件Validation快速完成表单验证的方式
2016/07/28 Javascript
详解Vue文档中几个易忽视部分的剖析
2018/03/24 Javascript
关于Google发布的JavaScript代码规范你要知道哪些
2018/04/04 Javascript
详解Vue 多级组件透传新方法provide/inject
2018/05/09 Javascript
JavaScript实现获取两个排序数组的中位数算法示例
2019/02/26 Javascript
原生js实现二级联动菜单
2019/11/27 Javascript
jQuery 判断元素是否存在然后按需加载内容的实现代码
2020/01/16 jQuery
node.js中npm包管理工具用法分析
2020/02/14 Javascript
[02:20]2014DOTA2西雅图邀请赛 MVP外卡赛首胜采访
2014/07/09 DOTA
[52:52]DOTA2上海特级锦标赛C组资格赛#1 OG VS LGD第三局
2016/02/27 DOTA
Python实现的根据文件名查找数据文件功能示例
2018/05/02 Python
pycharm 将django中多个app放到同个文件夹apps的处理方法
2018/05/30 Python
python tkinter界面居中显示的方法
2018/10/11 Python
Python3内置模块pprint让打印比print更美观详解
2019/06/02 Python
Python hmac模块使用实例解析
2019/12/24 Python
浅谈Python描述数据结构之KMP篇
2020/09/06 Python
HTML5 Canvas像素处理使用接口介绍
2012/12/02 HTML / CSS
求两个数的乘积和商数,该作用由宏定义来实现
2013/03/13 面试题
素食餐饮项目创业计划书
2014/02/02 职场文书
初中生评语大全
2014/04/24 职场文书
火箭队口号
2014/06/18 职场文书
井冈山红色之旅感想
2014/10/07 职场文书
2016年乡镇综治宣传月活动总结
2016/03/16 职场文书
晶体管来复再生式二管收音机
2021/04/22 无线电
Windows11里微软已经将驱动程序安装位置A盘删除
2021/11/21 数码科技
MySQL Server 层四个日志
2022/03/31 MySQL