paypal IPN返回

article/2025/9/13 20:53:51

1.设定返回的地址

目标:登录paypal-->用户信息-->我的销售工具-->即时付款通知-->编辑并填写url

 

填写的URL必须为公网的,不能为局域网,要不就无法接收到paypal发送的信息

 


 2.编写IPN.jsp (此代码为官方代码)

//从 PayPal 出读取 POST 信息同时添加变量„cmd‟Enumeration en = request.getParameterNames();String str = "cmd=_notify-validate";while (en.hasMoreElements()) {String paramName = (String) en.nextElement();String paramValue = request.getParameter(paramName);str = str + "&" + paramName + "="+ URLEncoder.encode(paramValue, "utf-8");//此处的编码一定要和自己的网站编码一致,不然会出现乱码,paypal回复的通知为‘INVALID’}System.out.println("paypal传递过来的交易信息:" + str);//建议在此将接受到的信息 str 记录到日志文件中以确认是否收到 IPN 信息//将信息 POST 回给 PayPal 进行验证//设置 HTTP 的头信息//在 Sandbox 情况下,设置:URL u = new URL("https://www.sandbox.paypal.com/cgi-bin/webscr");//正式环境// 		URL u = new URL("https://www.paypal.com/cgi-bin/webscr");URLConnection uc = u.openConnection();uc.setDoOutput(true);uc.setRequestProperty("Content-Type","application/x-www-form-urlencoded");PrintWriter pw = new PrintWriter(uc.getOutputStream());pw.println(str);pw.close();//接受 PayPal 对 IPN 回发的回复信息BufferedReader in = new BufferedReader(new InputStreamReader(uc.getInputStream()));String res = in.readLine();in.close();//将 POST 信息分配给本地变量,可以根据您的需要添加//该付款明细所有变量可参考://https://www.paypal.com/IntegrationCenter/ic_ipn-pdt-variable-reference.htmlString itemName = request.getParameter("item_name");//商品名String itemNumber = request.getParameter("item_number");//购买数量String paymentStatus = request.getParameter("payment_status");//交易状态String paymentDate = request.getParameter("payment_date");//交易时间String paymentAmount = request.getParameter("mc_gross");//交易钱数String paymentCurrency = request.getParameter("mc_currency");//货币种类String txnId = request.getParameter("txn_id");//交易idString receiverEmail = request.getParameter("receiver_email");//收款人emailString payerEmail = request.getParameter("payer_email");//付款人emailif (res == null || res == "")res = "0";//…//获取 PayPal 对回发信息的回复信息,判断刚才的通知是否为 PayPal 发出的if (res.equals("VERIFIED")) {//检查付款状态//检查 txn_id 是否已经处理过//检查 receiver_email 是否是您的 PayPal 账户中的 EMAIL 地址//检查付款金额和货币单位是否正确//处理其他数据,包括写数据库} else if (res.equals("INVALID")) {//非法信息,可以将此记录到您的日志文件中以备调查} else {//处理其他错误}

 注意:paypal回复的通知为'VERIFIED',也不一定代表此次交易成功,要判断是否交易成功通过下面语句,判断交易状态是否成功。

String paymentStatus = request.getParameter("payment_status");//交易状态 Completed 代表交易成功

 


http://chatgpt.dhexx.cn/article/ohxb9PV5.shtml

相关文章

沙箱环境和正式环境【PayPal接入(java)】【IPN通知问题】项目实战干货总结记录!

如果你是第一次接入paypal,相信本文的每一个地方都会对你有帮助的!!因为这篇文章都是一个一个的坑踩出来的! 一、接入paypal环境准备: 1、注册paypal账号 https://www.paypal.com 注册“商家账号”,完成…

php paypal ipn,PHP 开发详解:PayPal Instant Payment Notification (IPN)

上次在 PHP 开发详解:PayPal Payment Data Transfer (PDT) 一文中介绍了网站集成 Paypal 付款功能并如何将付款数据返回,能够使得用户在付款完成后继续回到网站上来,并将付款信息告知用户。但是 PayPal Payment Data Transfer 这样的数据返回…

【Paypal】即时付款通知IPN

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

java集成paypal ipn响应问题

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

paypal消息通知IPN

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

paypal资料

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

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布局之前,常用布局有:流式布局,浮动布局,定位布局等等。这些布局的缺陷是子元素需要自己控制自己在父元素中的位置,还要注意父元素高度坍塌。 flex布局是一种布局模型&#xff0…

CSS常用布局二(flex布局)

flex布局 前言:flex是flexible box的缩写,译为“弹性布局”,用来为盒模型提供最大的灵活性,任何一个容器都可以指定为flex布局,只需要设置“display:flex"即可;行内元素可以通过设置”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 是什么? flex 是 Flexible Box 的缩写,就是弹性盒子布局的意思 2. 为什么我们需要 flex? 解决元素居中问题 自动弹性伸缩,合适适配不同大小的屏幕,和移动端 3.flex 常见术语 三个2 序号简…

SQL语句的解析过程

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

SQL学习TASK06

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

MySQL高级SQL语句

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

HANA 一些sql语句

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

SQL语句的封装

本篇供个人学习使用,有问题欢迎讨论 封装SQL语句 ​ 在封装SQL语句之前,我们得知道什么是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、主键约束(1)添加主键约束方式一:创建表时,在字段描述处,声明指定字段为主键方式二:创建表时,在constraint约束区域,声明指定字段为主键方式三&…

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

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