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 相关文章推荐
福利彩票幸运号码自动生成器
Oct 09 PHP
php5.3 废弃函数小结
May 16 PHP
PHP中break及continue两个流程控制指令区别分析
Apr 18 PHP
PHP也能干大事之PHP中的编码解码详解
Apr 20 PHP
PHP获得数组交集与差集的方法
Jun 10 PHP
THinkPHP获取客户端IP与IP地址查询的方法
Nov 14 PHP
php使用curl代理实现抓取数据的方法
Feb 03 PHP
PHP中Notice错误常见解决方法
Apr 28 PHP
PHP高效获取远程图片尺寸和大小的实现方法
Oct 20 PHP
Laravel框架FormRequest中重写错误处理的方法
Feb 18 PHP
PHP文件上传小程序 适合初学者学习!
May 23 PHP
laravel框架使用FormRequest进行表单验证,验证异常返回JSON操作示例
Feb 18 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
mysql limit查询优化分析
2008/11/12 PHP
php获得用户ip地址的比较不错的方法
2014/02/08 PHP
PHP学习笔记(二) 了解PHP的基本语法以及目录结构
2014/08/04 PHP
PHP单元测试框架PHPUnit用法详解
2019/01/23 PHP
为你的 Laravel 验证器加上多验证场景的实现
2020/04/07 PHP
FireFox与IE 下js兼容触发click事件的代码
2008/11/20 Javascript
IE8 兼容性问题(属性名区分大小写)
2009/06/04 Javascript
jquery中this的使用说明
2010/09/06 Javascript
百度判断手机终端并自动跳转js代码及使用实例
2014/06/11 Javascript
JavaScript的事件代理和委托实例分析
2015/03/25 Javascript
arguments对象验证函数的参数是否合法
2015/06/26 Javascript
javascript创建对象的几种模式介绍
2016/05/06 Javascript
微信小程序 引入es6 promise
2017/04/12 Javascript
教你如何用node连接redis的示例代码
2018/07/12 Javascript
如何使用JavaScript实现无缝滚动自动播放轮播图效果
2020/08/20 Javascript
JavaScript canvas实现文字时钟
2021/01/10 Javascript
[01:45]亚洲邀请赛互动指南虚拟物品介绍
2015/01/30 DOTA
[01:11]回顾历届DOTA2国际邀请赛中国区预选赛
2017/06/26 DOTA
Python基于OpenCV实现视频的人脸检测
2018/01/23 Python
Python中函数的返回值示例浅析
2019/08/28 Python
Django admin禁用编辑链接和添加删除操作详解
2019/11/15 Python
几个人围成一圈的问题
2013/09/26 面试题
青年文明号事迹材料
2014/01/18 职场文书
大学生求职工作的自我评价
2014/02/13 职场文书
材料员岗位职责
2014/03/13 职场文书
我的大学生活演讲稿
2014/04/25 职场文书
学用政策心得体会
2014/09/10 职场文书
办理信用卡工作证明
2014/09/30 职场文书
联谊活动总结范文
2015/05/09 职场文书
大学生十八大感想
2015/08/11 职场文书
大学生就业指导课心得体会
2016/01/15 职场文书
党风廉政建设心得体会(2016最新版)
2016/01/22 职场文书
python基础之文件操作
2021/10/24 Python
分享几个简单MySQL优化小妙招
2022/03/31 MySQL
Golang原生rpc(rpc服务端源码解读)
2022/04/07 Golang
Python Pandas解析读写 CSV 文件
2022/04/11 Python