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 相关文章推荐
dedecms中常见问题修改方法总结
Mar 21 PHP
细谈php中SQL注入攻击与XSS攻击
Jun 10 PHP
php FLEA中二叉树数组的遍历输出
Sep 26 PHP
关于PHP堆栈与列队的学习
Jun 21 PHP
php操作MongoDB基础教程(连接、新增、修改、删除、查询)
Mar 25 PHP
php学习笔记之基础知识
Nov 08 PHP
php一个文件搞定微信jssdk配置
Dec 12 PHP
PHP 配置后台登录以及模板引入
Jan 24 PHP
基于yaf框架和uploadify插件,做的一个导入excel文件,查看并保存数据的功能
Jan 24 PHP
ThinkPHP3.2框架自定义配置和加载用法示例
Jun 14 PHP
php设计模式之策略模式实例分析【星际争霸游戏案例】
Mar 26 PHP
PHP7 其他修改
Mar 09 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数组操作
2011/12/30 PHP
用PHP提取中英文词语以及数字的首字母的方法介绍
2013/04/23 PHP
php curl的深入解析
2013/06/02 PHP
PHP计算一年多少个星期和每周的开始和结束日期
2014/07/01 PHP
php+mysql实现用户注册登陆的方法
2015/01/03 PHP
PHP生成和获取XML格式数据的方法
2016/03/04 PHP
基于Jquery实现表格动态分页实现代码
2011/06/21 Javascript
通过AJAX的JS、JQuery两种方式解析XML示例介绍
2013/09/23 Javascript
javascript不可用的问题探究
2013/10/01 Javascript
jQuery实现给页面换肤的方法
2015/05/30 Javascript
全面解析Bootstrap表单使用方法(表单样式)
2015/11/24 Javascript
javascript和jquery实现用户登录验证
2016/05/04 Javascript
ionic实现滑动的三种方式
2016/08/27 Javascript
AngularJS模板加载用法详解
2016/11/04 Javascript
初识NodeJS服务端开发入门(Express+MySQL)
2017/04/07 NodeJs
AngularJS动态菜单操作指令
2017/04/25 Javascript
Vuepress 搭建带评论功能的静态博客的实现
2019/02/17 Javascript
js实现简单点赞操作
2020/03/17 Javascript
[08:06]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Elephant 选手采访
2021/03/11 DOTA
Python json模块使用实例
2015/04/11 Python
教你用Type Hint提高Python程序开发效率
2016/08/08 Python
深入理解Python单元测试unittest的使用示例
2017/11/18 Python
对python3新增的byte类型详解
2018/12/04 Python
解决Python3.5+OpenCV3.2读取图像的问题
2018/12/05 Python
python ctypes库2_指定参数类型和返回类型详解
2019/11/19 Python
解决pycharm上的jupyter notebook端口被占用问题
2019/12/17 Python
Python GUI自动化实现绕过验证码登录
2020/01/10 Python
HTML5 video进入全屏和退出全屏的实现方法
2020/07/28 HTML / CSS
美国快时尚彩妆品牌:Winky Lux(透明花瓣润唇膏)
2018/11/06 全球购物
char型变量中能不能存贮一个中文汉字
2015/07/08 面试题
后进生转化工作制度
2014/01/17 职场文书
出纳员岗位职责
2014/03/13 职场文书
十佳中学生事迹材料
2014/06/02 职场文书
领导干部群众路线教育实践活动剖析材料
2014/10/10 职场文书
办公室行政主管岗位职责
2015/04/09 职场文书
导游词之崇武古城
2019/10/07 职场文书