0

我在实施 Paypal 的 Payments Pro 网关时遇到了可怕的事情,我想知道是否有人遇到过类似的问题,可以为我提供一些见解?

我们正在使用 PHP,并且一直在尝试通过他们自己的 integrationwizard.x.com 网站上生成的 paypalfunctions.php 代码进行交互。原版中有一个(报告确认)错误,导致试点和实时网站连接反转,所以我对此一开始的信心很低。然而,我实现了代码,网关现在正在接受实时支付——大部分时间。在很多情况下,付款被拒绝并报告“国家代码无效”。

在调用Paypals自己的代码之前立即记录请求字符串,并在返回时立即返回结果,我可以证明传递给Paypal的字符串确实是正确的。贝宝自己承认这一点,但看到截断值,我引用

“好吧,这确实有点奇怪。你的 NVP 字符串似乎是正确的,但我们收到的国家代码间歇性截断,所以例如对于 GB,我们有时什么也得不到,一个 G、一个 B 或一个 GB 成功“

现在这也很奇怪,因为传递的字符串包含嵌入在其中心的国家代码 - 例如(个人详细信息已更改)

USER=ZUTRB8C4OQ&VENDOR=OSO47W6EJP&PARTNER=PayPalUK&PWD=JITCMJA8VAN6YBMP&TENDER=C&TRXTYPE=S&ACCT=XXXXXXXXXXXXXXXX&CVV2=646&EXPDATE=0512&ACCTTYPE=Visa&AMT=55.60&CURRENCY=GBP&FIRSTNAME=John&LASTNAME=Smith&STREET=9/2 Oaklands Hill&CITY=Edinburgh&STATE=&ZIP=EH11AAA&COUNTRY=GB&CLIENTIP=82.19.219.153&ORDERDESC=The  Order&VERBOSITY=MEDIUM&BUTTONSOURCE=PF-CCWizard

这向我强烈暗示问题在于如何解析或处理此字符串。我们有示例 NVP 字符串被接受和拒绝,并且布局相同,甚至有一种情况是同一张卡在不同 IP 处被拒绝。

其他人有类似的经历吗?

更新:在检查服务器(它是共享主机)时,我发现一个很大的错误日志,其中包含几乎全部的行,例如

[08-Jul-2009 10:14:27] PHP Warning:  PHP Startup: Unable to load dynamic library
'/usr/local/lib/php/extensions/no-debug-non-zts-20060613/sqlite.so' - /usr/local/lib/php/extensions/no-debug-non-zts-20060613/sqlite.so: undefined symbol: php_pdo_unregister_driver in Unknown on line 0

据我所知,sqlite 库和 curl 之间没有明显的联系,但这意味着 PHP 没有正确配置,这会导致出现随机错误吗?

4

1 回答 1

3

我下载了 paypalfunctions.php 的副本,但它不发送字符串。相反,它使用 curl 和 CURLOPT_POSTFIELDS 参数将所有变量作为 HTTP POST(POST 正文中的单独字段)而不是长 GET 字符串发送。

我建议使用 tcpdump 和Wikeshark 之类的工具来捕获和查看实际发送到 PayPal 的内容。如果您再次遇到同样的问题,您可以向他们展示 tcpdump 以向他们展示您实际上发送了正确的字符串。

PS:请注意,如果您根据您的 TCP 日志发送它,那仍然不意味着 PayPal 确实收到了它。我清楚地记得在我的前任雇主处寻找 HTTP POST 的一个奇怪问题。我的 TCP 转储说我发送了它。他们的 TCP 转储说他们没有得到它。几周后,我们和他们之间发现有一个配置错误的透明代理。它意外打开了深度数据包检查以删除 HTTP POST 表单的某些部分。“哎呀”网络提供商说。

于 2009-07-07T17:56:46.790 回答