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.php
和Adapter/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 社区合作以接受信用卡进行定期计费?
Paypal Payments Pro 是不是与 Paypal 的 Adaptive Payments API 兼容?