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抓取https的内容的代码
Apr 06 PHP
openPNE常用方法分享
Nov 29 PHP
解析PHP中的unset究竟会不会释放内存
Jul 18 PHP
codeigniter教程之多文件上传使用示例
Feb 11 PHP
PHP学习笔记之字符串编码的转换和判断
May 22 PHP
Json_encode防止汉字转义成unicode的方法
Feb 25 PHP
yii2超好用的日期组件和时间组件
May 05 PHP
简单解决微信文章图片防盗链问题
Dec 17 PHP
PHP实现的大文件切割与合并功能示例
Apr 10 PHP
php7新特性的理解和比较总结
Apr 14 PHP
yii2的restful api路由实例详解
May 14 PHP
laravel 去掉index.php伪静态的操作方法
Oct 12 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
用Socket发送电子邮件(利用需要验证的SMTP服务器)
2006/10/09 PHP
PHP通过header实现文本文件下载的代码
2010/08/08 PHP
用php随机生成福彩双色球号码的2种方法
2013/02/04 PHP
php银联网页支付实现方法
2015/03/04 PHP
php自定义函数实现二维数组排序功能
2016/07/20 PHP
laravel中数据显示方法(默认值和下拉option默认选中)
2019/10/11 PHP
node.js中的fs.unlink方法使用说明
2014/12/15 Javascript
使用纯javascript实现经典扫雷游戏
2015/04/23 Javascript
jquery实现浮动的侧栏实例
2015/06/25 Javascript
JavaScript中利用Array和Object实现Map的方法
2015/07/27 Javascript
jQuery表单验证功能实例
2015/08/28 Javascript
jquery实现的简单二级菜单效果代码
2015/09/22 Javascript
谈谈我对JavaScript原型和闭包系列理解(随手笔记8)
2015/12/24 Javascript
jQuery validate插件submitHandler提交导致死循环解决方法
2016/01/21 Javascript
javascript正则表达式之分组概念与用法实例
2016/06/16 Javascript
简单实现Vue的observer和watcher
2016/12/21 Javascript
angularJS的radio实现单项二选一的使用方法
2018/02/28 Javascript
jquery实现的简单轮播图功能【适合新手】
2018/08/17 jQuery
JavaScript两种计时器的实例讲解
2019/01/31 Javascript
[52:41]OG vs IG 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/20 DOTA
python使用urllib2实现发送带cookie的请求
2015/04/28 Python
Python中工作日类库Busines Holiday的介绍与使用
2017/07/06 Python
安装Anaconda3及使用Jupyter的方法
2020/10/27 Python
Python爬虫实例之2021猫眼票房字体加密反爬策略(粗略版)
2021/02/22 Python
HTML5混合开发二维码扫描以及调用本地摄像头
2017/12/27 HTML / CSS
iKRIX意大利网上商店:男女豪华服装和配件
2019/10/09 全球购物
法国在线药房:Shop Pharmacie
2019/11/26 全球购物
欧洲著名的二手奢侈品网站:Vestiaire Collective
2020/03/07 全球购物
.NET笔试题(20个问题)
2016/02/02 面试题
艺术应用与设计个人的自我评价
2013/11/23 职场文书
节约用水演讲稿
2014/05/21 职场文书
党支部创先争优承诺书
2014/08/30 职场文书
2015年纪检监察工作总结
2015/04/08 职场文书
2016母亲节感恩话语
2015/12/09 职场文书
关于Vue Router的10条高级技巧总结
2021/05/06 Vue.js
Python 统计序列中元素的出现频度
2022/04/26 Python