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中插入当前时间
Apr 06 PHP
php中定时计划任务的实现原理
Jan 08 PHP
php读取纯真ip数据库使用示例
Jan 26 PHP
PHP文件锁定写入实例解析
Jul 14 PHP
PHP正则替换函数preg_replace和preg_replace_callback使用总结
Sep 22 PHP
php实现的双向队列类实例
Sep 24 PHP
支持png透明图片的php生成缩略图类分享
Feb 08 PHP
利用PHP如何统计Nginx日志的User Agent数据
Mar 06 PHP
PHP htmlspecialchars()函数用法与实例讲解
Mar 08 PHP
PHP示例演示发送邮件给某个邮箱
Apr 03 PHP
如何在centos8自定义目录安装php7.3
Nov 28 PHP
Laravel 修改验证异常的响应格式实例代码详解
May 25 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中判断一个请求是ajax请求还是普通请求的方法
2011/06/28 PHP
Laravel手动分页实现方法详解
2016/10/09 PHP
php实现文章置顶功能的方法
2016/10/20 PHP
jQuery对象和DOM对象使用说明
2010/06/25 Javascript
Ext.get() 和 Ext.query()组合使用实现最灵活的取元素方式
2011/09/26 Javascript
常用的JS验证和函数汇总
2014/12/23 Javascript
jquery插件jSignature实现手动签名
2015/05/04 Javascript
node.js cookie-parser之parser.js
2016/06/06 Javascript
Angular 4 依赖注入学习教程之FactoryProvider的使用(四)
2017/06/04 Javascript
AngularJS解决ng-if中的ng-model值无效的问题
2017/06/21 Javascript
vue开发调试神器vue-devtools使用详解
2017/07/13 Javascript
微信小程序之多文件下载的简单封装示例
2018/01/29 Javascript
MVVM 双向绑定的实现代码
2018/06/21 Javascript
nodejs(officegen)+vue(axios)在客户端导出word文档的方法
2018/07/31 NodeJs
javascript验证form表单数据的案例详解
2019/03/25 Javascript
layer的prompt弹出框,点击回车,触发确定事件的方法
2019/09/06 Javascript
原生JavaScript实现滑动拖动验证的示例代码
2019/12/06 Javascript
javascript实现移动端上传图片功能
2020/08/18 Javascript
使用Python神器对付12306变态验证码
2016/01/05 Python
Python如何读取MySQL数据库表数据
2017/03/11 Python
python 3.6 tkinter+urllib+json实现火车车次信息查询功能
2017/12/20 Python
python下解压缩zip文件并删除文件的实例
2018/04/24 Python
python读取各种文件数据方法解析
2018/12/29 Python
Python数据类型之Dict字典实例详解
2019/05/07 Python
Windows平台Python编程必会模块之pywin32介绍
2019/10/01 Python
python的json中方法及jsonpath模块用法分析
2019/12/06 Python
使用PyTorch将文件夹下的图片分为训练集和验证集实例
2020/01/08 Python
python图形开发GUI库wxpython使用方法详解
2020/02/14 Python
微软开源最强Python自动化神器Playwright(不用写一行代码)
2021/01/05 Python
客服工作职责
2013/12/11 职场文书
人事专员的岗位职责
2014/03/01 职场文书
初三新学期计划书
2014/05/03 职场文书
学校募捐倡议书
2014/05/14 职场文书
学习党的群众路线剖析材料
2014/10/09 职场文书
三年级学生期末评语
2014/12/26 职场文书
详解MySQL 联合查询优化机制
2021/05/10 MySQL