Возможно, я упускаю точку, но вы никогда не назначите возвращаемый объект $client
:
function getCustomer($ewayId = 9876543211000)
{
$url = 'https://www.eway.com.au/gateway/ManagedPaymentService/managedCreditCardPayment.asmx?WSDL';
$client = new Nusoap_client($url, true);
$client = $this->setHeaders($client);
$args['QueryCustomer'] = array('managedCustomerID'=>$ewayId);
$result = $client->call('QueryCustomer', $args);
print_r($result);
}
Вы также можете установить $client
в качестве переменной класса, если хотите, или отправив параметрв качестве ссылки.
Глядя на данные, я не знаю, имеет ли это значение, но вы используете var
для объявлений переменных класса, а затем используете private
для функции.Если вы используете php5, я бы держался подальше от var
:
private $username = 'test@eway.com.au';
private $pw = 'test123';
private $customerId = '87654321';
Используйте private
или public
или protected
(в зависимости от того, что требует ваш класс) вместо этого, чтобы сохранить последовательность.Я сомневаюсь, что это решит вашу проблему, просто что-то, о чем нужно знать.
Возможное решение
Хорошо, немного покопавшись, понял, вам нужно заключить фактический заголовок, который вы добавили в SOAP:Header
по рукам.Я протестировал нижеприведенное, и оно работало на меня, поэтому попробуйте:
private function setHeaders($client)
{
$headers = <<<EOT
<SOAP:Envelope xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope/" >
<SOAP:Header>
<eWAYHeader xmlns="http://www.eway.com.au/gateway/managedPayment">
<eWAYCustomerID>$this->customerId</eWAYCustomerID>
<Username>$this->username</Username>
<Password>$this->pw</Password>
</eWAYHeader>
</SOAP:Header>
EOT;
$client->setHeaders($headers);
return $client;
}
Он не вернул никаких ошибок.Так что да, похоже, это вероятный виновник.(Обратите внимание, что я также реализовал $client = $this->setHeaders($client);
, о котором я упоминал выше.
И мой окончательный ответ:
Хорошо, немного покопался и нашелчто-то, что работает. Не говорю, что это правильно, но да, это работает.
private function setHeaders($client)
{
$headers = <<<EOT
<eWAYHeader xmlns="https://www.eway.com.au/gateway/managedpayment">
<eWAYCustomerID>$this->customerId</eWAYCustomerID>
<Username>$this->username</Username>
<Password>$this->pw</Password>
</eWAYHeader>
EOT;
$client->setHeaders($headers);
return $client;
}
function getCustomer($ewayId = 123456789012)
{
$url = 'https://www.eway.com.au/gateway/ManagedPaymentService/managedCreditCardPayment.asmx?WSDL';
$client = new nusoap_client($url);
$client = $this->setHeaders($client);
$args['QueryCustomer'] = array('managedCustomerID'=>$ewayId);
$result = $client->call('QueryCustomer', $args, $namespace='https://www.eway.com.au/gateway/managedpayment', $soapAction='https://www.eway.com.au/gateway/managedpayment/QueryCustomer');
print_r($result);
//echo "\n{$client->request}\n"; // This echos out the response you are sending for debugging.
}
Кажется, namespace
и soapAction
были ключевыми ингредиентами. Я нашел их, используя ссылку, которую вы первоначально разместили: https://www.eway.com.au/gateway/ManagedPaymentService/managedCreditCardPayment.asmx?op=QueryCustomer
По сути, я просто посмотрел этот ответ, а затем провел некоторые поиски, чтобы выяснить soapAction, а затем просто возился с ним до тех пор, пока отправляемый запрос не совпал с отправленной вами страницей., но да. Это, как правило, означает, что что-то работает, и, вероятно, из-за тестовых данных. Но это дает вам базовую линию, чтобы уйти.
И $client->request
является удобным инструментом отладки для будущего.