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 相关文章推荐
967 个函式
Oct 09 PHP
php防注
Jan 15 PHP
mysqli_set_charset和SET NAMES使用抉择及优劣分析
Jan 13 PHP
PHP5中实现多态的两种方法实例分享
Apr 21 PHP
ThinkPHP视图查询详解
Jun 30 PHP
smarty模板引擎中自定义函数的方法
Jan 22 PHP
Mac环境下php操作mysql数据库的方法分享
May 11 PHP
PHP对象克隆clone用法示例
Sep 28 PHP
PHP给源代码加密的几种方法汇总(推荐)
Feb 06 PHP
实现PHP中session存储及删除变量
Oct 15 PHP
php设计模式之工厂方法模式分析【星际争霸游戏案例】
Jan 23 PHP
基于PHP实现发微博动态代码实例
Dec 11 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中通过smtp发邮件的类,测试通过
2007/01/22 PHP
PHP提示Warning:phpinfo() has been disabled函数禁用的解决方法
2014/12/17 PHP
php带抄送和密件抄送的邮件发送方法
2015/03/20 PHP
PHP中curl_setopt函数用法实例分析
2015/04/16 PHP
php 无限分类 树形数据格式化代码
2016/10/11 PHP
JavaScript获取GridView选择的行内容
2009/04/14 Javascript
JavaScript 动态改变图片大小
2009/06/11 Javascript
js实现有时间限制消失的图片方法
2015/02/27 Javascript
javascript实现简单的贪吃蛇游戏
2015/03/31 Javascript
再谈JavaScript线程
2015/07/10 Javascript
Validform+layer实现漂亮的表单验证特效
2016/01/17 Javascript
js鼠标单击和双击事件冲突问题的快速解决方法
2016/07/11 Javascript
QRCode.js:基于JQuery的生成二维码JS库的使用
2017/06/23 jQuery
vue实现微信分享朋友圈,发送朋友的示例讲解
2018/02/10 Javascript
WebPack配置vue多页面的技巧
2018/05/15 Javascript
JS实现利用闭包判断Dom元素和滚动条的方向示例
2019/08/26 Javascript
如何优雅地在Node应用中进行错误异常处理
2019/11/25 Javascript
Vue中qs插件的使用详解
2020/02/07 Javascript
vue实现简单的登录弹出框
2020/10/26 Javascript
[01:09]2014DOTA2国际邀请赛 TI4西雅图DOTA2 中国美女coser加油助威
2014/07/20 DOTA
python 图片验证码代码
2008/12/07 Python
python练习程序批量修改文件名
2014/01/16 Python
python的keyword模块用法实例分析
2015/06/30 Python
Python读取数据集并消除数据中的空行方法
2018/07/12 Python
从0开始的Python学习016异常
2019/04/08 Python
Django 表单模型选择框如何使用分组
2019/05/16 Python
Python 多进程原理及实现
2020/12/21 Python
基于MUI框架使用HTML5实现的二维码扫描功能
2018/03/01 HTML / CSS
语文教学随笔感言
2014/02/18 职场文书
运动会搞笑广播稿
2014/10/14 职场文书
2014年销售员工作总结
2014/12/01 职场文书
个人委托函范文
2015/01/29 职场文书
任命书标准格式
2015/03/02 职场文书
2017年大学生寒假社会实践活动总结
2016/04/06 职场文书
php引用传递
2021/04/01 PHP
SQL Server实现分页方法介绍
2022/03/16 SQL Server