【问题标题】:PayPal API NVP response for GetTransactionDetails missing subscription IDGetTransactionDetails 的 PayPal API NVP 响应缺少订阅 ID
【发布时间】:2016-07-10 02:55:46
【问题描述】:

在过去几年中,我为我的 SaaS 应用编写了多份审计报告。大多数逻辑使用 PayPal API 来获取完整的交易列表(使用 TransactionSearch),然后为每笔交易获取详细信息(使用 GetTransactionDetails)。

目的是将我收到的定期付款的数据库记录与最新的 PayPal 数据对齐,以确保我没有错过任何 IPN 或任何内容。

直到大约一个月前,它都运行良好。

最近,大多数交易都缺少订阅 ID。

过去,订阅 ID 包含在“SUBSCRIPTIONID”NVP 字段中。所有交易都不再存在此信息,并且我没有看到返回的任何其他包含订阅 ID 的字段。不过,所有其他字段似乎都在那里,所以我知道我的电话正在工作。只是 NVP 响应缺少订阅 ID。我还验证了订阅 ID 包含在为相同交易发送的 IPN 中。

我的代码使用的是较旧的 API 版本 (108.0)。现在理论上,PayPal 永远不会改变 API 的工作方式,所以我很困惑为什么结果不再是一个月前使用相同代码库时的结果。

我尝试了最新的 API 版本 (124.0),它为比 108 更多的交易提供订阅 ID,但也不是全部。

我完全被难住了。有人有线索吗?

我不想请求 PayPal 支持,因为需要 3 周才能获得任何帮助 :-)

【问题讨论】:

  • 我将此问题发送给了贝宝支持,如果我收到回复,我会尽量记住在这里发布答案。
  • 这是我正在研究的一种解决方法。如果您在自己的数据库中有一个 profileid 列表,您可以为每个执行一个 TransactionSearch 并在搜索中传递 PROFILEID 参数。然后,这将为您提供该 PROFILEID 的所有付款的列表,这将允许您将它们与交易 ID 相关联。
  • 我在此处询问的同时通过 PayPal 支持记录了此内容。不出所料,没有明确的答案,但我看到我的票处于“待修复”状态,这是有希望的。

标签: paypal-nvp


【解决方案1】:

同样的问题也有一个月了,只是随机停止工作打算尝试最新版本,但如果你说它相同,那么认为最好的行动方案是向 paypal 提交错误报告。

我发现唯一有效的解决方法是保存创建的 api 调用,它将返回电子邮件和订阅 ID。

然后使用 get transaction id (email) 中的信息从原始数据库 (created) 中搜索订阅 id。凌乱但现在可以工作,直到他们解决这个问题。

跟进

我使用这种方法只是继续进行 api 调用,直到订阅 ID 被生成,因为我们知道它每 5 次尝试一次就会起作用。

try {
    /* Original call */
    $transDetailsResponse = $paypalService->GetTransactionDetails($request);
} catch (Exception $ex) {
    include_once("../Error.php");
    exit;
}
// If its not got sub id we start a while loop
    if ($transDetailsResponse->PaymentTransactionDetails->PaymentItemInfo->Subscription->SubscriptionID == "")
        {
    // Run while loop until its found
        while ($transDetailsResponse->PaymentTransactionDetails->PaymentItemInfo->Subscription->SubscriptionID=="")
            {

            try {

            $transDetailsResponse = $paypalService->GetTransactionDetails($request);
            } catch (Exception $ex) {
            include_once("../Error.php");
            exit;
            }   

        }

【讨论】:

  • 如果一封电子邮件有多个订阅怎么办?当您收到付款时,您怎么知道它是为哪个订阅付款?
  • 您必须使用时间戳来匹配配对。我在上面添加代码的方式不那么混乱。
  • 这一定是有史以来最疯狂的解决方法之一:D
  • 看起来它已经完全停止返回这些 id 现在上面的工作看起来毫无用处,除非你想结束一个永无止境的循环。
  • 我不明白为什么没有更多的愤怒。此时不应该破坏大量订阅业务吗?
【解决方案2】:

恐怕我没有答案,但我看不出有什么办法让我参与这个讨论,因为我没有足够的声望来制作 cmets。

我已经有几个星期遇到同样的问题了。 (事实上​​,我可以说问题首先始于 2016-03-07 的更改)。 https://stackoverflow.com/questions/36647177/paypal-api-has-stopped-sending-profile-ids-any-way-to-match-payments-up-to-a-s

我今天注意到我们再次开始接收 SUBSCRIPTIONID。但是,TRANSACTIONTYPE 已更改为“recurring_payment”而不是“subscrpayment”。

我们还发现,我们从其他卖家那里收到的交易详细信息完全与我们的交易详细信息混在一起——产品名称行与我们的业务完全无关。完全损坏,可能存在安全问题。

我已经在 paypal-techsupport.com 上开过几张票来描述这些问题,但我还没有收到他们的回复。

【讨论】:

    【解决方案3】:

    PayPal 支持最终对此做出了回应:

    产品团队报告应解决此问题。 如果您仍然看到此问题的实例,请告诉我们。

    【讨论】:

      猜你喜欢
      • 2018-11-16
      • 2013-09-16
      • 2015-04-09
      • 2020-08-24
      • 1970-01-01
      • 2015-03-08
      • 2021-06-15
      • 2017-07-29
      • 2016-03-13
      相关资源
      最近更新 更多