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打造属于自己的MVC框架
Mar 07 PHP
摘自织梦CMS中的图片处理类
Aug 08 PHP
php 利用socket发送HTTP请求(GET,POST)
Aug 24 PHP
PHP封装的字符串加密解密函数
Dec 18 PHP
初识ThinkPHP控制器
Apr 07 PHP
简单的自定义php模板引擎
Aug 26 PHP
PHP实现Google plus的好友拖拽分组效果
Oct 21 PHP
php魔法函数与魔法常量使用介绍
Jul 23 PHP
PHP实现的二分查找算法实例分析
Dec 19 PHP
lnmp安装多版本PHP共存的方法详解
Aug 02 PHP
PHP htmlspecialchars_decode()函数用法讲解
Mar 01 PHP
Thinkphp5框架中引入Markdown编辑器操作示例
Jun 03 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批量删除数据
2007/01/18 PHP
PHP检查网站是否宕机的方法示例
2017/07/24 PHP
PHP simplexml_load_file()函数讲解
2019/02/03 PHP
window.dialogArguments 使用说明
2011/04/11 Javascript
javascript for循环从入门到偏门(效率优化+奇特用法)
2012/08/01 Javascript
跟我学Nodejs(二)--- Node.js事件模块
2014/05/21 NodeJs
js实现圆盘记速表
2015/08/03 Javascript
jquery获取select选中值的方法分析
2015/12/22 Javascript
页面向下滚动ajax获取数据的实现方法(兼容手机)
2016/05/24 Javascript
Javascript必知必会(四)js类型转换
2016/06/08 Javascript
AngularJS ng-style中使用filter
2016/09/21 Javascript
JS自动生成动态HTML验证码页面
2017/06/14 Javascript
javascript 玩转Date对象(实例讲解)
2017/07/11 Javascript
js实现图片上传预览原理分析
2017/07/13 Javascript
JS实现图片放大镜插件详解
2017/11/06 Javascript
在vscode里使用.vue代码模板的方法
2018/04/28 Javascript
Vue中实现权限控制的方法示例
2019/06/07 Javascript
在Vue中用canvas实现二维码和图片合成海报的方法
2019/06/10 Javascript
详解vue beforeRouteEnter 异步获取数据给实例问题
2019/08/09 Javascript
vue 开发企业微信整合案例分析
2019/12/02 Javascript
构建Python包的五个简单准则简介
2015/06/15 Python
在arcgis使用python脚本进行字段计算时是如何解决中文问题的
2015/10/18 Python
Python实现的爬取百度文库功能示例
2019/02/16 Python
python和mysql交互操作实例详解【基于pymysql库】
2019/06/04 Python
详解Python 中sys.stdin.readline()的用法
2019/09/12 Python
Python使用re模块验证危险字符
2020/05/21 Python
python不同版本的_new_不同点总结
2020/12/09 Python
澳大利亚药房在线:ThePharmacy
2017/10/04 全球购物
前台文员岗位职责
2013/12/28 职场文书
《小猪家的桃花树》教学反思
2014/04/11 职场文书
《池塘边的叫声》教学反思
2014/04/12 职场文书
2014个人年度工作总结
2014/12/15 职场文书
2015年党建工作总结
2015/03/30 职场文书
交通事故调解协议书
2015/05/20 职场文书
培训讲师开场白
2015/06/01 职场文书
vue @click.native 绑定原生点击事件
2022/04/22 Vue.js