- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
现在,我正在尝试使用Paypal沙箱从我的网站制定订阅计划。我已经在企业帐户中设置了notify_url并启用了此功能。返回并取消返回是正确的工作。但是,当使用买方(个人)帐户进行测试并同意订阅付款时,没有交易日志永远不会调用我的网站notify_url。
我的问题与[问题]类似:notify_url is not reached or may be false response in sandbox paypal
感谢您的帮助。
最佳答案
如果您的帐户中启用了IPN,请登录该帐户并查看IPN历史记录。您应该可以从此处判断您的IPN是否已发送出去,或者它们是否处于重试或失败状态。如果您在此处看到IPN,则可以单击消息ID,如果服务器正在重发IPN,它将显示服务器正在返回的状态。这可能有助于找出问题的原因。另外,这是一些基本的故障排除步骤,可能有助于解决IPN问题。
另外,如果您使用的是自定义脚本,请尝试使用PayPal’s sample IPN scripts之一。它们是非常基本的脚本,但是它们是经过测试的有效示例。这可以帮助您确定脚本或IPN是否存在问题。
IPN故障排除技巧
这些是在使用IPN时影响开发人员的最常见问题。还指出了最常见的解决方案。希望这些信息可以帮助某人!
无效原因
确保您回发所有变量/值。
为了使PayPal返回VERIFIED,您的IPN脚本需要先回发发布到其的所有变量。换句话说,如果您的脚本仅需要操纵1个或2个变量,仅将脚本所关心的变量/值发回PayPal是不够的。您的脚本应回发最初从PayPal发布到它的所有内容。这是PayPal返回VERIFIED的唯一方法
确保您没有发回错误的URL。
如果要在沙盒中进行测试,则需要确保脚本回发到www.sandbox.paypal.com。如果您在现场站点上,该脚本应发回到www.paypal.com。如果您在沙盒中进行测试并且您的脚本回发到实时站点(反之亦然),则您将收到INVALID
编码方式
PayPal的IPN服务器希望您的脚本将回发所有发布到该脚本的变量,更重要的是,它们的编码方式与发送给您的脚本的方式相同。如果您的脚本无意中更改了字符的编码,或者将编码后的字符解释为另一个字符,然后回退,则可能会看到INVALID。例如,这可能会偶尔发生,并倾向于发生,例如,当收到付款并且买方的名称中可能带有重音字符或订单是针对某项商品名称中具有非标准字符的商品时。这些实例很难进行故障排除,但在此处列出了这些实例,因为当您希望验证通过时,它可能导致INVALID无效。当您看到某些IPN无效而其余所有IPV已验证时,请查找此问题。
疑难解答提示-IPN不发布!
接收帐户上的电子邮件地址。
确保已确认付款发送到的帐户上的电子邮件地址。
访问日志
如果您认为IPN没有发布到脚本中,则可以通过检查服务器的访问日志来验证。服务器访问日志将告诉您PayPal是否完全“点击了脚本”。访问日志跟踪访问服务器的计算机的IP地址和/或主机名。您能否访问服务器的访问日志取决于服务器管理员。如果您不知道日志在哪里,请与他们联系。
错误日志
如果运行脚本时发生错误,大多数脚本语言会输出到错误日志。如果您在访问日志中看到PayPal正在发送IPN,但没有从脚本中看到预期的最终结果,则可能是脚本中存在逻辑或语法错误。检查您的错误日志以进行验证。同样,如果您不知道如何或在何处检查这些日志,则需要咨询服务器的管理员。
检查路径
一个容易犯的错误。测试/使用IPN时,请始终确保脚本路径正确无误,并且会看到您没有收到IPN帖子。例如,避免使用“ localhost” URL。由于这是后端服务器到服务器的通信,因此将localhost设置为路径将导致IPN尝试将其发布到自身,而不是在网络外部发布到您自己的服务器/脚本。
防火墙
IPN是从PayPal启动的HTTP POST。如果您的服务器上有防火墙,请确保您的防火墙没有阻止来自PayPal的帖子。
测试以确保您的脚本按预期工作。
如果您的脚本中包含语法或逻辑错误,很可能您将看不到正确的结果。一种简单的测试脚本的方法是通过向脚本发送“虚拟”帖子,并在PayPal的响应无效的情况下编写一些代码来“执行某些操作”。本质上,如果将来自PayPal的响应为VERIFIED时要触发的代码复制到脚本响应的部分(如果响应为INVALID时运行),则可以向脚本发送虚拟帖子以查看代码是否有效。由于到脚本的虚拟帖子将返回INVALID(因为该帖子不是源自PayPal),因此这就是为什么要将代码添加到脚本的“ if INVALID”部分的原因。
发布到您的返回网址(返回方法)
设置了一些商家,以便他们希望将IPN数据发布到其按钮代码(返回)中其返回变量的值。这是在完成PayPal付款后,买家会转到的URL。要将IPN数据发布到返回URL,必须在按钮代码中将rm变量设置为等于“ 2”,否则您可能看不到任何IPN数据发布到返回URL。有关更多信息,请参见这篇文章。 **请注意,此信息是有关IPN数据的信息,可以通过返回以及它与返回URL(按钮代码变量“ return”)一起使用的方式进行传递。如果您启用了PDT自动返回功能,则此信息不适用于您,因为PDT是其自身的独立功能。有关PDT的更多信息,请参见此处。
疑难解答提示-IPN延迟
在大多数情况下,当您的服务器未对许多事务IPN进行200ok响应时,会导致IPN持续出现延迟。例如,当您的服务器未回复200ok贝宝时,将尝试重新发布数据。在多次重新发送未收到200ok的数据之后,您的IPN被转移到速度较慢的循环服务器上,因此延迟了。
首先检查您的IPN日志以了解POST的状态:
在您的帐户的“历史记录”部分下,您应该有一个“ IPN历史记录”部分,您可以在其中查看最近28天的IPN值,某些情况下可以重新发送它们。如果您没有找到此链接,请转到此处:
https://www.paypal.com/us/cgi-bin/webscr?cmd=_display-ipns-history
这些日志将具有几种不同的状态:
已发送-表示贝宝已将邮件发送到您的IPN侦听器
失败-表示PayPal未收到针对原始POST尝试或重新POST的消息的确认(200ok)
已排队-表示贝宝已准备好发送消息
重试-表示PayPal没有收到200ok,并且该消息在1至15次之间被重新发送,并且PayPal正在继续重新发送该消息
已禁用-表示由于IPN /该帐户已被禁用,因此将不会重新发送该消息
如果看到“失败”或“重试”,很可能是解决此问题的原因,则需要检查服务器日志以确定为什么未将200ok发送回PayPal IPN。一旦确定并纠正了该错误,并且服务器以200ok响应,它将使该百分比/计数低于该限制,并且它将开始从正常周期服务器中发布IPN。
如果没有失败,则PayPal服务器本身可能会延迟,在这种情况下,您将需要创建PayPal商业技术服务票证,作为paypal.com/mts进行进一步审核。
Curl vs fsockopen:
这通常是个人喜好,但是在某些情况下,您要使用的主机提供程序不支持其中之一,因此您可能需要在两者之间进行切换。这是使用fsockopen的示例:
$header = "POST /cgi-bin/webscr HTTP/1.1\r\n";
$header .= "Host: www.paypal.com\r\n";
$header .= "Content-Type: application/x-www-form-urlencoded\r\n";
$header .= "Content-Length: " . strlen($req) . "\r\n";
$header .= "Connection: Close\r\n\r\n";
$fp = fsockopen ('ssl://www.paypal.com', 443, $errno, $errstr, 30);
$url= 'https://www.sandbox.paypal.com/cgi-bin/webscr';
$curl_result=$curl_err='';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $req);
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: application/x-www-form-urlencoded", "Content-Length: " . strlen($req)));
curl_setopt($ch, CURLOPT_HEADER , 0);
curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
$res = @curl_exec($ch);
$curl_err = curl_error($ch);
curl_close($ch);
<form target="_new" method="post" action="https://www.YourDomain.com/Path/IPNhandler.php">
<input type="hidden" name="SomePayPalVar" value="SomeValue1"/>
<input type="hidden" name="SomeOtherPPVar" value="SomeValue2"/>
Than etc for all other variables you want to test with.
</br>
<input type="submit"/>
</form>
关于php - 当买家为订阅付款时,notify_url永远不会调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15778567/
为了让我的代码几乎完全用 Jquery 编写,我想用 Jquery 重写 AJAX 调用。 这是从网页到 Tomcat servlet 的调用。 我目前情况的类似代码: var http = new
我想使用 JNI 从 Java 调用 C 函数。在 C 函数中,我想创建一个 JVM 并调用一些 Java 对象。当我尝试创建 JVM 时,JNI_CreateJavaVM 返回 -1。 所以,我想知
环顾四周,我发现从 HTML 调用 Javascript 函数的最佳方法是将函数本身放在 HTML 中,而不是外部 Javascript 文件。所以我一直在网上四处寻找,找到了一些简短的教程,我可以根
我有这个组件: import {Component} from 'angular2/core'; import {UserServices} from '../services/UserService
我正在尝试用 C 实现一个简单的 OpenSSL 客户端/服务器模型,并且对 BIO_* 调用的使用感到好奇,与原始 SSL_* 调用相比,它允许一些不错的功能。 我对此比较陌生,所以我可能会完全错误
我正在处理有关异步调用的难题: 一个 JQuery 函数在用户点击时执行,然后调用一个 php 文件来检查用户输入是否与数据库中已有的信息重叠。如果是这样,则应提示用户确认是否要继续或取消,如果他单击
我有以下类(class)。 public Task { public static Task getInstance(String taskName) { return new
嘿,我正在构建一个小游戏,我正在通过制作一个数字 vector 来创建关卡,该数字 vector 通过枚举与 1-4 种颜色相关联。问题是循环(在 Simon::loadChallenge 中)我将颜
我有一个java spring boot api(数据接收器),客户端调用它来保存一些数据。一旦我完成了数据的持久化,我想进行另一个 api 调用(应该处理持久化的数据 - 数据聚合器),它应该自行异
首先,这涉及桌面应用程序而不是 ASP .Net 应用程序。 我已经为我的项目添加了一个 Web 引用,并构建了各种数据对象,例如 PayerInfo、Address 和 CreditCard。但问题
我如何告诉 FAKE 编译 .fs文件使用 fsc ? 解释如何传递参数的奖励积分,如 -a和 -target:dll . 编辑:我应该澄清一下,我正在尝试在没有 MSBuild/xbuild/.sl
我使用下划线模板配置了一个简单的主干模型和 View 。两个单独的 API 使用完全相同的配置。 API 1 按预期工作。 要重现该问题,请注释掉 API 1 的 URL,并取消注释 API 2 的
我不确定什么是更好的做法或更现实的做法。我希望从头开始创建目录系统,但不确定最佳方法是什么。 我想我在需要显示信息时使用对象,例如 info.php?id=100。有这样的代码用于显示 Game.cl
from datetime import timedelta class A: def __abs__(self): return -self class B1(A):
我在操作此生命游戏示例代码中的数组时遇到问题。 情况: “生命游戏”是约翰·康威发明的一种细胞自动化技术。它由一个细胞网格组成,这些细胞可以根据数学规则生存/死亡/繁殖。该网格中的活细胞和死细胞通过
如果我像这样调用 read() 来读取文件: unsigned char buf[512]; memset(buf, 0, sizeof(unsigned char) * 512); int fd;
我用 C 编写了一个简单的服务器,并希望调用它的功能与调用其他 C 守护程序的功能相同(例如使用 ./ftpd start 调用它并使用 ./ftpd stop 关闭该实例)。显然我遇到的问题是我不知
在 dos 中,当我粘贴此命令时它会起作用: "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" https://google.
在 dos 中,当我粘贴此命令时它会起作用: "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" https://google.
我希望能够从 cmd 在我的 Windows 10 计算机上调用 python3。 我已重新安装 Python3.7 以确保选择“添加到路径”选项,但仍无法调用 python3 并使 CMD 启动 P
我是一名优秀的程序员,十分优秀!