1

大家早上好,

我正在尝试从 php CURL 脚本在 Microsoft Dynamics NAV 365 中创建潜在客户实体。但是,我在 CURL 响应中不断收到“HTTP 错误 401 - 未经授权:访问被拒绝”。但是,我可以通过 Web 界面创建潜在客户。

我已经按照 MSDN 文档网站上的描述从主要实体类型创建了我的对象。

下面是我的代码:

$lead = array('person' =>
    array(
        'topic'                 => 'WEB LEAD',
        'name'                  => $fullname,
        'firstname'             => $firstname,
        'lastname'              => $lastname,
        'companyname'           => $company,
        'telephone1'            => $telephone,
        'emailaddress1'         => $email,
        'description'           => $comment,
    ),
);

$dynamics =  $url . '/api/data/v8.2/leads';
$ch = curl_init($dynamics);

$options = array(
    CURLOPT_HTTPHEADER => array(
        'Content-Type: application/json; charset=utf-8',
        'OData-MaxVersion: 4.0',
        'OData-Version: 4.0',
        'Accept: application/json',
    ),
    CURLOPT_HEADER => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST => true,
    CURLOPT_USERPWD, 'username:password',
    CURLOPT_POSTFIELDS => json_encode($lead),
);

curl_setopt_array($ch, $options);
$response = curl_exec($ch);
$responseInfo = curl_getinfo($ch);
curl_close($ch);
4

2 回答 2

0

添加curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_NTLM);解决了我的问题。整个源代码如下所示:

$ch = curl_init();

if(!empty($parameters)){ //Add params (array) to your request if you want
    $url .= "?".http_build_query($parameters);
}

curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_NTLM);

$login = sprintf('%s:%s', self::USERNAME, self::PASSWORD);
curl_setopt($ch, CURLOPT_USERPWD, $login);

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
        'Connection: Keep-Alive',
        'Accept: application/json',
        'Content-Type: application/json; charset=utf-8'
    )
);

$response = curl_exec($ch);
$response_info = curl_getinfo($ch);
curl_close($ch);
于 2021-09-03T06:17:13.670 回答
0

您之前需要从 AAD 获取授权令牌

获得所有令牌后,您需要在请求 http 标头中添加授权

CURLOPT_HTTPHEADER => array(
    'Content-Type: application/json; charset=utf-8',
    'OData-MaxVersion: 4.0',
    'OData-Version: 4.0',
    'Accept: application/json',
    'Authorization: <put the token here completly with name>',
),
于 2017-07-27T09:52:06.087 回答