веб-сервисы — как я могу использовать функцию CREATE в мыльном веб-сервисе в Navision в PHP?

Вот вы можете увидеть документацию. Это в C #. Я попытался сделать рабочий пример, используя PHP. Мне удалось выполнить Читать & ReadMultiple функции в PHP. Это моя попытка:

   require ("./NTLMSoapClient.php");
$client = new NTLMSoapClient(null, array(
'cache_wsdl' => WSDL_CACHE_NONE,
'trace' => true,
'location' => "http://83.166.204.26:7147/TEST/WS/Harmont%20Blaine_TEST/Page/WebItem",
'uri' => "urn:microsoft-dynamics-schemas/page/webitem",

));
$client->user = "xxxxxx";
$client->password = "xxxxxxxxx";
try{

$resp = $client->Create(new SoapVar('555554', XSD_STRING, null, null, 'ns1:No' ));
echo "REQUEST:\n" . htmlentities($client->__getLastRequest()) . "\n";
}catch(SoapFault $sf){
//echo "REQUEST:\n" . htmlentities($client->__getLastRequest()) . "\n";
print '<pre>';
print_r($sf);
print '</pre>';
}
print '<pre>';var_dump($resp);  print '</pre>';

Это возвращает меня НОЛЬ по какой-то причине. Есть идеи, почему не работает?

0

Решение

Фредди Кристиансен сделал замечательную серию постов в блоге с подробным объяснением того, как подключаться к веб-сервисам Nav из разных сред.

Первая часть здесь:
Подключение к веб-сервисам NAV из…

Вторая часть:
Подключение к веб-сервисам NAV из PHP

Клиент может получить нулевой ответ по нескольким причинам. Первый из них — клиентское приложение не может пройти аутентификацию на веб-сервисе. Это может произойти, если на стороне сервера используется протокол SPNEGO вместо NTLM. Вам нужно установить ключ «ServicesUseNTLMAuthentication» в CustomSettings.config, как Фредди описал в первых своих постах.

Если вы можете читать данные из службы, но не можете создать запись, это означает, что запрос успешно проходит проверку подлинности, и проблема, вероятно, связана с форматом сообщения SOAP.

Это то, что Nav ожидает получить в запросе на создание.

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<Create xmlns="urn:microsoft-dynamics-schemas/page/customer">
<Customer>
<No>555554</No>
<Name>NewCustomer</Name>
</Customer>
</Create>
</soap:Body>
</soap:Envelope>

Для достижения этого результата вы можете заменить стандартную потоковую оболочку HTTP на оболочку NTLMStream (см. Пост «Подключение к веб-службам NAV из PHP» выше).

Теперь это все, что вам нужно сделать, чтобы прочитать запись клиента:

$client = new NTLMSoapClient("http://192.168.0.101:7047/DynamicsNAV71/WS/".rawurlencode($company)."/Page/Customer");
$resp = $client -> Read(array('No' => '10000'));

Создание новых записей также становится намного проще:

$client = new NTLMSoapClient("http://192.168.0.101:7047/DynamicsNAV71/WS/".rawurlencode($company)."/Page/Customer");

class CustomerWrapper
{
public $Customer;
}

$cw = new CustomerWrapper;
$cw -> Customer -> No = "555554";
$cw -> Customer -> Name = "NewCustomerName";
$cw -> Customer -> E_Mail = "[email protected]";
$resp = $client -> Create($customer);
1

Другие решения

Это решение:

$resp = $client->Create(new SoapVar('5555195', XSD_STRING, null, null, 'ns1:WebItem' ));

Я должен изменить нет в WebItem

посмотреть здесь:

<xsd:element name="Create">
<xsd:complexType>
<xsd:sequence>
<xsd:element minOccurs="1" maxOccurs="1" name="WebItem" type="tns:WebItem"/></xsd:sequence></xsd:complexType>
</xsd:element>
0

По вопросам рекламы [email protected]