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数据代码
Jun 05 PHP
php zip文件解压类代码
Dec 02 PHP
一步一步学习PHP(8) php 数组
Mar 05 PHP
解析php中const与define的应用区别
Jun 18 PHP
php导出word文档与excel电子表格的简单示例代码
Mar 08 PHP
函数中使用require_once问题深入探讨 优雅的配置文件定义方法推荐
Jul 02 PHP
个人写的PHP验证码生成类分享
Aug 21 PHP
php利用反射实现插件机制的方法
Mar 14 PHP
php ucwords() 函数将字符串中每个单词的首字符转换为大写(实现代码)
May 12 PHP
PHP将页面中点击数量高的链接进行高亮显示的方法
May 30 PHP
PHP有序表查找之插值查找算法示例
Feb 10 PHP
解决laravel(5.5)访问public报错的问题
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
PHP中使用数组实现堆栈数据结构的代码
2012/02/05 PHP
Laravel 5框架学习之数据库迁移(Migrations)
2015/04/08 PHP
PHP数组去重比较快的实现方式
2016/01/19 PHP
Docker配置PHP开发环境教程
2016/12/21 PHP
一段利用WSH修改和查看IP配置的代码
2008/05/11 Javascript
让GoogleCode的SVN下的HTML文件在FireFox下正常显示.
2009/05/25 Javascript
getElementsByTagName vs selectNodes效率 及兼容的selectNodes实现
2010/02/26 Javascript
ExtJS GridPanel 根据条件改变字体颜色
2010/03/08 Javascript
JavaScript(JS) 压缩 / 混淆 / 格式化 批处理工具
2010/12/10 Javascript
jQuery+css实现图片滚动效果(附源码)
2013/03/18 Javascript
js类定义函数时用prototype与不用的区别示例介绍
2014/06/10 Javascript
深入探究JavaScript中for循环的效率问题及相关优化
2016/03/13 Javascript
基于javascript实现图片滑动效果
2016/05/07 Javascript
浅析JavaScript动画模拟拖拽原理
2016/12/09 Javascript
Vue3 中的数据侦测的实现
2019/10/09 Javascript
Python 时间处理datetime实例
2008/09/06 Python
Python 抓取动态网页内容方案详解
2014/12/25 Python
python开发之文件操作用法实例
2015/11/13 Python
Python2.x与Python3.x的区别
2016/01/14 Python
查看django版本的方法分享
2018/05/14 Python
python处理document文档保留原样式
2019/09/23 Python
python计算导数并绘图的实例
2020/02/29 Python
pyinstaller将含有多个py文件的python程序做成exe
2020/04/29 Python
日本快乐生活方式购物网站:Shop Japan
2018/07/17 全球购物
TCP/IP中的TCP和IP分别承担什么责任
2012/04/21 面试题
EJB的几种类型
2012/08/15 面试题
污水厂厂长岗位职责
2014/01/04 职场文书
股东合作协议书
2014/04/14 职场文书
超市理货员岗位职责
2014/07/04 职场文书
小学优秀教师材料
2014/12/15 职场文书
收入证明申请书
2015/06/12 职场文书
同事欢送会致辞
2015/07/31 职场文书
《花钟》教学反思
2016/02/17 职场文书
pytorch 实现多个Dataloader同时训练
2021/05/29 Python
Flask response响应的具体使用
2021/07/15 Python
解决 Redis 秒杀超卖场景的高并发
2022/04/12 Redis