贝宝自适应付款响应非常慢

Paypal Adaptive Payments response very slow

当我们尝试联系 PayPal 自适应支付端点时,两者都在: https://svcs.paypal.com/AdaptivePayments/Pay(对于显式链式支付) https://svcs.paypal.com/AdaptivePayments/Preapproval(预核准付款)

自 7 月下半月以来,我们从 paypal 收到的响应非常慢,超过 50 秒。响应到达后一切正常,但我们正在调查这个奇怪的时间响应,因为它给我们的用户带来了很多购物车掉落。

首先,我们检查了对端点的 SOAP 调用和我们的请求信封以及一切(在过去 6 年中始终有效)似乎没问题。我们刚刚在 soap 客户端请求中添加了一个 'compression' => SOAP_COMPRESSION_ACCEPT 行,因为它现在似乎是必需的(我们以前从未使用过它,但自 7 月以来我们得到了一个未知的内容编码错误没有这个线)。无论如何,即使在这个补丁之前并且从 7 月上旬/下半月开始就存在缓慢的响应。

然后我们测试了数据库中是否有损坏的表,但一切正常。

然后我们深入检查了在请求 paypal 端点和响应之间我们做了什么,但我们除了打开呼叫和等待响应之外什么也没做。

我们首先定义我们的 headers 然后我们调用:

    $soapClient = new SoapClient($this->wsdl,
                                    array('location' => $this->EndPointURL."AdaptivePayments/Preapproval/", 
                                          'uri' => "urn:Preapproval",
                                          'soap_version' => SOAP_1_1, 
                                          'trace' => 1, //debugging option

    'compression' => SOAP_COMPRESSION_ACCEPT,

    'stream_context' => $ctx)); //adding the stream context option containing the http headers

    $response = objectToArray($soapClient->Preapproval($params));

    } catch (SoapFault $e) { 
        $response = objectToArray($e);
    }

    return $response;

}

支付操作的情况非常相似,我们在 paypal 响应中也有相同的 50-52 秒延迟。

在正常情况下,我们确实希望在 1-5 秒之间得到响应。 我们认为这是 paypal 服务器上的问题,我们正在等待 MTS 的答复,但同时欢迎任何建议。

经过数周的故障排除和无数次尝试从 PayPal MTS 获得任何建议(没有任何有用的建议)之后,我们终于弄清楚了真正发生的事情以及如何修复它(不是快速简单的修复),我将 post 这个解决方案适用于少数可能同时响应自适应支付请求 API 端点的 soap 响应问题。

首先,我们努力检查由于防火墙、网络问题或编码问题,我们手上没有任何问题,我们在生产(实时)环境中执行了大量测试(但真实的)订单,两者使用自适应支付的支付操作 API 进行链式支付和预批准操作,我们声明我们正在做的任何 svcs 端点连接尝试的 49 秒时间响应是由于 PayPal 服务器配置上的某些东西,与 SOAP 连接有关的一些事情(我们不知道)(与后续数据信封无关)。

我们重写了大部分代码,从 SOAP 连接切换到 cURL 连接,一切都重新开始工作,响应时间在 1-3 秒左右,再次完全可以接受。

所有这些都在生产环境中进行,不幸的是,所有这些都没有来自 PayPal 状态网站的任何建议或给商家和应用程序开发人员的通知,也没有来自 MTS 团队。

因此,给 PayPal 技术团队的最终建议是,大约从 2019 年 7 月开始,在 7 月 10 日至 20 日期间,PayPal 自适应支付 svcs 端点服务器配置发生了一些变化(不幸的是,我们无法说明确切的日期) 停止对 SOAP 请求做出快速响应,并开始进行非常长的响应(总是 49-51 秒)。

更改整个代码以通过 cURL 而不是通过 SOAP 打开连接和传输数据我们已经解决了问题,但这是一次技术冒险,因为没有人就此给我们任何建议。这是一个遗憾。

希望这对某人有用,这对我们来说是噩梦般的几周。

干杯,菲尔