什么是即时付款通知IPN 
当您收到新的付款交易或者已发生的付款交易的状态发生变化时,PayPal都将异步(即不作为网站付款流程的一部分) 发送付款详细数据到您所指定的URL,以便您了解买家付款的具体情况并做出相应的响应。这个过程我们称作即时付款通知(简称 IPN)。示意图如下:

图 1 IPN通知示意图

•  客户点击“付款”按钮向您的账户付款; 
•  PayPal接受到客户的付款后,向您的服务器指定的URL通过POST方式发送IPN;
•  在您的服务器收到IPN之后,您必须将收到的POST信息对原样返回给PayPal进行验证,PayPal通过此方法帮您防范欺骗或“中间人”攻击;(对IPN信息的验证过程我们称之为通知确认); 
•  PayPal返回验证信息,通过验证为VERIFIED,不通过则为INVALD; 
•  根据验证信息处理付款明细;

:每次付款您可能收到多个IPN信息,一般来说直到收到IPN信息中的付款状态为Completed为止。

IPN数据包含了整个付款过程的详细信息,通过获取并分析它您可以:
•  自定义网站对客户购物进行实时回复:您可以以email或其他方式通知客户付款的状态;
•  自动履行相关操作:当收到IPN数据并确认付款状态已经完成后,您就可以立刻启动向买家发货的流程,也可以为买家进行虚拟货币的充值或者以某种方式将虚拟商品的卡号和密码发送给买家; 
•  记录交易信息到您的数据库中;

如何启用IPN?
启用IPN有两种方法: 
一种是在您的PayPal账户里进行全局设置,设置方法如下:
•  登录到您的PayPal帐户,点击“Profile”;
•  点击右边列表栏中“Instant payment Notification Preferences”打开即时付款通知习惯设定页面; 
•  按“编辑”按钮后打开如6-1所示页面; 
•  输入用于接收IPN的通告URL并在选中图中所示的勾选框;

图 6-1 即时付款通知习惯设定

另一种是在每笔交易的付款按钮中通过定义变量notify_url来进行设定,示例如下:
<input type="hidden" name="notify_url" value="http://www.yoursite.com/ipn.script">


•  上面的通告URL和notify_url就是PayPal向您发送IPN数据的URL;这个URL是您的后台处理程序,只用于处理从 PayPal处接受到的IPN信息,您可以将这些信息写入数据库,也可以写文件,但是不能通过浏览器方式显示给您的客户看; 
•  如果您希望在不同的URL接收IPN(例如:在您需要区分对您各个不同网站的付款时),请使用变量notify_url 。对于每笔付款,PayPal会保存特定付款的notify_url的值,对该笔付款的任何后续更新都将发送到此notify_url; 
•  如果您在付款按钮中没有设定变量notify_url,则将使用您用户信息中设置的URL;否则它将覆盖您用户信息中设置的URL而采用变量notify_url中设置的值;

变量列表
完整的IPN变量列表,请访问IPN&PDT变量列表。

代码生成器
PayPal-tech.com提供了一个IPN的代码生成器,你可以根据你的编程语言选择。

其他资源
订单管理集成指南(PDF,2.7MB)
PayPal开发者论坛中IPN部分。


关于验证

bool VerifyIPN(){string strFormValues = Request.Form.ToString();string strNewValue;string strResponse;string serverURL = "https://www.sandbox.paypal.com/cgi-bin/webscr";HttpWebRequest req = (HttpWebRequest)WebRequest.Create(serverURL);req.Method = "POST";req.ContentType = "application/x-www-form-urlencoded";strNewValue = strFormValues + "&cmd=_notify-validate";req.ContentLength = strNewValue.Length;StreamWriter stOut = new StreamWriter(req.GetRequestStream(), System.Text.Encoding.ASCII);stOut.Write(strNewValue);stOut.Close();StreamReader stIn = new StreamReader(req.GetResponse().GetResponseStream());strResponse = stIn.ReadToEnd();stIn.Close();return strResponse == "VERIFIED";}

这段代码的作用是判断IPN信息是否来自Pyapal,如果不进行判断,那么恶意用户完全可以模拟一个信息post到你的网站上,让你认为订单已经完成支付,所以,必须首先对接受到的信息进行验证。

代码的基本原理,serverURL定义了验证地址,sandbox为:https://www.sandbox.paypal.com/cgi-bin/webscr,Paypal.com就是https://www.paypal.com/cgi-bin/webscr。
将paypal发送过来的所有信息加上一个&cmd=_notify-validate参数,表示对这个信息进行验证,全部发送回paypal验证,如果信息确实存在,则返回VERIFIED字符串。
验证成功后,就可以用如下形式获得交易信息:

string ppTx = Request.Form["txn_id"].ToString();string ppStatus = Request.Form["payment_status"].ToString();string ppDate = Request.Form["payment_date"].ToString();string ppItem = Request.Form["item_name"].ToString();string ppPrice = Request.Form["mc_gross"].ToString();

这样,就实现了将支付信息传回网站的功能。注:当交易状态发生改变时,paypal也会返回一个ipn,比如完成支付,退款等等。

介绍一下sandbox中IPN测试工具,登陆sandbox主帐号,就是你在sandbox上注册的那个,不是那些卖家/买家帐号。
选择Test Tools -> Instant Payment Notification (IPN) Simulator:
输入你的ipn接受文件地址,选择ipn信息的方式,然后会让你填具体信息内容,再点击Send IPN,就能模拟一个ipn到你网站的页面,可以用来测试IPN是否正常工作。

【Paypal】即时付款通知IPN相关推荐

  1. paypal付款通知IPN

    什么是即时付款通知IPN 当您收到新的付款交易或者已发生的付款交易的状态发生变化时,PayPal都将异步(即不作为网站付款流程的一部分) 发送付款详细数据到您所指定的URL,以便您了解买家付款的具体情 ...

  2. PayPal开发之IPN的使用

    PayPal 快速.安全而又方便,是跨國交易的首選在線付款方式.現在PayPal可以和國內大部分信用卡關聯,可以實現國人的跨國交易收支. 申請PayPal註冊網址:https://www.paypal ...

  3. ASP.NET集成PayPal(使用IPN)

    IPN:即时付款通知(Instant Payment Notify 简称IPN) PayPal设置说明: 1.注册测试帐号: https://cms.paypal.com/us/cgi-bin/?cm ...

  4. paypal消息通知IPN

    paypal支付成功时会实时的把支付交易信息返回给我们,java会返回一个payment对象,里面有交易的信息包含付款人,订单费用,订单的收货地址,收款人,交易号等信息.我们拿到了这个payment就 ...

  5. Paypal学习 2 -- IPN (Instant Payment Notification)

    在上一片文章中,笔者介绍了buy now 按钮的内容,由于buy now按钮将页面直接重定向到了paypal的页面,也就是说已经脱离了我们自己的系统,我们怎样才能知道用户是否付款成功了呢?答案是Pay ...

  6. java对接PayPal支付(ipn中文乱码解决)

    IPN验证有中文的时候会出现乱码,是由于encoding设置导致的,请通过以下步骤将encoding设置改为UTF-8应该就能解决: 1)登录您的PayPal账号后打开这个链接进入设置页面: http ...

  7. php 即时到账,paypal即时到账php实现代码

    http://paypal.ebay.cn/integrationcenter/list__resource_2.html 中文php开发简介:http://www.paypal-china.org/ ...

  8. Paypal国际版网站集成简易教程

    转自:http://www.chenchen.org/article/paypal/4.htm Paypal国际版网站集成简易教程(一):序言 前段时间接到一个外贸网站的项目,集成paypal支付接口 ...

  9. Paypal国际版网站集成

    前段时间接到一个外贸网站的项目,集成paypal支付接口的,对象是海外用户,全部用US的信用卡结算.所以只能使用paypal国际版,还好paypal上的资料非常齐全,而 且还提供了开发者沙盒(sand ...

最新文章

  1. 转: 基于elk 实现nginx日志收集与数据分析
  2. 中断方式下进行串口通讯的正确方法
  3. 了解TCP协议,IP协议、ICMP协议和ARP协议(TCP报文,TCP的分成管理,TCP与UDP,TCP的三次握手四次挥手原理)
  4. DM6446开发攻略:V4L2视频驱动和应用分析
  5. mysql怎么制作柱状图_从数据库中取出最近三十天的数据并生成柱状图
  6. c#中将集合写入文本_在C#中将记录插入MySQL数据库
  7. HTML+CSS+JS实现 ❤️酷炫彩虹旋转隧道特效❤️
  8. 魔兽国服修改服务器地址,魔兽国服退役服务器上架暴雪官方商店
  9. 方差(Var),样本方差(SVar),标准差(SD),均方误差(MSE),均方根误差(RMSE),平均绝对误差(MAE)
  10. 【JS-05】javascript检测ie版本
  11. lagrange量中的u和v的来历
  12. web留言板整蛊网站愚人节
  13. tyvector在matlab中代表,MATLAB曲线绘制
  14. python实现自动打卡_python实现腾讯文档自动打卡教程
  15. 浅谈海明码,码距及其计算问题(看过的都明白了)
  16. MathType 快捷键隐藏章节符
  17. 天勤python_天勤量化策略库:网格交易策略(难度:中级)
  18. Python 自学笔记----1.1实例与封装
  19. GB编码,汉字在编译器中数值
  20. 量子物理史话 第三章 火流星

热门文章

  1. 通讯录管理系统-C++课程设计(试错版)
  2. 电销团队外呼管理难,外呼系统录音功能解决无监管现状
  3. YTU 2404: C语言习题 求sinh(x)
  4. 关于arrch64环境下bitnami/harbor-portal的安装部署
  5. 实验室师哥阿里巴巴面试总结----菜冬瓜
  6. 数据库 水电费缴费系统
  7. 区块链人才有多吃香?这些城市,为了抢人各显神通
  8. python卡尔曼滤波融合_数据融合之卡尔曼滤波示例
  9. 文件服务器升级方案,如何进行SOLIDWORKS PDM文件服务器的升级
  10. Java设计模式七大原则-开闭原则