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+MYSQL的文章管理系统(二)
Oct 09 PHP
提高PHP编程效率 引入缓存机制提升性能
Feb 15 PHP
PHP学习之字符串比较和查找
Apr 17 PHP
php自定义session示例分享
Apr 22 PHP
PHP解析html类库simple_html_dom的转码bug
May 22 PHP
php实现的常见排序算法汇总
Sep 08 PHP
PHP读取文本文件并逐行输出该行使用最多的字符与对应次数的方法
Nov 25 PHP
PHP+MySQL实现消息队列的方法分析
May 09 PHP
PHP中quotemeta()函数的用法讲解
Apr 04 PHP
php curl操作API接口类完整示例
May 21 PHP
thinkPHP5框架接口写法简单示例
Aug 05 PHP
php设计模式之状态模式实例分析【星际争霸游戏案例】
Mar 26 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中的超全局变量
2006/10/09 PHP
php array_intersect比array_diff快(附详细的使用说明)
2011/07/03 PHP
PHP中的traits简单使用实例
2015/05/13 PHP
PHP中preg_match函数正则匹配的字符串长度问题
2015/05/27 PHP
java微信开发之上传下载多媒体文件
2016/06/24 PHP
php简单实现单态设计模式的方法分析
2017/07/28 PHP
IE浏览器打印的页眉页脚设置解决方法
2009/12/08 Javascript
js 判断脚本加载完毕的代码
2011/07/13 Javascript
javascript 控制input只允许输入的各种指定内容
2014/06/19 Javascript
详解addEventListener的三个参数之useCapture
2015/03/16 Javascript
JS实现可点击展开与关闭的左侧广告代码
2015/09/02 Javascript
jQuery多条件筛选如何实现
2015/11/04 Javascript
BootStrap 智能表单实战系列(十)自动完成组件的支持
2016/06/13 Javascript
jQuery 中ajax异步调用的四种方式
2016/06/28 Javascript
JavaScript对象_动力节点Java学院整理
2017/06/23 Javascript
react-router v4如何使用history控制路由跳转详解
2018/01/09 Javascript
Vue的事件响应式进度条组件实例详解
2018/02/04 Javascript
微信小程序五子棋游戏AI实现方法【附demo源码下载】
2019/02/20 Javascript
jQuery ajax仿Google自动提示SearchSuggess功能示例
2019/03/28 jQuery
JS实现打字游戏
2019/12/17 Javascript
[00:37]2016完美“圣”典风云人物:rOtk宣传片
2016/12/09 DOTA
[06:43]2018DOTA2国际邀请赛寻真——VGJ.Thunder
2018/08/11 DOTA
pyqt4教程之widget使用示例分享
2014/03/07 Python
Python实现中一次读取多个值的方法
2018/04/22 Python
使用turtle绘制五角星、分形树
2019/10/06 Python
使用pytorch搭建AlexNet操作(微调预训练模型及手动搭建)
2020/01/18 Python
Python图像处理库PIL中图像格式转换的实现
2020/02/26 Python
利用pipenv和pyenv管理多个相互独立的Python虚拟开发环境
2020/11/01 Python
详解Django中异步任务之django-celery
2020/11/05 Python
windows+vscode安装paddleOCR运行环境的步骤
2020/11/11 Python
Joules官网:女士、男士和儿童服装和鞋类
2018/10/23 全球购物
银行会计财务工作个人的自我评价
2013/10/29 职场文书
职工年度考核评语
2014/12/31 职场文书
Python+Pillow+Pytesseract实现验证码识别
2022/05/11 Python
Python docx库删除复制paragraph及行高设置图片插入示例
2022/07/23 Python
Centos7 Shell编程之正则表达式、文本处理工具详解
2022/08/05 Servers