Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Paypal中的IPN与PDT

Paypal中的IPN与PDT
EN

Stack Overflow用户
提问于 2010-05-14 18:50:53
回答 3查看 29.3K关注 0票数 100

我在选择PayPal的即时支付通知(IPN)和支付数据传输(PDT)时遇到了一些麻烦。

基本上,用户在我的网站上购买一次性产品,在PayPal上付款,然后返回我的网站。我知道IPN是如何工作的,但我现在看到,我也许能够更容易地触发PDT成功购买后发生的各种操作,因为数据会立即返回(而不是需要单独的侦听器)。

然而,PayPal的PDT文档中包含这样一句隐秘的话:"PDT不打算用于信用卡或Express Checkout交易。“...但我在这个话题上找不到任何进一步的东西。

  1. 信用卡真的不能和PDT一起使用吗?我想要的不只是一句话。
  2. 是否意味着用户必须拥有/创建PayPal帐户才能进行支付?
  3. 是否意味着如果我想允许用户使用其PayPal帐户和/或直接使用信用卡进行支付,我必须实现IPN?

任何经历过这一切的人都能善意地解释一下吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-05-14 18:59:43

PDT和IPN的API是相似的。主要区别在于您何时收到通知。出于这个原因,我建议同时实现这两种方法。

  • 使用PDT,您可以立即收到通知,并可以执行所需的任何其他处理,并向用户显示确认页面。
  • 使用IPN,即使用户的计算机在向您发送PDT之前崩溃,您也会收到付款通知。

实现这两种方式,两全其美。但如果你只做一个,IPN就是可靠的。

有一点需要注意:如果你同时实现了这两种方式,那么你的付款就有可能被处理两次。请注意,确保不会发生这种情况。我编写的应用程序处理PDT和IPN几乎相同(后端部分是相同的),并且该代码在数据库中获取每个web用户的锁,因此如果同一用户多次尝试提交完全相同的付款,则只能处理一次。处理后,该过程的结果将被重用于任何后续的处理尝试。

编辑还有一件事: IPN比PDT承载更多信息。你可以从IPN收到很多不同的消息,比如退款通知等,因此你真的应该实现它。

贝宝的PDT系统向使用PayPal Payments Standard的商家网站发送订单确认,并让他们验证这些信息。然后,这些站点可以在本地的“订单确认”页面中显示这些数据。

什么时候使用PDT?

IPN提供了上述相同的功能。那么,什么时候应该选择PDT而不是IPN呢?

使用PDT,当客户完成付款时,您的网站会立即得到通知。但是,使用IPN时,客户完成付款的时间与您的站点收到此事件通知的时间之间存在重大延迟。

因此,如果您的网站包含需要立即付款通知的功能,请使用PDT。

例如,考虑一家数字音乐商店。有了PDT,这家商店可以让顾客立即下载他们购买的商品,因为PDT会立即发送订单确认。使用IPN,这样的即时订单履行是不可能的。

IPN的优势

PDT有一个主要的弱点:它只发送一次订单确认。因此,当PDT发送确认消息时,您的站点必须处于运行状态;否则,它永远不会收到该消息。

相比之下,IPN实际上保证了订单确认的送达,因为IPN会重新发送确认,直到您的站点确认收到为止。因此,PayPal建议您实施IPN而不是PDT。

IPN的另一个优点是它发送多种类型的通知,而PDT只发送订单确认。因此,使用IPN,您的站点可以接收退款通知以及订单确认。注:如果您的站点必须立即收到付款通知,您可以同时实施IPN和PDT。但是,如果您这样做,您的网站将收到两个订单确认每笔交易。因此,您必须小心地仅对给定确认消息的一个副本执行操作(例如,发送产品)。

Documentation Here

票数 114
EN

Stack Overflow用户

发布于 2015-09-16 09:42:36

回复1。PDT旨在用于网站支付功能的自动返回。自动退货重定向到PDT网站后,支付给卖家。不幸的是,这是不可能使用该功能与PayPal帐户可选-用于启用信用卡支付。这里是来自PayPal的注释:“如果你已经打开了Auto Return,并且已经选择为新用户打开PayPal账户可选,那么新用户将不会被自动引导回你的网站,但会被给予返回的选项。”用户将可以选择返回您的站点(PDT步骤)或留在PayPal站点上。总而言之,当用信用卡付款时,如果用户不点击“返回商店链接”,用户可以跳过PDT步骤。

回复2.你想要允许什么支付选项,这取决于你。如果你想在不使用PayPal账户的情况下付款,你可以启用Account Optional。如果要仅允许具有PayPal帐户用户,请禁用该功能。可能会有更多的选择。

Re 3.对于您的情况,需要在购买成功后触发操作。建议的方法是实现IPN。PDT并不适用于所有情况,也不能保证消息传递。这里是有关PDT vs IPN主题文档的链接。

票数 2
EN

Stack Overflow用户

发布于 2018-07-26 23:02:09

这是一个老问题,但我的简单答案是-为什么不同时使用PDT和IPN?它们可以很好地处理信用卡交易。

PDT可以为您的网站提供即时的交易状态,您可以在这里快速查看支付成功或失败的状态,并为用户提供相应的消息。

同时,您可以在后台等待IPN的全面验证。收到后,您可以使用此信息进一步更新您的数据库并处理订单。

你可以遵循这个分步指南,我发现它非常清晰和有帮助-它在2018年仍然有效。

https://www.codexworld.com/paypal-standard-payment-gateway-integration-php/

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2836779

复制
相关文章
如何避免微服务设计中的耦合问题
译自:How to Avoid Coupling in Microservices Design
charlieroro
2021/03/02
1.7K0
如何避免微服务设计中的耦合问题
CA1005:避免泛型类型的参数过多
泛型类型包含的类型参数越多,越难以知道并记住每个类型参数各代表什么。 它通常有一个类型参数,如在 List<T> 中,而在某些情况下有两个类型参数,如在 Dictionary<TKey, TValue> 中。 如果存在两个以上的类型参数,则大多数用户都会感到过于困难(例如 C# 中的 TooManyTypeParameters<T, K, V> 或 Visual Basic 中的 TooManyTypeParameters(Of T, K, V))。
用户4268038
2022/01/09
1.1K0
如何解决代码中 if…else 过多的问题?
if...else 是所有高级编程语言都有的必备功能。但现实中的代码往往存在着过多的 if...else。虽然 if...else 是必须的,但滥用 if...else 会对代码的可读性、可维护性造成很大伤害,进而危害到整个软件系统。现在软件开发领域出现了很多新技术、新概念,但 if...else 这种基本的程序形式并没有发生太大变化。使用好 if...else 不仅对于现在,而且对于将来,都是十分有意义的。今天我们就来看看如何“干掉”代码中的 if...else,还代码以清爽。
杰哥的IT之旅
2020/06/18
2.2K0
如何解决代码中if…else 过多的问题
if...else 是所有高级编程语言都有的必备功能。但现实中的代码往往存在着过多的 if...else。虽然 if...else 是必须的,但滥用 if...else 会对代码的可读性、可维护性造成很大伤害,进而危害到整个软件系统。现在软件开发领域出现了很多新技术、新概念,但 if...else 这种基本的程序形式并没有发生太大变化。使用好 if...else 不仅对于现在,而且对于将来,都是十分有意义的。今天我们就来看看如何“干掉”代码中的 if...else,还代码以清爽。
java架构师
2019/03/20
3K0
避免在 JS 中过多使用 IF 语句优化技巧
最近在重构代码时,我发现早期的代码使用太多的 if 语句,其程度是我从未见过的。这就是为什么我认为分享这些简单的技巧是非常重要的,这些技巧可以帮助我们避免过多的使用 if 语句。
前端小智@大迁世界
2020/10/26
2.3K0
python避免if-else过多的办法
方法一:来自http://biancheng.dnbcw.net/python/417264.html
py3study
2020/01/06
1.7K0
sparksql udf自定义函数中参数过多问题的解决
在进行spark sql数据库操作中,常常需要一些spark系统本身不支持的函数,如获取某一列值中的字符串。 如要获取 “aaaakkkkk”中的第4-第8个字符。 针对这种需求,只有设置UDF来实现了。 如 val fun:((String,Int,Int) => String) = (args:String, k1:Int, k2:Int) => { args.substr(k1,k2)}  val sqlfunc = udf(fun) df.withColumn("column22", sqlfunc
sparkexpert
2018/01/09
1.8K0
如何在 ClickHouse 中避免深度分页问题
在日常的业务场景中,我们经常会遇到查询 TOP N 的需求。在 ClickHouse 中,一种常见的实现 TOP N 的 SQL 模板如下所示:
Nauu
2020/05/29
8.8K1
Android开发笔记(一百七十九)避免方法数过多的问题
一个大规模的App工程,往往引入了数量繁多的第三方开发库,其中既有官方的Jetpack库,也有第三方厂商的开源包。有时候运行这种App会报错“Cannot fit requested classes in a single dex file (# methods: 65894 > 65536)”,意思是App内部引用的方法数量超过了65536个,导致App异常退出。 原来Android的每个App代码都放在一个dex文件中,系统会把内部方法的索引保存在一个链表结构里,由于这个链表的长度变量是short类型(short类型的数字占两个字节共16位),使得链表的最大长度不能超过65536(2的16次方),因此App方法数超过65536的话,链表索引溢出就报错了。为了解决方法数过多的问题,Android推出了名叫MultiDex的解决方案,也就是在打包时把应用分成多个dex文件,每个dex的方法数量均不超过65536个,由此规避了方法数过多的限制。 若想让App工程支持MultiDex,需要对其略加改造,具体改造步骤说明如下。 首先要修改模块的build.gradle文件,往dependencies节点添加下面一行配置,表示导入指定版本的MultiDex库:
aqi00
2022/03/09
3990
避免 proxysql 跟后端建立过多连接的方法
原文地址: https://www.percona.com/blog/2019/09/27/multiplexing-mux-in-proxysql/
保持热爱奔赴山海
2019/11/21
1.3K0
如何避免你的问题烂尾
本节主要介绍我在工作中遇到了什么问题,遇到问题后我们如何去解决的思考过程,同时下文结合了《提问的智慧》(https://www.cnblogs.com/guyk/p/11000432.html)和个人工作经历整理来介绍“如何避免你的问题烂尾”,如果你在阅读文章过程中有更好的答案或建议欢迎给我留言,我会把好的解决方案(保留原作者)更新到我的文档中。 本文主要以云计算服务提供商“腾讯云”为例,帮助用户如何问高质量的问题,并从问问题的过程中收获更多的知识来提升自己。
研究僧
2020/06/07
2.2K0
解决MySQL中Sleep连接过多的问题
有时候你在mysql中运行SHOW PROCESSLIST;后会发现数据库中有很多这样的进程:
老高的技术博客
2022/12/28
2.6K0
解决MySQL中Sleep连接过多的问题
这些优化技巧可以避免我们在 JS 中过多的使用 IF 语句
最近在重构代码时,我发现早期的代码使用太多的 if 语句,其程度是我从未见过的。这就是为什么我认为分享这些简单的技巧是非常重要的,这些技巧可以帮助我们避免过多的使用 if 语句。
前端小智@大迁世界
2020/05/11
3.3K0
如何避免问渣问题?
其实这个问题已经被无数的人列举过、讨论过、吐槽过。但似乎很多人,特别是初学者/职业的入门者总是在问渣问题,而且自我感觉良好。如果非得要在大学加一门课的话,我特别希望就是“如何避免问渣问题“。并且特别希望它成为必修课之一。 当然,有些人问问题其实并不是在问问题,而可能是在讽刺、挖坑(知乎里特别流行)或者秀逼格。我不是很擅长这些,所以本文不在这些领域班门弄斧。 避免问愚蠢的问题 在提问之前,思考下这个问题是不是非常的愚蠢。尽管所有人(包括我)在内都愚蠢过,并且每个人也并不是会通晓所有领域。但是问的问题过度弱智,
大宽宽
2018/05/14
1.5K2
如何避免 Java 中的“NullPointerException”
NullPointerException (NPE) 是 Java 中最常见的异常。此异常的原因是已知的,但在大多数情况下,开发人员更愿意忽略它并且不采取任何措施。我个人认为这种行为的原因如下:
终码一生
2022/04/15
3K0
如何避免 Java 中的“NullPointerException”
API如何设计
在之前《应对变化》[1]中提到模块之间合的策略:缩小依赖范围,API是两个模块间唯一的联结点
码农戏码
2021/07/29
5570
如何设计 API?
在前后端分离的设计中,不管使用什么语言,后端都需要提供 WebAPI 给前端使用。如果是一个平台级的产品,还有可能需要将平台的公共 API 提供给第三方系统使用,这些都要考虑到 API 的设计。
oec2003
2023/10/25
2450
如何设计 API?
Kotlin 是如何避免空指针问题的
在谈Kotlin的优势的时候,大家都会想到空指针安全这一点,那么Kotlin又是如何避免这些问题的呢?下面从Kotlin的一些语法规则上给出介绍。 可空类型 默认声明的变量是不能为 null 的,如果
xiangzhihong
2018/02/06
2.3K0
Kotlin 是如何避免空指针问题的
在谈Kotlin的优势的时候,大家都会想到空指针安全这一点,那么Kotlin又是如何避免这些问题的呢?下面从Kotlin的一些语法规则上给出介绍。 可空类型 默认声明的变量是不能为 null 的,如果
xiangzhihong
2018/01/26
1.7K0
Go中的死锁以及如何避免
死锁是指两个或更多的进程永久性地互相等待对方释放资源的情况。这通常发生在每个进程都持有至少一个资源,但又需要另一个当前被其他进程持有的资源才能继续执行。
运维开发王义杰
2023/08/10
5240
Go中的死锁以及如何避免

相似问题

如何避免过多的参数传递?

64

如何避免在AsyncTask中传递过多的输入参数?

22

如何在避免“过多参数”的同时执行grep?

50

Python:避免关于过多参数的Pylint警告

101

如何避免过多的If语句?

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档