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代码
Dec 06 PHP
PHP函数常用用法小结
Feb 08 PHP
php之readdir函数用法实例
Nov 13 PHP
php下pdo的mysql事务处理用法实例
Dec 27 PHP
PHP处理大量表单字段的便捷方法
Feb 07 PHP
浅析PHP中的i++与++i的区别及效率
Jun 15 PHP
Laravel中log无法写入问题的解决
Jun 17 PHP
php基于session锁防止阻塞请求的方法分析
Aug 07 PHP
详解json在php中的应用
Sep 30 PHP
详解PHP PDO简单教程
May 28 PHP
Laravel 不同生产环境服务器的判断实践
Oct 15 PHP
Laravel框架处理用户的请求操作详解
Dec 20 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
PHP开发环境配置(MySQL数据库安装图文教程)
2010/04/28 PHP
php取整函数ceil,floo,round的用法及介绍
2013/08/31 PHP
php 模拟 asp.net webFrom 按钮提交事件的思路及代码
2013/12/02 PHP
改进UCHOME的记录发布,增强可访问性用户体验
2011/01/17 Javascript
高效的获取当前元素是父元素的第几个子元素
2013/10/15 Javascript
JavaScript中setInterval的用法总结
2013/11/20 Javascript
jquery用ajax方式从后台获取json数据后如何将内容填充到下拉列表
2015/08/26 Javascript
使用pcs api往免费的百度网盘上传下载文件的方法
2016/03/17 Javascript
使用伪命名空间封装保护独自创建的对象方法
2016/08/04 Javascript
JS获取字符串实际长度(包含汉字)的简单方法
2016/08/11 Javascript
vue基于Vue2.0和高德地图的地图组件实例
2017/04/28 Javascript
axios全局请求参数设置,请求及返回拦截器的方法
2018/03/05 Javascript
利用js-cookie实现前端设置缓存数据定时失效
2019/06/18 Javascript
在Python中使用PIL模块处理图像的教程
2015/04/29 Python
Python遍历目录并批量更换文件名和目录名的方法
2016/09/19 Python
Python中格式化format()方法详解
2017/04/01 Python
Flask框架Flask-Login用法分析
2018/07/23 Python
windows下pycharm安装、创建文件、配置默认模板
2018/07/31 Python
python格式化输出保留2位小数的实现方法
2019/07/02 Python
Python grequests模块使用场景及代码实例
2020/08/10 Python
几个解决兼容IE6\7\8不支持html5标签的几个方法
2013/01/07 HTML / CSS
HTML5 Canvas实现放大镜效果示例
2020/03/25 HTML / CSS
vivo智能手机官方商城:vivo
2016/09/22 全球购物
韩国家庭购物网上商店:Nsmall
2017/05/07 全球购物
世界领先的高品质定制产品平台:Zazzle
2017/07/23 全球购物
学生个人的自我评价分享
2013/11/05 职场文书
营销总经理的岗位职责
2013/12/15 职场文书
船舶专业个人求职信范文
2014/01/02 职场文书
学生会副主席竞聘书
2014/03/31 职场文书
推广活动策划方案
2014/08/23 职场文书
迟到检讨书2000字(精选篇)
2014/10/07 职场文书
作文评语怎么写
2014/12/25 职场文书
计生个人工作总结
2015/02/28 职场文书
python实现简易名片管理系统
2021/04/11 Python
Redis 彻底禁用RDB持久化操作
2021/07/09 Redis
十大最强妖精系宝可梦,哲尔尼亚斯实力最强,第五被称为大力士
2022/03/18 日漫