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 相关文章推荐
1.PHP简介
Oct 09 PHP
php mssql 时间格式问题
Jan 13 PHP
一个典型的PHP分页实例代码分享
Jul 28 PHP
第七章 php自定义函数实现代码
Dec 30 PHP
PHP高级对象构建 工厂模式的使用
Feb 05 PHP
PHP教程之PHP中shell脚本的使用方法分享
Feb 23 PHP
PHP基础学习之流程控制的实现分析
Apr 28 PHP
解析mysql left( right ) join使用on与where筛选的差异
Jun 18 PHP
php使用指定字符列表生成随机字符串的方法
Apr 18 PHP
分享php代码将360浏览器导出的favdb的sqlite数据库文件转换为html
Dec 09 PHP
thinkPHP下ueditor的使用方法详解
Dec 26 PHP
用Laravel Sms实现laravel短信验证码的发送的实现
Nov 29 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
phpBB BBcode处理的漏洞
2006/10/09 PHP
php防攻击代码升级版
2010/12/29 PHP
Yii净化器CHtmlPurifier用法示例(过滤不良代码)
2016/07/15 PHP
Zend Framework路由器用法实例详解
2016/12/11 PHP
PHP基于自定义函数实现的汉字转拼音功能实例
2017/09/30 PHP
使用IE的地址栏来辅助调试Web页脚本
2007/03/08 Javascript
jquery动态加载图片数据练习代码
2011/08/04 Javascript
JavaScript获取onclick、onchange等事件值的代码
2013/07/22 Javascript
JavaScript鼠标特效大全
2016/09/13 Javascript
javascript this详细介绍
2016/09/19 Javascript
禁用backspace网页回退功能的实现代码
2016/11/15 Javascript
jQuery zTree树插件简单使用教程
2017/01/10 Javascript
js登录滑动验证的实现(不滑动无法登陆)
2018/01/03 Javascript
vue组件编写之todolist组件实例详解
2018/01/22 Javascript
React Native 自定义下拉刷新上拉加载的列表的示例
2018/03/01 Javascript
Vue+webpack项目配置便于维护的目录结构教程详解
2018/10/14 Javascript
node上的redis调用优化示例详解
2018/10/30 Javascript
JS中的函数与对象的创建方式
2019/05/12 Javascript
vue 2.5.1 源码学习 之Vue.extend 和 data的合并策略
2019/06/04 Javascript
node.js中npm包管理工具用法分析
2020/02/14 Javascript
利用Vue的v-for和v-bind实现列表颜色切换
2020/07/17 Javascript
python ip正则式
2009/05/07 Python
Python的Django框架中的数据库配置指南
2015/07/17 Python
关于Python形参打包与解包小技巧分享
2019/08/24 Python
python读写文件write和flush的实现方式
2020/02/21 Python
Python连接HDFS实现文件上传下载及Pandas转换文本文件到CSV操作
2020/06/06 Python
巴基斯坦电子产品购物网站:Home Shopping
2017/09/14 全球购物
艺术系大学生毕业个人自我评价
2013/09/19 职场文书
体育教师自荐信范文
2013/12/16 职场文书
小学教师培训方案
2014/06/09 职场文书
新郎婚礼答谢词
2015/01/04 职场文书
廉政承诺书
2015/01/19 职场文书
Pytorch实现图像识别之数字识别(附详细注释)
2021/05/11 Python
Pygame Draw绘图函数的具体使用
2021/11/17 Python
实例详解Python的进程,线程和协程
2022/03/13 Python
Java 数组的使用
2022/05/11 Java/Android