3

我正在设置 Magento 安装(使用 bitnami magento 映像 1.7.0)并且无法使用 PayPal 付款。我已经设置了所有内容,如本视频所示,但在尝试完成订单后,在 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?

magento 设置 magento 设置 贝宝设置 贝宝设置

贝宝状态

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

<?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

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

4

2 回答 2

3

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

有了上面所说app/code/core/Mage/Paypal/Model/Payflowpro.php的寻找 _postRequest()方法,我会在$clientand$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 是否已安装并正常工作,例如:

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

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

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

希望这可以帮助!

于 2012-06-29T15:33:13.260 回答
1

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

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

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

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

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

于 2012-07-02T09:06:19.180 回答