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 date函数参数详解
Nov 27 PHP
php简单静态页生成过程
Mar 27 PHP
PHP 判断常量,变量和函数是否存在
Apr 26 PHP
Sorting Array Values in PHP(数组排序)
Sep 15 PHP
深入php之规范编程命名小结
May 15 PHP
ThinkPHP验证码使用简明教程
Mar 05 PHP
PHP错误Parse error: syntax error, unexpected end of file in test.php on line 12解决方法
Jun 23 PHP
PHP5.3以上版本安装ZendOptimizer扩展
Mar 27 PHP
php抓取网站图片并保存的实现方法
Oct 29 PHP
2017年最好用的9个php开发工具推荐(超好用)
Oct 23 PHP
PHP随机数函数rand()与mt_rand()的讲解
Mar 25 PHP
php随机生成验证码,php随机生成数字,php随机生成数字加字母!
Apr 01 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
Windows下的PHP安装文件线程安全和非线程安全的区别
2014/04/23 PHP
浅谈thinkphp的实例化模型
2015/01/04 PHP
常见的5个PHP编码小陋习以及优化实例讲解
2021/02/27 PHP
Jquery Ajax学习实例5 向WebService发出请求,返回泛型集合数据的异步调用
2010/03/17 Javascript
JavaScript中判断函数是new还是()调用的区别说明
2011/04/07 Javascript
基于mootools 1.3框架下的图片滑动效果代码
2011/04/22 Javascript
在Javascript中 声明时用"var"与不用"var"的区别
2013/04/15 Javascript
js实现的切换面板实例代码
2013/06/17 Javascript
json字符串之间的相互转换示例代码
2014/08/21 Javascript
浅谈轻量级js模板引擎simplite
2015/02/13 Javascript
javascript实现随时变化着的背景颜色
2015/04/02 Javascript
用JS实现图片轮播效果代码(一)
2016/06/26 Javascript
js当前页面登录注册框,固定div,底层阴影的实例代码
2016/10/04 Javascript
JQuery学习总结【二】
2016/12/01 Javascript
jquery获取元素到屏幕四周可视距离的方法
2018/09/05 jQuery
ES6数组与对象的解构赋值详解
2019/06/14 Javascript
解决ant Design中this.props.form.validateFields未执行的问题
2020/10/27 Javascript
Python的Flask框架中@app.route的用法教程
2015/03/31 Python
Windows下为Python安装Matplotlib模块
2015/11/06 Python
Python批量修改文本文件内容的方法
2016/04/29 Python
Python爬虫爬取美剧网站的实现代码
2016/09/03 Python
python模拟事件触发机制详解
2018/01/19 Python
Django后台获取前端post上传的文件方法
2018/05/28 Python
详解Python下Flask-ApScheduler快速指南
2018/11/04 Python
python redis 删除key脚本的实例
2019/02/19 Python
Python 计算任意两向量之间的夹角方法
2019/07/05 Python
Python图像读写方法对比
2020/11/16 Python
Python实现曲线拟合的最小二乘法
2021/02/19 Python
草莓巧克力:Shari’s Berries
2017/02/07 全球购物
M.M.LaFleur官网:美国职业女装品牌
2020/10/27 全球购物
高中生职业规划范文
2014/03/09 职场文书
元宵节主持词
2014/03/25 职场文书
条幅标语大全
2014/06/20 职场文书
三月雷锋月活动总结
2014/07/03 职场文书
答谢酒会主持词
2015/07/02 职场文书
教你如何使用Python开发一个钉钉群应答机器人
2021/06/21 Python