Полное уведомление о привязке устройства REST не работает для меня - PullRequest
0 голосов
/ 16 мая 2019

Я звоню в REST call с помощью PHP-curl, чтобы завершить уведомление устройства, переданное из официального документа . ниже мой код

<?php

$curl = curl_init();
curl_setopt_array($curl, array(
  CURLOPT_URL => "https://MYHUBNAME.azure-devices.net/devices/MYDVCID/messages/deviceBound/DVCTAG?api-version=2018-06-30",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "DELETE",
  CURLOPT_POSTFIELDS => "",
  CURLOPT_HTTPHEADER => array(
    "Accept: application/json",
    "Authorization: MYSASTOKEN",
    "Cache-Control: no-cache",
    "Connection: keep-alive",
    "Host: MYHUBHOST",
    "UserAgent: Microsoft.Azure.Devices/1.17.2",
    "accept-encoding: gzip, deflate",
    "cache-control: no-cache",
    "content-length: "
  ),
));

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
  echo "cURL Error #:" . $err;
} else {
  echo $response;
}

В ответе я всегда получаю ответ JSON ниже

{
  "Message": "{"errorCode":400004,"trackingId":"XXXXXXXXX-G:7-TimeStamp:XXXXXXXX","message":"BadRequest","timestampUtc":"XXXXXXXXX"}",
  "ExceptionMessage": ""
}

Я много пытался это исправить, но не понял, пожалуйста, помогите мне

1 Ответ

0 голосов
/ 17 мая 2019

Похоже, вы используете недопустимое значение ETAG в запросе. Я просто утомил это, используя Postman с действительными и недействительными значениями ETAG - с недопустимым значением ETAG я вижу то же сообщение об ошибке:

{
    "Message": "{\"errorCode\":400004,\"trackingId\":\"XXXXXXXXXXXXXXXXX-G:19-TimeStamp:05/17/2019 09:16:20\",\"message\":\"BadRequest\",\"timestampUtc\":\"2019-05-17T09:16:20.4954666Z\"}",
    "ExceptionMessage": ""
}

С действующим ETAG я вижу ожидаемое возвращенное состояние 204. Я скопировал значение ETAG из заголовков ответа, полученных из запроса GET «Получить уведомление о привязке устройства».

Вот файл Почтальона, который я использовал:

{
    "info": {
        "_postman_id": "f978a27b-0ad0-4e08-a38f-2749f4cd5fcb",
        "name": "IoT Hub interactions",
        "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
    },
    "item": [
        {
            "name": "Receive Device Bound Notification",
            "request": {
                "method": "GET",
                "header": [
                    {
                        "key": "Authorization",
                        "value": "SharedAccessSignature sr=XXXXXXX",
                        "description": "Generated using VS Code extension",
                        "type": "text"
                    }
                ],
                "url": {
                    "raw": "https://MYHUB.azure-devices.net/devices/MyTestDevice/messages/deviceBound?api-version=2018-06-30",
                    "protocol": "https",
                    "host": [
                        "MYHUB",
                        "azure-devices",
                        "net"
                    ],
                    "path": [
                        "devices",
                        "MyTestDevice",
                        "messages",
                        "deviceBound"
                    ],
                    "query": [
                        {
                            "key": "api-version",
                            "value": "2018-06-30"
                        }
                    ]
                },
                "description": "See: https://docs.microsoft.com/en-us/rest/api/iothub/device/receivedeviceboundnotification"
            },
            "response": []
        },
        {
            "name": "Complete Device Bound Notification",
            "request": {
                "method": "DELETE",
                "header": [
                    {
                        "description": "Generated using VS Code extension",
                        "key": "Authorization",
                        "type": "text",
                        "value": "SharedAccessSignature sr=XXXXXXXX"
                    }
                ],
                "url": {
                    "raw": "https://MYHUB.azure-devices.net/devices/MyTestDevice/messages/deviceBound/{etag}?api-version=2018-06-30",
                    "protocol": "https",
                    "host": [
                        "MYHUB",
                        "azure-devices",
                        "net"
                    ],
                    "path": [
                        "devices",
                        "MyTestDevice",
                        "messages",
                        "deviceBound",
                        "{etag}"
                    ],
                    "query": [
                        {
                            "key": "api-version",
                            "value": "2018-06-30"
                        }
                    ]
                },
                "description": "See: https://docs.microsoft.com/en-us/rest/api/iothub/device/completedeviceboundnotification"
            },
            "response": []
        }
    ]
}
...