【Paypal】即时付款通知IPN

article/2025/9/13 20:48:41

什么是即时付款通知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是否正常工作。


           

http://chatgpt.dhexx.cn/article/9iNCOUIC.shtml

相关文章

java集成paypal ipn响应问题

在集成paypal 测试ipn如果不回复会多次调用ipn 直到上限或者得到响应。 发现一个非常奇怪的问题代码中未返回响应码&#xff0c;但是paypal那边却显示响应成功&#xff1f; 求大神指点&#xff0c;是因为服务器接收成了吗&#xff1f;所以自动回复了200&#xff1f; spring …

paypal消息通知IPN

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

paypal资料

什么是即时付款通知IPN 当您收到新的付款交易或者已发生的付款交易的状态发生变化时&#xff0c;PayPal都将异步&#xff08;即不作为网站付款流程的一部分&#xff09; 发送付款详细数据到您所指定的URL&#xff0c;以便您了解买家付款的具体情况并做出相应的响应。这个过程我…

css 上下布局 flex,Css Flex布局

Flex布局是Css3中新加入的额外布局系统。 传统布局基于盒模型,依赖“display”、“position”、“float”属性,对于特殊布局非常不便。 因此2009年,W3C提出新的布局方案-Flex布局,但由于浏览器兼容问题,Flex布局并没有大范围铺开。 实现Flex布局的条件 1.必须有一个父级容…

html flex 上中下布局,flex 布局

FlexiableBox即是弹性盒,用来进行弹性布局,一般跟rem(rem伸缩布局(转))连起来用比较方便,flexbox负责处理页面布局,然后rem处理一些flex顾及不到的地方(rem伸缩布局主要处理尺寸的适配问题),布局还是要传统布局的。 布局的传统解决方案,基于盒状模型,依赖display属性 +p…

详细讲解flex布局

一、flex布局基本概念 在没有使用flex布局之前&#xff0c;常用布局有&#xff1a;流式布局&#xff0c;浮动布局&#xff0c;定位布局等等。这些布局的缺陷是子元素需要自己控制自己在父元素中的位置&#xff0c;还要注意父元素高度坍塌。 flex布局是一种布局模型&#xff0…

CSS常用布局二(flex布局)

flex布局 前言&#xff1a;flex是flexible box的缩写&#xff0c;译为“弹性布局”&#xff0c;用来为盒模型提供最大的灵活性&#xff0c;任何一个容器都可以指定为flex布局&#xff0c;只需要设置“display:flex"即可&#xff1b;行内元素可以通过设置”display:inline…

flex布局(详解)

目录 前言 一、何为Flex布局 二、基本概念 三、容器的属性 3.1 flex-direction属性 3.2 flex-wrap属性 3.3 flex-flow 3.4 justify-content属性 3.5 align-items属性 3.6 align-content属性 四、项目的属性 4.1 order属性 4.2 flex-grow属性 4.3 flex-shrink属性 …

Flex布局详解

Flex 布局详解 一、入门 1. flex 是什么&#xff1f; flex 是 Flexible Box 的缩写&#xff0c;就是弹性盒子布局的意思 2. 为什么我们需要 flex? 解决元素居中问题 自动弹性伸缩&#xff0c;合适适配不同大小的屏幕&#xff0c;和移动端 3.flex 常见术语 三个2 序号简…

SQL语句的解析过程

于最近需要做一些sql query性能提升的研究&#xff0c;因此研究了一下sql语句的解决过程。在园子里看了下&#xff0c;大家写了很多相关的文章&#xff0c;大家的侧重点各有不同。本文是我在看了各种资料后手机总结的&#xff0c;会详细的&#xff0c;一步一步地讲述一个sql语句…

SQL学习TASK06

section A 1.创建员工信息表&#xff1a; CREATE TABLE Employee (s_product_id char(4) NOT NULL, s_name VARCHAR(32) NOT NULL, s_salary INTEGER, s_department_id INTEGER); 创建部门信息表&#xff1a; CREATE TABLE department (d_id char(4) NOT NULL, d_name VARCHAR…

MySQL高级SQL语句

目录 一、常用查询 1、按关键字排序 1.1 前期准备 1.2 升序、降序列出数据 1.3 找出其中南京的数据并以分数降序列出 1.4 查询学生信息先按兴趣id降序排列&#xff0c;相同分数的&#xff0c;id也按降序排列 1.5 查询学生信息先按兴趣id降序排列&#xff0c;兴趣id相同的…

HANA 一些sql语句

函数&#xff01;&#xff01; 时间函数&#xff1a;DAYS_BETWEEN、ADD_DAYS、FORMAT、CURRENT_DATE、YEAR、MONTH等。 字符串函数&#xff1a;CONCAT、TRIM、LENGTH、REPLACE、STRING_AGG、SUBSTRING等&#xff1b; 数字函数&#xff1a; ROUND、FLOOR、RAND、ABS等 视图&…

SQL语句的封装

本篇供个人学习使用&#xff0c;有问题欢迎讨论 封装SQL语句 ​ 在封装SQL语句之前&#xff0c;我们得知道什么是DAO封装与实体类以及JDBC工具类的封装与连接数据库的具体流程。 ​ 关于JDBC工具类的封装可以查看我的另一篇博文 JDBC工具类的封装 ​ 想了解具体的连接数据库…

mysql sql delete语句_SQL Delete语句

在本教程中,您将学习如何使用SQL DELETE语句删除表中的一行或多行。 1. SQL DELETE语句简介 要从表中删除一行或多行,请使用DELETE语句。 DELETE语句的一般语法如下: DELETE FROM table_name WHERE condition; 首先,提供要删除行的表名称(table_name)。 其次,在WHERE子句中…

MySQL入门(5)——基于datagrip的SQL语句学习

目录 一、什么是SQL二、SQL约束1、主键约束&#xff08;1&#xff09;添加主键约束方式一&#xff1a;创建表时&#xff0c;在字段描述处&#xff0c;声明指定字段为主键方式二&#xff1a;创建表时&#xff0c;在constraint约束区域&#xff0c;声明指定字段为主键方式三&…

MySQL数据库增删改查及聚合查询SQL语句学习汇总

目录 数据库增删改查SQL语句 MySQL数据库指令 1.查询数据库 2.创建数据库 3.删除数据库 4.选择数据库 创建表table 查看所有表 创建表 查看指定表的结构 删除表 数据库命令进行注释 增删改查&#xff08;CRUD&#xff09;详细说明 增加 SQL库提供了关于时间的…

第一部分_SQL查询语句学习

第一部分 SQL查询语句的学习 单表查询 查询订购日期在1996年7月1日至1996年7月15日之间的订单的订购日期、订单ID、客户ID和雇员ID等字段的值 SELECT 订购日期,订单ID,客户ID,雇员ID FROM 订单 WHERE 订购日期 BETWEEN 1996-07-01 AND 1996-07-15 查询供应商的ID、公司名称、…

了解RS-232、RS-485串口通信协议

文章目录 一、串口通信协议1、RS-232标准2、RS-485标准3、RS232、485电平与TTL电平的区别4、"USB/TTL转232"模块工作原理1、工作流程2、驱动 2、总结3、参考资料 一、串口通信协议 对于通信协议&#xff0c;我们可以分为两个层面进行理解&#xff0c;分别是物理层和…

RS485通讯协议

https://blog.csdn.net/qq_29344757/article/details/71516037 1. 硬件层协议 通讯协议主要是实现两个设备之间的数据交换功能&#xff0c;通讯协议分硬件层协议和软件层协议。硬件层协议决定数据如何传输问题&#xff0c;比如要在设备1向设备2发送0x63&#xff0c;0x63的二进…