Magento PayPal Payments Advanced:未经测试的代码在发布中滑落?

Posted

技术标签:

【中文标题】Magento PayPal Payments Advanced:未经测试的代码在发布中滑落?【英文标题】:Magento PayPal Payments Advanced: Not tested code slipped in release? 【发布时间】:2012-06-27 20:48:54 【问题描述】:

我正在设置 Magento 安装(使用 bitnami magento 映像 1.7.0)并且无法使用 PayPal 付款。我已经按照this video 所示设置了所有内容,但在尝试完成订单后,在 payment_payflow_advanced.log 中我看到以下内容:

[结果] => 数组 ( [response_code] => -1 [response_reason_code] => 0 [response_reason_text] => 无法读取响应,或响应为空 )

我浏览过论坛并尝试过: 1) DNS 问题 - 我试过 wget https://payflowlink.paypal.com/ - 它有效。 2) Curl 启用了 SSL

我还能检查什么?

更新:我已将 url 添加到 zend 异常中,该异常会在日志中引发消息,因此它会尝试访问 https://payflowpro.paypal.com:443/transaction。如果我尝试在浏览器中打开此链接,我会得到 324net::ERR_EMPTY_RESPONSE。

更新 2:我也试过 PayFlowLink 方法,同样的问题。

更新 3:我注意到了一些奇怪的事情。

\magento\htdocs\app\code\core\Mage\Paypal\Model\Payflowlink.php

有一行:

const TRANSACTION_PAYFLOW_URL = 'https://payflowlink.paypal.com/';

我认为应该告诉 magento 将数据发送到哪里以生成安全 id。问题是,这个常量不在magento代码中的任何地方使用,这个链接也没有在其他任何地方使用,这就是为什么我认为它记录对payflowpro的请求,而不是payflowlink,我想知道这个代码是否经过任何人的测试。

更新 4

在 1.7.0.1 版本中看起来与更新 3 中提到的问题相同

我想知道是否有人在 Magento 中成功设置了 PayPal Payments Advanced,如果是,那是哪个版本的 Magento?

更新 6: 我做了一个这样的卷曲测试:

<?php

   $ch = curl_init("https://www.google.com/");
   $fp = fopen("example_homepage.txt", "w");

   curl_setopt($ch, CURLOPT_FILE, $fp);
   curl_setopt($ch, CURLOPT_HEADER, 0);

   curl_exec($ch);
   curl_close($ch);
   fclose($fp);
 ?>

它按预期写入文件,https没有问题。

更新 7

Request log:

 [request] => Array
        (
            [user] => ****
            [vendor] => me****
            [partner] => PayPal
            [pwd] => ****
            [verbosity] => HIGH
            [tender] => C
            [cancelurl] => http://mydomain.com/index.php/paypal/payflow/cancelPayment
            [errorurl] => http://mydomain.com/index.php/paypal/payflow/returnUrl
            [silentpost] => TRUE
            [silentposturl] => http://mydomain.com/index.php/paypal/payflow/silentPost
            [returnurl] => http://mydomain.com/index.php/paypal/payflow/returnUrl
            [template] => minLayout
            [disablereceipt] => TRUE
            [cscrequired] => TRUE
            [cscedit] => TRUE
            [emailcustomer] => FALSE
            [urlmethod] => GET
            [createsecuretoken] => Y
            [securetokenid] => 7ebabf98872aee2ff84be75d1483e453
            [trxtype] => S
            [amt] => 150.00
            [currency] => USD
            [invnum] => 100000006
            [custref] => 100000006
            [ponum] => 39
            [firstname] => Gxxx
            [lastname] => Bxxx
            [street] => Vxxx
            [city] => Kxxx
            [state] => Lxxx
            [zip] => 4xxx
            [country] => LT
            [email] => gxxx@xxx.com
            [shiptofirstname] => Gxxx
            [shiptolastname] => Bxxx
            [shiptostreet] => Vxxx
            [shiptocity] => Kxxx
            [shiptostate] => Lxxx
            [shiptozip] => 4xxx
            [shiptocountry] => LT
            [user1] => 1
            [user2] => 48a9896a17493d6b97de838c4b40026d
        )

    [result] => Array
        (
            [response_code] => -1
            [response_reason_code] => 0
            [response_reason_text] => Unable to read response, or response is empty. Uri:https://payflowpro.paypal.com:443/transaction
        )

    [__pid] => 31628

只要没有建议,可能有人可以建议最简单的方法来确保使用 paypal 付款高级帐户一切正常?

【问题讨论】:

几个问题:这是在生产模式吗?还是您正在通过沙箱进行测试?您是否将安全令牌设置为开?您是否在 manager.paypal.com 上配置了正确的 URL/配置?如果可以,请根据您的知识分享信息。我最后一次成功设置 Paypal Payments Advanced 大概是 1.5+, 1.6.2.0 我已经更新了设置截图,我尝试了生产和测试模式但没有成功。 我检查了 1.6.2.0 源代码,它也没有在任何地方使用 TRANSACTION_PAYFLOW_URL const。 您的合作伙伴实际上是您的 PayFlowPro 帐户的 Paypal 吗?你真的有一个有效的 PayFlowPro 账户吗?这是一项不同于普通 Paypal 帐户的服务。 据我了解 PayFlowPro 和 PayPal Payments Advanced 是不同的服务,我已经更新了 PayPal 服务状态的问题。根据cms.paypal.com/cms_content/US/en_US/files/developer/… 第 14 页,已启用 PayPal Payments Advanced。 【参考方案1】:

Magento 以设置变量/常量而闻名,并且从不使用它们。

说到app/code/core/Mage/Paypal/Model/Payflowpro.php 寻找_postRequest() 方法,我将围绕$client$result 对象添加一些调试。

同样在catch (Exception $e) 下方,您会注意到原始错误消息的来源,因为这是您的异常发生在Varien_Http_Client 内的情况:

    try 
       /**
        * we are sending request to payflow pro without url encoding
        * so we set up _urlEncodeBody flag to false
        */
        $response = $client->setUrlEncodeBody(false)->request();
    
    catch (Exception $e) 
        $result->setResponseCode(-1) 
            ->setResponseReasonCode($e->getCode())
            ->setResponseReasonText($e->getMessage());

        $debugData['result'] = $result->getData();
        $this->_debug($debugData);
        throw $e;
    

使用上面的代码,您的问题很可能来自 Curl 本身,或者是 magento 或服务器端的错误配置。我将通过 Magento 之外的方法完全验证 Curl 是否已安装并正常工作,例如:

http://php.net/manual/en/curl.examples-basic.php

在 try catch 块中的 $response 之前,我将在 $client 对象上添加日志 (mage::log) 或转储 (zend_debug::dump) 以获取有关如何形成和发送请求的更多详细信息.

您应该能够通过转储或记录在/lib/Varien/Http/Client.phpAdapter/Curl.php 中找到更多信息。

请随时发布上述任何调试的结果。

希望这会有所帮助!

【讨论】:

我会尝试的,但正如我所说,我使用的是 bitnami magento 图像,所以我对 php/curl 配置非常有信心,到目前为止,我对它的印象非常深刻已配置。 我已经更新了问题 - 使用 https 链接测试了 curl,它可以正常工作。关于异常 - Zend http 客户端在异常情况下保存请求,我也将其添加到问题中 虽然你的回答没有提供确切的解决方案 - 你是对的 - 这是 curl 问题。【参考方案2】:

所以我做了什么,我从这里https://www.x.com/node/2749 拿了 Payflow 样本并放在 magento 目录中。 我已经运行它,并注意到,虽然它在获取安全令牌时没有失败,但执行请求只花了 1 分钟,这带来了一个想法,它超时了,所以我在我的电脑上试过了,这花了不到一秒并生成安全 ID。 所以问题是, curl.exec 超时,问题是为什么?

我已经开始使用 putty 并尝试了上面链接中示例的相同请求,它给了我

curl: (35) 连接到 payflowpro.paypal.com:443 的未知 SSL 协议错误

现在有东西了! 很多年前我也遇到过类似的问题,但它是如此痛苦,以至于我仍然记得有帮助的解决方案 - 所以我尝试通过另一个版本的 SSL,并且版本 3 通过了!

我所要做的就是将 SSL 版本选项添加到 Varien Http Client 和 bum - 一切正常。

【讨论】:

X.com 不再活跃,你能解释一下你做了什么吗?谢谢 对不起,那是很久以前的事了,我偶尔会碰一下 Magento。

以上是关于Magento PayPal Payments Advanced:未经测试的代码在发布中滑落?的主要内容,如果未能解决你的问题,请参考以下文章

Magento PayPal Payments Advanced:未经测试的代码在发布中滑落?

Paypal Payments Pro 是不是直接与 magento 社区合作以接受信用卡进行定期计费?

magento - 集成贝宝自适应支付(链式支付)

Paypal Payments Pro 是不是与 Paypal 的 Adaptive Payments API 兼容?

PayPal开发文档整理(12)——paypal payments pro

magento后台paypal设置