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下MAIL的另一解决方案
Oct 09 PHP
php 显示指定路径下的图片
Oct 29 PHP
解析PHP的session过期设置
Jun 29 PHP
CI(CodeIgniter)框架介绍
Jun 09 PHP
php继承中方法重载(覆盖)的应用场合
Feb 09 PHP
PHP之预定义接口详解
Jul 29 PHP
PHP实现合并discuz用户
Aug 05 PHP
session 加入redis的实现代码
Jul 15 PHP
浅谈Coreseek、Sphinx-for-chinaese、Sphinx+Scws的区别
Dec 15 PHP
ThinkPHP框架表单验证操作方法
Jul 19 PHP
Yii框架响应组件用法实例分析
Sep 04 PHP
PHP实现获取文件mime类型多种方法解析
May 28 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 随机数的深入理解
2013/06/05 PHP
PHP反射机制用法实例
2014/08/28 PHP
php实现的递归提成方案实例
2015/11/14 PHP
yii2.0整合阿里云oss删除单个文件的方法
2017/09/19 PHP
PHP实现倒计时功能
2020/11/16 PHP
PHP读取文件或采集时解决中文乱码
2021/03/09 PHP
纯JS实现本地图片预览的方法
2015/07/31 Javascript
理解javascript封装
2016/02/23 Javascript
jQuery实现表格行和列的动态添加与删除方法【测试可用】
2016/08/01 Javascript
Javascript中常用的检测方法小结
2016/10/08 Javascript
nodejs和php实现图片访问实时处理
2017/01/05 NodeJs
详解ES6之用let声明变量以及let loop机制
2017/07/15 Javascript
使用webpack-dev-server处理跨域请求的方法
2018/04/18 Javascript
Linux Centos7.2下安装nodejs&npm配置全局路径的教程
2018/05/15 NodeJs
JS实现快递单打印功能【推荐】
2018/06/21 Javascript
webpack+vue.js构建前端工程化的详细教程
2020/05/10 Javascript
[00:43]FTP典藏礼包 DOTA2三大英雄霸气新套装
2014/03/21 DOTA
[02:20]DOTA2亚洲邀请赛 EHOME战队出场宣传片
2015/02/07 DOTA
Python实现设置windows桌面壁纸代码分享
2015/03/28 Python
浅析Python多线程下的变量问题
2015/04/28 Python
使用Python的Tornado框架实现一个Web端图书展示页面
2016/07/11 Python
Python实现Youku视频批量下载功能
2017/03/14 Python
HTML5 visibilityState属性详细介绍和使用实例
2014/05/03 HTML / CSS
Halston Heritage官网:简洁的日装,稍显奢华的晚装
2018/11/20 全球购物
Made in Design英国:设计家具、照明、家庭装饰和花园家具
2019/09/24 全球购物
医学生自荐信范文
2013/12/03 职场文书
团队精神口号
2014/06/06 职场文书
初中国旗下的演讲稿
2014/08/28 职场文书
对党的十八届四中全会的期盼
2014/10/17 职场文书
甲午大海战观后感
2015/06/02 职场文书
新郎父亲婚礼致辞
2015/07/27 职场文书
初级职称评定工作总结
2015/08/13 职场文书
煤矿安全生产工作总结
2015/08/13 职场文书
辞职申请书范本
2019/05/20 职场文书
《弟子规》读后感:知廉耻、明是非、懂荣辱、辨善恶
2019/12/03 职场文书
Redis全局ID生成器的实现
2022/06/05 Redis