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环境――Appserv
Dec 13 PHP
个人站长制做网页常用的php代码
Mar 03 PHP
允许phpmyadmin空密码登录的配置方法
May 29 PHP
linux下为php添加curl扩展的方法
Jul 29 PHP
PHP读取txt文件的内容并赋值给数组的代码
Nov 03 PHP
PHP json_encode中文乱码问题的解决办法
Sep 09 PHP
PHP比你想象的好得多
Nov 27 PHP
phpMyAdmin安装并配置允许空密码登录
Jul 04 PHP
WordPress中用于创建以及获取侧边栏的PHP函数讲解
Dec 29 PHP
php DES加密算法实例分析
Sep 18 PHP
thinkPHP事务操作简单案例分析
Oct 17 PHP
thinkphp5.1框架模板赋值与变量输出示例
May 25 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 转义使用详解
2013/07/15 PHP
浅谈ThinkPHP的URL重写
2014/11/25 PHP
smarty模板引擎中内建函数if、elseif和else的使用方法
2015/01/22 PHP
thinkPHP5框架实现基于ajax的分页功能示例
2018/06/12 PHP
js 禁用浏览器的后退功能的简单方法
2008/12/10 Javascript
javascript 控制input只允许输入的各种指定内容
2014/06/19 Javascript
JavaScript SHA512&amp;SHA256加密算法详解
2015/08/11 Javascript
详解Angular的内置过滤器和自定义过滤器【推荐】
2016/12/26 Javascript
js利用for in循环获取 一个对象的所有属性以及值的实例
2017/03/30 Javascript
nodejs实现简单的gulp打包
2017/12/21 NodeJs
Vue中this.$router.push参数获取方法
2018/02/27 Javascript
详解浏览器缓存和webpack缓存配置
2018/07/06 Javascript
JS+HTML5实现获取手机验证码倒计时按钮
2018/08/08 Javascript
零基础之Node.js搭建API服务器的详解
2019/03/08 Javascript
JS实现打字游戏
2019/12/17 Javascript
Mac下Supervisor进程监控管理工具的安装与配置
2014/12/16 Python
在Python中使用元类的教程
2015/04/28 Python
简介Python中用于处理字符串的center()方法
2015/05/18 Python
python脚本设置系统时间的两种方法
2016/02/21 Python
Python使用pyautogui模块实现自动化鼠标和键盘操作示例
2018/09/04 Python
python 三元运算符使用解析
2019/09/16 Python
python 消除 futureWarning问题的解决
2019/12/25 Python
Python中的整除和取模实例
2020/06/03 Python
Python读取yaml文件的详细教程
2020/07/21 Python
python开发入门——列表生成式
2020/09/03 Python
django中cookiecutter的使用教程
2020/12/03 Python
Python Spyder 调出缩进对齐线的操作
2021/02/26 Python
市场部专员岗位职责
2013/11/30 职场文书
工作室成员个人发展规划范文
2014/01/24 职场文书
大学班级干部的自我评价分享
2014/02/10 职场文书
学习经验交流会主持词
2014/04/01 职场文书
销售顾问工作计划书
2014/08/15 职场文书
励志演讲稿300字
2014/08/21 职场文书
话题作文之学会尊重
2019/12/16 职场文书
如何使用PostgreSQL进行中文全文检索
2021/05/27 PostgreSQL
golang三种设计模式之简单工厂、方法工厂和抽象工厂
2022/04/10 Golang