Как отладить вызов php nusoap, требующий базовой аутентификации, которая вообще не отвечает?

Я пытаюсь переписать модуль 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 неизменно ложно. Если я добавлю что-то подобное в свой код, он также последовательно вернет empty:

$error = $client->getError(); 
watchdog('connection_message', $error);

Я немного не в себе, и без сообщений об ошибках в моих журналах Apache или в сторожевом таймере Drupal я не вижу пути вперед.


person Darvanen    schedule 01.05.2015    source источник


Ответы (5)


1. Включите отчет об ошибках PHP, если он еще не включен.

Убедитесь, что настройки error_reporting, display_errors в вашем php.ini файле установлены на 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 и конечную точку:

Из справочника по API eWAY ваши конечные точки:

https://api.ewaypayments.com/soap.asmx (рабочая среда)
https://api.sandbox.ewaypayments.com/soap.asmx (песочница)

4. Похожие проекты API eWAY, которые можно перепроектировать:

person Drakes    schedule 04.05.2015
comment
Да, это Commerce eWAY для Drupal, который я пытаюсь обновить, у него нет поддержки Rapid API, и токены, похоже, в настоящее время не работают. - person Darvanen; 04.05.2015
comment
Ваша конечная точка может быть неправильной, но вы все равно должны получать сообщения об ошибках. Попробуйте проверить этот флаг «ошибка», который я поставил в своем ответе, а также на всякий случай включите ошибки PHP. - person Drakes; 04.05.2015
comment
Ваш код для обнаружения ошибок сделал свое дело, большое спасибо! Почему-то моя аутентификация не работает, теперь я знаю, где искать. Ответ принят. - person Darvanen; 04.05.2015
comment
Потрясающие! Я просмотрел источник NuSoap, чтобы узнать, как он сообщает об ошибках. Рад помочь. - person Drakes; 04.05.2015

Я хотел бы сказать по этому поводу пару вещей.

Во-первых, зачем вам использовать эту библиотеку? Вы можете использовать Zend_Soap_Client (если у вас его нет, вы можете установить его с помощью composer:

http://framework.zend.com/downloads/composer (ищите zendframework/zend-soap)

Затем вы можете загрузить пробную версию PHPStorm. Его инструменты отладки при использовании с http://xdebug.org действительно великолепны, вы можете проверить всю переменную и пространство среды в время выполнения.

Наконец, вы можете использовать удобный инструмент для управления ошибками, например 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);
person Niloct    schedule 04.05.2015
comment
Или просто используйте встроенную реализацию PHP Soap ;-) - person Capsule; 04.05.2015
comment
Спасибо, ребята, не подумал об обновлении реализации Soap. Конечно, стоит попробовать. - person Darvanen; 04.05.2015


Для лучшей производительности вы можете отключить отладку nusoap.

Чтобы проверить, отредактируйте файл /include/nusoap/nusoap.php и установите уровень отладки на 0, например:

['nusoap_base']->globalDebugLevel = 0;

Еще один шаг - удалить все строки, начинающиеся с:

$this->debug(

or

$this->appendDebug(

Источник:

http://kb.omni-ts.com/entry/245/
person Nuri Akman    schedule 06.07.2015

Вы можете попробовать этот модуль: https://www.drupal.org/project/eway_integration

В настоящее время мы работаем с eWay над совместным тестированием этого модуля. Он работает с Drupal Commerce, реализует RAPID 3.1 API eWay и совместим с PCI.

person Invisigoth    schedule 25.08.2015