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动态创建Flash动画
Oct 09 PHP
php控制linux服务器常用功能 关机 重启 开新站点等
Sep 05 PHP
使用php计算排列组合的方法
Nov 13 PHP
ThinkPHP使用心得分享-分页类Page的用法
May 15 PHP
ThinkPHP模板IF标签用法详解
Jul 01 PHP
Yii框架关联查询with用法分析
Dec 02 PHP
10个php函数实用却不常见
Oct 13 PHP
PHP使用file_get_content设置头信息的方法
Feb 14 PHP
动态表单验证的操作方法和TP框架里面的ajax表单验证
Jul 19 PHP
Laravel中前端js上传图片到七牛云的示例代码
Sep 04 PHP
PHP操作Postgresql封装类与应用完整实例
Apr 24 PHP
laravel添加角色和模糊搜索功能的实现代码
Jun 22 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
Joomla下利用configuration.php存储简单数据
2010/05/19 PHP
深入PHP autoload机制的详解
2013/06/09 PHP
php定时执行任务设置详解
2015/02/06 PHP
PHP 应用容器化以及部署方法
2018/02/12 PHP
Laravel框架FormRequest中重写错误处理的方法
2019/02/18 PHP
Javascript 学习笔记 错误处理
2009/07/30 Javascript
javascript针对DOM的应用分析(四)
2012/04/15 Javascript
简单常用的幻灯片播放实现代码
2013/09/25 Javascript
js控制页面控件隐藏显示的两种方法介绍
2013/10/09 Javascript
jQuery中find()方法用法实例
2015/01/07 Javascript
分享一些常用的jQuery动画事件和动画函数
2015/11/27 Javascript
基于jQuery实现多标签页切换的效果(web前端开发)
2016/07/24 Javascript
js图片轮播手动切换特效
2017/01/12 Javascript
利用Vue.js实现checkbox的全选反选效果
2017/01/18 Javascript
Javascript中for循环语句的几种写法总结对比
2017/01/23 Javascript
koa2实现登录注册功能的示例代码
2018/12/03 Javascript
js实现秒表计时器
2019/12/16 Javascript
详解JavaScript 作用域
2020/07/14 Javascript
利用numpy实现一、二维数组的拼接简单代码示例
2017/12/15 Python
Selenium chrome配置代理Python版的方法
2018/11/29 Python
详解【python】str与json类型转换
2019/04/29 Python
Python生态圈图像格式转换问题(推荐)
2019/12/02 Python
python实现在线翻译功能
2020/03/03 Python
python两种注释用法的示例
2020/10/09 Python
Python创建简单的神经网络实例讲解
2021/01/04 Python
教育课题研究自我鉴定范文
2013/12/28 职场文书
2014年圣诞节促销方案
2014/03/14 职场文书
大三学习计划书范文
2014/05/02 职场文书
市场营销专业自荐书
2014/06/10 职场文书
企业趣味活动方案
2014/08/21 职场文书
2015年医院后勤工作总结
2015/05/20 职场文书
2016年大学生暑期社会实践活动总结
2016/04/06 职场文书
农村房屋租赁合同(范本)
2019/07/23 职场文书
解读MySQL的客户端和服务端协议
2021/05/10 MySQL
浅谈Laravel中使用Slack进行异常通知
2021/05/29 PHP
浅谈Go语言多态的实现与interface使用
2021/06/16 Golang