如何调试需要基本身份验证但根本没有响应的 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_reportingdisplay_errors 设置是否分别设置为 E_ALLOn。您还可以在 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 项目

由于您使用的是 SOAP 请求,因此您的端点不正确,应该是 https://api.ewaypayments.com/soap.asmxhttps://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。