Я пытаюсь использовать API, и провайдеры могут предложить только пример PHP, который я резюмировал следующим образом (с удалением конфиденциальных данных):
<?php
ini_set('default_socket_timeout', 1600);
$options = array(
'login' => 'myusername',
'password' => 'mypassword',
'trace' => 1
);
$url = 'https://supplierurl/ws?wsdl';
$soapClient = new \SoapClient($url, $options);
$params = array('12345');
try{
$details = $soapClient->getData($params);
var_dump($details->paramdetails);
}
catch(\Exception $e){
echo "Last request headers:<br>\n".$soapClient->__getLastRequestHeaders()."<br><br>\n";
echo "Last request:<br>\n".$soapClient->__getLastRequest()."<br><br>\n";
echo "Last response headers:<br>\n".$soapClient->__getLastResponseHeaders()."<br><br>\n";
echo "Last response:<br>\n".$soapClient->__getLastResponse()."<br><br>\n";
}
?>
Я успешно запустил это на своей машине для разработки и вернул данные, как и ожидалось.
Я попытался использовать этот сервис в .NET, добавив ссылку на сервис, используя предоставленный URL, который генерирует прокси-код, как и ожидалось, давая мне конфигурацию, как показано ниже:
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="mybinding">
<security mode="Transport">
<transport clientCredentialType="Basic"/>
</security>
</binding>
<binding name="mybinding1" />
</basicHttpBinding>
</bindings>
<client>
<endpoint address="https://supplierurl/ws"binding="basicHttpBinding" bindingConfiguration="mybinding"contract="API.portType" name="API.port" />
</client>
</system.serviceModel>
И тестовый код, как показано ниже:
API.portClient client = new API.portClient();
client.ClientCredentials.UserName.UserName = "myusername";
client.ClientCredentials.UserName.Password = "mypassword";
API.GetDataResponse response = client.getData(new string[] { "12345" });
Код выполняется без каких-либо исключений, но ответ нулевой. Если я изменяю имя пользователя или пароль на что-то недопустимое, я получаю исключение, указывающее, что сторона с полномочиями работает.
Если кто-нибудь может указать мне правильное направление, это будет высоко ценится!
Некоторая дополнительная информация, если я добавлю это как веб-ссылку, она работает, и это заставляет меня двигаться, хотя я все еще хотел бы знать, как заставить это работать в первую очередь. Код для использования веб-ссылки:
WebReference.customerV4Service svc = new WebReference.customerV4Service();
svc.Credentials = new System.Net.NetworkCredential("myusername", "mypassword");
WebReference.GetDataResponse resp = svc.getData(new string[] { "12345" });
Задача ещё не решена.
Других решений пока нет …