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分页显示制作详细讲解
Oct 09 PHP
一个php作的文本留言本的例子(六)
Oct 09 PHP
php 实现进制转换(二进制、八进制、十六进制)互相转换实现代码
Oct 22 PHP
PHP函数篇之掌握ord()与chr()函数应用
Dec 05 PHP
php二维数组用键名分组相加实例函数
Nov 06 PHP
async和DOM Script文件加载比较
Jul 20 PHP
PHP 数据结构队列(SplQueue)和优先队列(SplPriorityQueue)简单使用实例
May 12 PHP
ThinkPHP函数详解之M方法和R方法
Sep 10 PHP
PHP中Array相关函数简介
Jul 03 PHP
解决form中action属性后面?传递参数 获取不到的问题
Jul 21 PHP
php curl上传、下载、https登陆实现代码
Jul 23 PHP
thinkphp5 migrate数据库迁移工具
Feb 20 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
ThinkPHP5.0框架结合Swoole开发实现WebSocket在线聊天案例详解
2019/04/02 PHP
50个优秀经典PHP算法大集合 附源码
2020/08/26 PHP
jQuery 操作下拉列表框实现代码
2010/02/22 Javascript
ExtJs之带图片的下拉列表框插件
2010/03/04 Javascript
javascript 文件的同步加载与异步加载实现原理
2012/12/13 Javascript
Jquery操作下拉框(DropDownList)实现取值赋值
2013/08/13 Javascript
浅析ES6的八进制与二进制整数字面量
2016/08/30 Javascript
js实现目录链接,内容跟着目录滚动显示的简单实例
2016/10/15 Javascript
自定义类似于jQuery UI Selectable 的Vue指令v-selectable
2017/08/23 jQuery
bootstrap-table实现服务器分页的示例 (spring 后台)
2017/09/01 Javascript
浅谈React和Redux的连接react-redux
2017/12/04 Javascript
JS改变页面颜色源码分享
2018/02/24 Javascript
vue的toast弹窗组件实例详解
2018/05/14 Javascript
基于Koa2写个脚手架模拟接口服务的方法
2018/11/27 Javascript
解决vue移动端适配问题
2018/12/12 Javascript
vue悬浮可拖拽悬浮按钮的实例代码
2019/08/20 Javascript
在vue中根据光标的显示与消失实现下拉列表
2019/09/29 Javascript
如何在JavaScript中创建具有多个空格的字符串?
2020/02/23 Javascript
微信小程序视频弹幕发送功能的实现
2020/12/28 Javascript
[01:33:59]真人秀《加油 DOTA》 第六期
2014/09/09 DOTA
python下函数参数的传递(参数带星号的说明)
2010/09/19 Python
Python发送邮件功能示例【使用QQ邮箱】
2018/12/04 Python
python使用 request 发送表单数据操作示例
2019/09/25 Python
Python和Anaconda和Pycharm安装教程图文详解
2020/02/04 Python
python如何判断IP地址合法性
2020/04/05 Python
Django封装交互接口代码
2020/07/12 Python
Bugatchi官方网站:男士服装在线
2019/04/10 全球购物
列车长先进事迹材料
2014/01/25 职场文书
学校师德承诺书
2014/05/23 职场文书
汽车运用工程专业求职信
2014/06/18 职场文书
乡镇食品安全责任书
2014/07/28 职场文书
高中生个性发展自我评价
2015/03/09 职场文书
2015小学教育教学工作总结
2015/07/21 职场文书
适合青年人白手起家的创业项目分享
2019/08/16 职场文书
启迪人心的励志语录:脾气永远不要大于本事
2020/01/02 职场文书
阿里云Nginx配置https实现域名访问项目(图文教程)
2021/03/31 Servers