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 相关文章推荐
BBS(php & mysql)完整版(四)
Oct 09 PHP
php自定义函数call_user_func和call_user_func_array详解
Jul 14 PHP
PHP语言中global和$GLOBALS[]的分析 之二
Feb 02 PHP
php开发文档 会员收费1期
Aug 14 PHP
利用php绘制饼状图的实现代码
Jun 07 PHP
destoon各类调用汇总
Jun 20 PHP
Zend Framework实现留言本分页功能(附demo源码下载)
Mar 22 PHP
laravel学习教程之关联模型
Jul 30 PHP
thinkPHP的表达式查询用法详解
Sep 14 PHP
PHP实现超简单的SSL加密解密、验证及签名的方法示例
Aug 28 PHP
阿里云Win2016安装Apache和PHP环境图文教程
Mar 11 PHP
PHP面试题 wakeup魔法 Ezpop pop序列化与反序列化
Apr 11 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
解析linux下安装memcacheq(mcq)全过程笔记
2013/06/27 PHP
PHP通过反射动态加载第三方类和获得类源码的实例
2015/11/27 PHP
关于php中的json_encode()和json_decode()函数的一些说明
2016/11/20 PHP
laravel 解决crontab不执行的问题
2019/10/22 PHP
JavaScript 对话框和状态栏使用说明
2009/10/25 Javascript
基于JQuery框架的AJAX实例代码
2009/11/03 Javascript
使用JavaScript构建JSON格式字符串实现步骤
2013/03/22 Javascript
Javascript/Jquery——简单定时器的多种实现方法
2013/07/03 Javascript
jquery ui dialog实现弹窗特效的思路及代码
2013/08/03 Javascript
jquery退出each循环的写法
2014/02/26 Javascript
JS替换字符串中字符即替换全部而不是第一个
2014/06/04 Javascript
Angularjs过滤器使用详解
2016/05/25 Javascript
jQuery实现的自定义弹出层效果实例详解
2016/09/04 Javascript
Iscrool下拉刷新功能实现方法(推荐)
2017/06/26 Javascript
jQuery实现表单动态添加数据并提交的方法
2018/07/19 jQuery
详解微信小程序scroll-view横向滚动的实践踩坑及隐藏其滚动条的实现
2019/03/14 Javascript
发布订阅模式在vue中的实际运用实例详解
2019/06/09 Javascript
vue实现移动端input上传视频、音频
2020/08/18 Javascript
在Python的Flask框架中实现全文搜索功能
2015/04/20 Python
浅析Python中元祖、列表和字典的区别
2016/08/17 Python
Flask-Mail用法实例分析
2018/07/21 Python
sublime3之内网安装python插件Anaconda的流程
2020/11/10 Python
在HTML5中使用MathML数学公式的简单讲解
2016/02/19 HTML / CSS
AmazeUI 输入框组的示例代码
2020/08/14 HTML / CSS
客房主管岗位职责
2013/12/09 职场文书
工地资料员岗位职责
2013/12/31 职场文书
酒鬼酒广告词
2014/03/21 职场文书
党员教师一句话承诺
2014/05/30 职场文书
机械设计专业大学生职业生涯规划书范文
2014/09/13 职场文书
群众路线查摆问题及整改措施
2014/10/10 职场文书
师范生见习报告范文
2014/11/03 职场文书
小学公民道德宣传日活动总结
2015/03/23 职场文书
公司员工培训管理制度
2015/08/04 职场文书
社会实践心得体会范文
2016/01/14 职场文书
原生CSS实现文字无限轮播的通用方法
2021/03/30 HTML / CSS
Js类的构建与继承案例详解
2021/09/15 Javascript