如何调试需要基本身份验证但根本没有响应的 php nusoap 调用?
How do I debug a php nusoap call requiring basic authentication that doesn't respond at all?
我正在尝试重写一个 Drupal 模块,该模块落后于它所连接的网关的 API。
我认为导致问题的代码的精简版本如下:
$namespace = ($this->testing) ? 'https://api.sandbox.ewaypayments.com/' : 'https://api.ewaypayments.com/';
$endpoint = $this->url;
$httpUsername = $this->user_name;
$httpPassword = $this->password;
$client = new nusoap_client($endpoint, TRUE);
$client->setCredentials($httpUsername, $httpPassword, 'basic');
$client->response_timeout = 50;
$result = $client->call($operation, array('request' => $params), $namespace);
$result
始终是错误的。如果我将这样的东西放入我的代码中,它也会始终如一地 returns empty
:
$error = $client->getError();
watchdog('connection_message', $error);
我有点不知所措,在我的 Apache 日志或 Drupal 看门狗中没有任何错误消息,我看不到前进的方向。
在这种情况下,我想说几件事。
首先,你为什么要使用那个库?您可以使用 Zend_Soap_Client
(如果没有,您可以使用 composer:
安装它
http://framework.zend.com/downloads/composer(寻找zendframework/zend-soap
)
然后,你可以下载试用版 PHPStorm. Its debugging tools when used with http://xdebug.org 真的很棒,你可以在运行时检查整个变量和环境 space。
最后,您可以使用友好的错误管理工具,如 http://raygun.io,插入几行代码,在其中创建一个试用帐户,几分钟后您就会得到应用程序中发生的所有错误.
在你的情况下,你可以看到 $operation
的当前值,这似乎是在网络服务上调用的函数。
这是使用 Zend_Soap_Client
检查网络服务中提供的所有功能的代码:
$endpoint = 'http://your.example.endpoint/?wsdl';
$soapClient = new Zend_Soap_Client($endpoint);
$functions = $soapClient->getFunctions();
var_dump($functions);
1.打开 PHP 错误报告(如果尚未打开)。
在本地开发时,检查 php.ini
文件中的 error_reporting
、display_errors
设置是否分别设置为 E_ALL
和 On
。您还可以在 PHP 脚本的开头添加这些指令以将它们设置为 运行 时间:
error_reporting(E_ALL);
ini_set('display_errors', 'On');
2。像这样捕获 NuSOAP 错误:
$result = $client->call($operation, array('request' => $params), $namespace);
if ($client->fault) {
echo 'Error: ';
print_r($result);
} else {
// check result
$err_msg = $client->getError();
if ($err_msg) {
// Print error msg
echo 'Error: '.$err_msg;
} else {
// Print result
echo 'Result: ';
print_r($result);
}
}
3。验证您使用的 API 参数和端点是否正确:
从 eWAY API reference 开始,您的端点是:
https://api.ewaypayments.com/soap.asmx (production)
https://api.sandbox.ewaypayments.com/soap.asmx (sandbox)
4.您可以进行逆向工程的类似 eWAY API 项目:
- Commerce eWAY for Drupal(最新版本为 2014 年 3 月)
- eWAY-RapidAPI(使用 JSON 和 cURL)
- eWay-PHP-API(使用 XML 和 cURL)
- eWay Payment Gateway(使用 SOAPClient)
由于您使用的是 SOAP 请求,因此您的端点不正确,应该是 https://api.ewaypayments.com/soap.asmx 或
https://api.sandbox.ewaypayments.com/soap.asmx
为了更好的性能,您可能会考虑禁用 nusoap 调试。
要检查,编辑 /include/nusoap/nusoap.php 文件并将调试级别设置为 0,如下所示:
['nusoap_base']->globalDebugLevel = 0;
更进一步的步骤是删除所有以以下开头的行:
$this->debug(
或
$this->appendDebug(
来源:
http://kb.omni-ts.com/entry/245/
您可以试试这个模块:https://www.drupal.org/project/eway_integration
我们目前正在与 eWay 一起测试这个模块。它与 Drupal Commerce 一起工作并实现 eWay 的 RAPID 3.1 API 并且符合 PCI。
我正在尝试重写一个 Drupal 模块,该模块落后于它所连接的网关的 API。
我认为导致问题的代码的精简版本如下:
$namespace = ($this->testing) ? 'https://api.sandbox.ewaypayments.com/' : 'https://api.ewaypayments.com/';
$endpoint = $this->url;
$httpUsername = $this->user_name;
$httpPassword = $this->password;
$client = new nusoap_client($endpoint, TRUE);
$client->setCredentials($httpUsername, $httpPassword, 'basic');
$client->response_timeout = 50;
$result = $client->call($operation, array('request' => $params), $namespace);
$result
始终是错误的。如果我将这样的东西放入我的代码中,它也会始终如一地 returns empty
:
$error = $client->getError();
watchdog('connection_message', $error);
我有点不知所措,在我的 Apache 日志或 Drupal 看门狗中没有任何错误消息,我看不到前进的方向。
在这种情况下,我想说几件事。
首先,你为什么要使用那个库?您可以使用 Zend_Soap_Client
(如果没有,您可以使用 composer:
http://framework.zend.com/downloads/composer(寻找zendframework/zend-soap
)
然后,你可以下载试用版 PHPStorm. Its debugging tools when used with http://xdebug.org 真的很棒,你可以在运行时检查整个变量和环境 space。
最后,您可以使用友好的错误管理工具,如 http://raygun.io,插入几行代码,在其中创建一个试用帐户,几分钟后您就会得到应用程序中发生的所有错误.
在你的情况下,你可以看到 $operation
的当前值,这似乎是在网络服务上调用的函数。
这是使用 Zend_Soap_Client
检查网络服务中提供的所有功能的代码:
$endpoint = 'http://your.example.endpoint/?wsdl';
$soapClient = new Zend_Soap_Client($endpoint);
$functions = $soapClient->getFunctions();
var_dump($functions);
1.打开 PHP 错误报告(如果尚未打开)。
在本地开发时,检查 php.ini
文件中的 error_reporting
、display_errors
设置是否分别设置为 E_ALL
和 On
。您还可以在 PHP 脚本的开头添加这些指令以将它们设置为 运行 时间:
error_reporting(E_ALL);
ini_set('display_errors', 'On');
2。像这样捕获 NuSOAP 错误:
$result = $client->call($operation, array('request' => $params), $namespace);
if ($client->fault) {
echo 'Error: ';
print_r($result);
} else {
// check result
$err_msg = $client->getError();
if ($err_msg) {
// Print error msg
echo 'Error: '.$err_msg;
} else {
// Print result
echo 'Result: ';
print_r($result);
}
}
3。验证您使用的 API 参数和端点是否正确:
从 eWAY API reference 开始,您的端点是:
https://api.ewaypayments.com/soap.asmx (production)
https://api.sandbox.ewaypayments.com/soap.asmx (sandbox)
4.您可以进行逆向工程的类似 eWAY API 项目:
- Commerce eWAY for Drupal(最新版本为 2014 年 3 月)
- eWAY-RapidAPI(使用 JSON 和 cURL)
- eWay-PHP-API(使用 XML 和 cURL)
- eWay Payment Gateway(使用 SOAPClient)
由于您使用的是 SOAP 请求,因此您的端点不正确,应该是 https://api.ewaypayments.com/soap.asmx 或 https://api.sandbox.ewaypayments.com/soap.asmx
为了更好的性能,您可能会考虑禁用 nusoap 调试。
要检查,编辑 /include/nusoap/nusoap.php 文件并将调试级别设置为 0,如下所示:
['nusoap_base']->globalDebugLevel = 0;
更进一步的步骤是删除所有以以下开头的行:
$this->debug(
或
$this->appendDebug(
来源:
http://kb.omni-ts.com/entry/245/
您可以试试这个模块:https://www.drupal.org/project/eway_integration
我们目前正在与 eWay 一起测试这个模块。它与 Drupal Commerce 一起工作并实现 eWay 的 RAPID 3.1 API 并且符合 PCI。