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调用Webservice实例代码
Jul 29 PHP
PHP提取字符串中的图片地址[正则表达式]
Nov 12 PHP
php ckeditor上传图片文件名乱码解决方法
Nov 15 PHP
PHP魔术方法__GET、__SET使用实例
Nov 25 PHP
Laravel 5 框架入门(二)构建 Pages 的管理功能
Apr 09 PHP
php实现短信发送代码
Jul 05 PHP
php生成动态验证码gif图片
Oct 19 PHP
php+redis实现多台服务器内网存储session并读取示例
Jan 12 PHP
如何优雅的使用 laravel 的 validator验证方法
Nov 11 PHP
PHP利用递归函数实现无限级分类的方法
Mar 22 PHP
Laravel框架路由管理简单示例
May 07 PHP
java解析json方法总结
May 16 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
详解WordPress中添加友情链接的方法
2016/05/21 PHP
php排序算法实例分析
2016/10/17 PHP
PHP基于反射机制实现插件的可插拔设计详解
2016/11/10 PHP
PHP多进程通信-消息队列使用
2019/03/08 PHP
如何用js控制frame的隐藏或显示的解决办法
2013/03/20 Javascript
Flexigrid在IE下不显示数据的处理的解决方法
2013/10/24 Javascript
JavaScript中对象property的读取和写入方法介绍
2014/12/30 Javascript
nodejs URL模块操作URL相关方法介绍
2015/03/03 NodeJs
js仿苹果iwatch外观的计时器代码分享
2015/08/26 Javascript
Vue.js 2.0 和 React、Augular等其他前端框架大比拼
2016/10/08 Javascript
简单实现Bootstrap标签页
2020/08/09 Javascript
用JS实现根据当前时间随机生成流水号或者订单号
2018/05/31 Javascript
JavaScript设计模式之工厂模式简单实例教程
2018/07/03 Javascript
vue-router权限控制(简单方式)
2018/10/29 Javascript
[53:13]2014 DOTA2国际邀请赛中国区预选赛5.21 DT VS LGD-GAMING
2014/05/22 DOTA
Python中的两个内置模块介绍
2015/04/05 Python
Python递归函数实例讲解
2019/02/27 Python
Pandas聚合运算和分组运算的实现示例
2019/10/17 Python
Pytorch 的损失函数Loss function使用详解
2020/01/02 Python
pytorch模型存储的2种实现方法
2020/02/14 Python
python实现遍历文件夹图片并重命名
2020/03/23 Python
通过实例解析Python RPC实现原理及方法
2020/07/07 Python
HTML5新增的标签和属性归纳总结
2018/05/02 HTML / CSS
世界上最大的网络主机公司:1&1
2016/10/12 全球购物
JBL英国官网:JBL UK
2018/07/04 全球购物
Onzie官网:美国时尚瑜伽品牌
2019/08/21 全球购物
Footshop罗马尼亚:最好的运动鞋选择
2019/09/10 全球购物
Linux的文件类型
2016/07/05 面试题
学雷锋演讲稿
2014/03/04 职场文书
家居装修公司创业计划书范文
2014/03/20 职场文书
荷叶母亲教学反思
2014/04/30 职场文书
绿色家庭事迹材料
2014/05/01 职场文书
国旗下的讲话演讲稿
2014/05/08 职场文书
三峡大坝导游词
2015/01/31 职场文书
导游词之包公祠
2019/11/25 职场文书
spring boot项目application.properties文件存放及使用介绍
2021/06/30 Java/Android