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 memcache扩展的三种安装方法
Apr 26 PHP
php中将地址生成迅雷快车旋风链接的代码[测试通过]
Apr 20 PHP
在PHP中使用FastCGI解析漏洞及修复方案
Nov 10 PHP
PHP 读取文本文件内容并分页显示
Jan 02 PHP
php mailer类调用远程SMTP服务器发送邮件实现方法
Mar 04 PHP
php flush无效,IIS7下php实时输出的方法
Aug 25 PHP
PHP与服务器文件系统的简单交互
Oct 21 PHP
ThinkPHP实现转换数据库查询结果数据到对应类型的方法
Nov 16 PHP
详解php用static方法的原因
Sep 12 PHP
PHP PDOStatement::fetchColumn讲解
Jan 31 PHP
详解php中生成标准uuid(guid)的方法
Apr 28 PHP
Laravel框架控制器,视图及模型操作图文详解
Dec 04 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设置页面超时时间解决方法
2015/09/22 PHP
js 数组操作代码集锦
2009/04/28 Javascript
js 操作css实现代码
2009/06/11 Javascript
js获取视频时长代码
2014/04/10 Javascript
angularjs的一些优化小技巧
2014/12/06 Javascript
jQuery实现数字加减效果汇总
2014/12/16 Javascript
JavaScript中setUTCMilliseconds()方法的使用详解
2015/06/12 Javascript
详解jQuery中的empty、remove和detach
2016/04/11 Javascript
jQueryUI中的datepicker使用方法详解
2016/05/25 Javascript
AngularJS实现按钮提示与点击变色效果
2016/09/07 Javascript
JS实现两周内自动登录功能
2017/03/23 Javascript
vue 通过下拉框组件学习vue中的父子通讯
2017/12/19 Javascript
Node.js readline 逐行读取、写入文件内容的示例
2018/03/01 Javascript
vue通信方式EventBus的实现代码详解
2019/06/10 Javascript
基于ssm框架实现layui分页效果
2019/07/27 Javascript
解决vue单页面 回退页面 keeplive 缓存问题
2020/07/22 Javascript
JQuery Ajax如何实现注册检测用户名
2020/09/25 jQuery
如何通过Proxy实现JSBridge模块化封装
2020/10/22 Javascript
Python模拟登录12306的方法
2014/12/30 Python
python 2.7.14安装图文教程
2018/04/08 Python
python调用Matplotlib绘制分布点并且添加标签
2018/05/31 Python
python把一个字符串切开的实例方法
2020/09/27 Python
西安当代医院管理研究院笔试题
2015/12/11 面试题
采购主管的岗位职责
2013/12/17 职场文书
财产保全担保书范文
2014/04/01 职场文书
《沉香救母》教学反思
2014/04/19 职场文书
小小商店教学反思
2014/04/27 职场文书
服务标语大全
2014/06/18 职场文书
师德师风个人总结
2015/02/06 职场文书
2015年销售人员工作总结
2015/04/07 职场文书
小学生表扬稿范文
2015/05/05 职场文书
2015年秋季运动会前导词
2015/07/20 职场文书
和领导吃饭祝酒词
2015/08/11 职场文书
2016年社区创先争优活动总结
2016/04/05 职场文书
2019年度行政文员工作计划范本!
2019/07/04 职场文书
一文搞懂Java中的注解和反射
2022/06/21 Java/Android