【发布时间】:2016-09-01 05:20:20
【问题描述】:
我需要访问使用 Navision 用户 + SSL 的 Navision 网络服务。我使用的连接器是基于 PHP 的。
我能够连接到简单的 http 访问并使用 Window 的用户。这是帮助我实现这个Navision Web Service PHP Freddy 编写的教程。
我仍在使用它,但在 curl/request 中添加证书时玩弄了。研究并阅读了很多文章,但我仍然无法实现。
我现在可以使用上面共享的基本 php 连接器(链接)访问它,但是在检索数据时,我收到以下详细信息:
...成功设置证书验证位置:
* CAfile:/Path/Navision.pem
* SSL 连接使用 TLSv1.0 / AES256-SHA
* 服务器证书:
...
* SSL 证书验证结果:无法获取本地颁发者证书 (20),仍然继续。
* 服务器身份验证使用 NTLM 和用户“用户”
POST Navision 页面 URL 名称 HTTP/1.1
授权:NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAAA=
...
方法:POST
连接:保持活动
用户代理:PHP-SOAP-CURL
内容类型:文本/xml;字符集=utf-8
SOAPAction:“urn:microsoft-dynamics-schemas/page/pda_item_list:ReadMultiple”
...
我通过 makecert.exe 使用了证书。我有这些文件 2 .cer、一个 pvk 和一个 .crl。我们使用其中一个 .cer 文件获取指纹以将其应用于 navision 服务实例。哪个文件是 php curl 连接器使用的正确文件。
这是我的请求 php 代码:
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $request);
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_NTLM);
curl_setopt($ch, CURLOPT_USERPWD, USERPWD);
curl_setopt($ch, CURLOPT_VERBOSE, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_CAINFO, __DIR__ . '/Navision.pem');
如果我能够通过使用 Navision 用户和 SSL 访问它,使用 PHP 连接器使用 Navision 的 Web 服务,任何相关的链接都将非常感激。
更新
我现在可以使用有效的证书并且可以正常通过了。 它现在仍然不起作用并返回与上面相同的错误.. Unauthorized 401.
很可能是因为我的 Navision 设置或我只是以错误的方式传递凭据?我还在研究和玩,所以目前我仍然无法提取数据。
【问题讨论】:
-
您使用的是哪个版本的 NAV?
-
您好 Azatoth,我们使用的是 NAV 2016,抱歉回复晚了。
标签: php web-services ssl curl navision