php购物网站支付paypal使用方法


Posted in PHP onNovember 28, 2010

详细参考:

https://cms.paypal.com/us/cgi-bin/?cmd=_render-content&content_ID=developer/e_howto_html_Appx_websitestandard_htmlvariables

定义常量paypalurl

const PAYPAL_URL = 'https://www.sandbox.paypal.com/';

将要传送的数据记录为一个数组

$paypalData = array(
                   'add'                => 1,
                    'cmd'               => '_ext-enter',
                    'redirect_cmd'    => '_xclick',
                    'business'            => $paypalAccount, --------liangliangfeng211@gmail.com这个是收款人的paypal账号
                    'item_name'       => '51customimprint shopping cart',
                    'item_number'   => $order->id,
                    'first_name'        => $address->first_name,
                    'last_name'         => $address->last_name,
                    'address1'           => $address->address1,
                    'city'                     => $address->city,
                    'state'                  => $address->state_or_province,
                    'zip'                      => $address->zip_code,
                    'amount'            => $order->subtotal,
                    'shipping'          => $order->shipping_fee,
                    'no_note'            => 1,
                    'currency_code'    => 'USD',
                    'lc'                      => 'US'
                );

将这个数组转化为一个url地址

$paypalArguments = array();
                foreach($paypalData as $k => $v){
                    array_push($paypalArguments, $k . '=' . urlencode($v));
                }
                $paypalUrl = self::PAYPAL_URL . '?' . implode('&', $paypalArguments);
                $this->_redirect($paypalUrl);

接下来,我们测试的时候,应该将Paypal接口的地址设置为:

https://www.sandbox.paypal.com/cgi-bin/webscr

基本的流程
当客户向您付款时,PayPal将向位于指定 URL (type=”hidden” name=”notify_url” value=” “)的服务器发送一个通知。此通知中将包括您的客户的所有付款信息(例如,客户名称、金额),以及一段加密代码。当服务器收到通知时,它随后会将该信息(包括加密代码)发送回安全的PayPal URL。PayPal将通过检查加密字符串对交易进行身份验证。这种将 IPN 数据传回PayPal的操作防止了“欺骗”,因此您可以确保 IPN 来自PayPal。在进行验证时,PayPal会将其合法性的确认信息发送回您的服务器。

提示:要启用即时付款通知,您将需要输入一个 URL,通过它您可以接收到来自您的用户信息的通知。

启用了即时付款通知后,每次当您接收付款时您的服务器都会收到一个通知,此通知将以隐藏的“FORM POST”的方式发送到指定的 URL,并将包括所有付款信息。此页面的底部列出了通知的 FORM 变量。

每次收到来自PayPal的 IPN 时,您必须在实施订单之前完成如下所述的通知确认过程。确认列出的信息将可确保交易合法。

通知确认IPN
为了确保付款已进入您的PayPal账户,您必须验证用作“receiver_email”的电子邮件地址是否已在您的PayPal账户中注册并得到确认。

服务器收到即时付款通知后,您将需要通过构建一个发送到PayPal的 HTTP POST 对其进行确认。您的 POST 应发送到 https://www.paypal.com/cgi-bin/webscr

您必须完全按照收到表单变量时的原样发送所有收到的表单变量。您还需要将一个值为“_notify-validate”的名为“cmd”变量(例如,cmd=_notify-validate)附加到 POST 字符串。

PayPal将回复该 POST,并在回复的正文中包含一个单词“VERIFIED”或“INVALID”。当您收到 VERIFIED 回复时,您需要在实施订单之前执行若干检查:

确认“payment_status”为“Completed”,因为系统也会为其他结果(如“Pending”或“Failed”)发送 IPN。
检查“txn_id”是否未重复,以防止欺诈者重复使用旧的已完成的交易。
验证“receiver_email”是已在您的PayPal账户中注册的电子邮件地址,以防止将付款发送到欺诈者的账户 。
检查其他交易详情(如物品号和价格),以确认价格未改变完成了以上检查后,您可以使用 IPN 数据更新您的数据库,并处理购物。
如果收到“无效”通知,则应将其视为可疑通知,并应对其进行调查。

PHP 相关文章推荐
用PHP来写记数器(详细介绍)
Oct 09 PHP
PHP新手上路(六)
Oct 09 PHP
php数组函数序列之array_unshift() 在数组开头插入一个或多个元素
Nov 07 PHP
ThinkPHP使用smarty模板引擎的方法
Jul 01 PHP
函数中使用require_once问题深入探讨 优雅的配置文件定义方法推荐
Jul 02 PHP
php中file_get_contents与curl性能比较分析
Nov 08 PHP
thinkphp连贯操作实例分析
Nov 22 PHP
php按字符无乱码截取中文的方法
Mar 27 PHP
PHP里的单例类写法实例
Jun 25 PHP
ThinkPHP 在阿里云上的nginx.config配置实例详解
Oct 11 PHP
php 数据结构之链表队列
Oct 17 PHP
php让json_encode不自动转义斜杠“/”的方法
Apr 27 PHP
IP攻击升级,程序改进以对付新的攻击
Nov 23 #PHP
php下封装较好的数字分页方法
Nov 23 #PHP
php下使用iconv需要注意的问题
Nov 20 #PHP
批量修改RAR文件注释的php代码
Nov 20 #PHP
为PHP初学者的8点有效建议
Nov 20 #PHP
PHP程序员最常犯的11个MySQL错误小结
Nov 20 #PHP
Windows 下的 PHP-PEAR 安装方法
Nov 20 #PHP
You might like
PHP 组件化编程技巧
2009/06/06 PHP
PHP代码优化之成员变量获取速度对比
2014/02/28 PHP
详解WordPress中创建和添加过滤器的相关PHP函数
2015/12/29 PHP
Linux下编译redis和phpredis的方法
2016/04/07 PHP
golang与php实现计算两个经纬度之间距离的方法
2016/07/22 PHP
php正确输出json数据的实例讲解
2018/08/21 PHP
再谈javascript图片预加载技术(详细演示)
2011/03/12 Javascript
如何将JS的变量值传递给ASP变量
2012/12/10 Javascript
jquery ajax对特殊字符进行转义防止js注入使用示例
2013/11/21 Javascript
Jquery设置attr的disabled属性控制某行显示或者隐藏
2014/09/25 Javascript
JS点击链接后慢慢展开隐藏着图片的方法
2015/02/17 Javascript
JS控制HTML元素的显示和隐藏的两种方法
2016/09/27 Javascript
简单理解js的冒泡排序
2016/12/19 Javascript
JavaScript中无法通过div.style.left获取值的解决方法
2017/02/19 Javascript
原生js二级联动效果
2017/06/20 Javascript
jQuery plugin animsition使用小结
2017/09/14 jQuery
angular 组件通信的几种实现方式
2018/07/13 Javascript
Vue-router 切换组件页面时进入进出动画方法
2018/09/01 Javascript
关于Vue中axios的封装实例详解
2019/10/20 Javascript
小程序新版订阅消息模板消息
2019/12/31 Javascript
Python操作列表的常用方法分享
2014/02/13 Python
python pandas修改列属性的方法详解
2018/06/09 Python
Python读取txt内容写入xls格式excel中的方法
2018/10/11 Python
Python面向对象之继承和多态用法分析
2019/06/08 Python
python操作excel让工作自动化
2019/08/09 Python
python爬虫爬取笔趣网小说网站过程图解
2019/11/18 Python
使用python3批量下载rbsp数据的示例代码
2019/12/20 Python
python正则过滤字母、中文、数字及特殊字符方法详解
2020/02/11 Python
Python Numpy,mask图像的生成详解
2020/02/19 Python
python判断是空的实例分享
2020/07/06 Python
机电一体化大学生求职信
2013/11/08 职场文书
工作中个人的自我评价
2013/12/31 职场文书
廉洁使者实施方案
2014/03/29 职场文书
大学生军训感言
2015/08/01 职场文书
2019年教师节活动策划方案
2019/09/09 职场文书
拒绝盗图!教你怎么用python给图片加水印
2021/06/04 Python