为OData验证Dynamics NAV

时间:2016-10-21 16:43:33

标签: node.js web-services dynamics-nav

我正在尝试编写一个使用Dynamics NAV Odata Feed的node.js脚本。

我的动态资产净值设置中有UserAccount / PW和Web服务访问密钥。

我无法通过在标题中添加内容或在URL查询中添加内容来查找如何正确进行身份验证。我尝试过使用'username:password @ server'格式。我已经尝试将其编码为base64,并在Header中添加“Authentication”值。

documentation itself非常不具体。我知道如何生成密钥,但我不知道如何正确地将该密钥发送给NAV进行身份验证。

我正在使用'request-promise'npm包,它接受一个'options'参数,我可以添加任意头键:值对。请有人给我一些关于如何验证资产净值的方向。我已经在这几个小时了。

2 个答案:

答案 0 :(得分:3)

我找到了一个满意的答案。

使用node-libcurl我能够使用格式

cURL到网址

var Curl = require('node-libcurl').Curl; var curl = new Curl(), close = curl.close.bind(curl); function getOData(url) { return new Promise((resolve, reject) => { curl.setOpt(Curl.option.URL, url); curl.setOpt(Curl.option.HTTPAUTH, Curl.auth.NTLM); curl.setOpt(Curl.option.SSL_VERIFYPEER, false); curl.setOpt(Curl.option.SSL_VERIFYHOST, false); curl.setOpt(Curl.option.POST, 0); curl.on('end', function (statusCode, body, headers) { var retObj = JSON.parse(body); resolve(retObj); close(); }); curl.on( 'error', function(e){ reject(e); close(); }); curl.perform(); }) } module.exports = {getOData: getOData};

具体来说,我的cURL模块如下所示:

?format=json

但我必须在网址中明确要求json,例如FROM ubuntu:16.04 MAINTAINER S.K. RUN apt-get update RUN apt-get install curl -y RUN curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.32.1/install.sh | bash \ && export NVM_DIR="$HOME/.nvm" && [ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" \ && nvm install 6.9.1 \ && npm i express -g \ && npm i nunjucks -g \ && npm i nodemon -g \ && npm i gulp -g \ RUN mkdir -p ./PROJECT EXPOSE 1520

答案 1 :(得分:-1)

Tkol,你是对的,你也可以使用guzzle,这非常简单,它是一个查询客户表的示例函数:

public function ReadCustomer($identifier=0)
{
  try {

       $client = new GuzzleHttpClient();

       $apiRequest = $client->request('GET', 'http://server:port/ServiceName/WS/CompanyName/Page/Customer?$filter=No eq \''.$identifier.'\'',[
            'auth' =>'username','password', 'NTLM' ],       //NTLM authentication required
            'debug' => true                                  //If needed to debug   
      ]);


      $content = json_decode($apiRequest->getBody()->getContents());
      return $content;

  } catch (RequestException $re) {
      //For handling exception
  }
}

你可以查看我的样本: update/delete/get from Dynamics NAV OData webservice