Есть ли способ проверить журналы для конкретного идентификатора запроса? - PullRequest
2 голосов
/ 07 ноября 2019

Я работал над подпиской, чтобы уведомлять мою заявку при получении электронного письма. Чтобы активировать подписку, я отправляю запрос POST на номер https://graph.microsoft.com/v1.0/subscriptions. Всякий раз, когда я отправляю запрос, я получаю следующую ошибку (обратите внимание, что это нормально работает при попытке из Graph Explorer):

response => {
    "error"=> {
        "code"=>"InvalidRequest", 
        "message"=>"Server could not process subscription creation payload.",
        "innerError"=> {
            "request-id"=>"e4a9aef5-89b0-4d9c-ac11-01e0c188ceee", 
            "date"=>"2019-11-07T13:15:50"
        }}}

Пример кода:

GRAPH_HOST = 'https://graph.microsoft.com'.freeze

def mail_noti token

    query = { 
        "changeType": "created,updated",
        "notificationUrl": "https://0d9fdb76.ngrok.io/calendar/notif_sub",
        "resource": "me/mailFolders('Inbox')/messages",
        "clientState": "secretClientValue",
        "expirationDateTime": "2019-11-08T18:23:45.9356913Z",
        "Authorization": "Bearer #{token}",
        "Accept": 'application/json'
    }

    headers = {
        Authorization: "Bearer #{token}",
        Accept: 'application/json'
    }

    endpoint = '/v1.0/subscriptions'

    binding.pry

    a =  HTTParty.post("#{GRAPH_HOST}#{endpoint}", body: query, headers: headers)
end

Ответы [ 2 ]

1 голос
/ 07 ноября 2019

body должен быть в формате application/json, но вы отправляете его как application/x-www-form-urlencoded. Вам нужно использовать .to_json:

HTTParty.post("#{GRAPH_HOST}#{endpoint}",
    :body => {
        "changeType": "created,updated",
        "notificationUrl": "https://0d9fdb76.ngrok.io/calendar/notif_sub",
        "resource": "me/mailFolders('Inbox')/messages",
        "clientState": "secretClientValue",
        "expirationDateTime": "2019-11-08T18:23:45.9356913Z",
        "Authorization": "Bearer #{token}",
        "Accept": 'application/json' 
    }.to_json,
    :headers => {
        Authorization: "Bearer #{token}",
        Accept: 'application/json',
        'Content-Type' => 'application/json'
    })
0 голосов
/ 08 ноября 2019

Конечная структура полезной нагрузки, которая работала для меня:

HTTParty.post("#{GRAPH_HOST}#{endpoint}", 
                    body:  {
                      expirationDateTime: "2019-11-09T18:23:45.9356913Z",
                      changeType: "created,updated",
                      resource: "me/mailFolders('Inbox')/messages",
                      notificationUrl: "https://e44e6608.ngrok.io/calendar/notif_sub",
                      clientState: "secretClientValue"
                    }.to_json, 
                    headers: {
                      Authorization: "Bearer #{token}",
                      Accept: 'application/json',
                      'Content-Type' => 'application/json'
                    }
                )

PS: всякий раз, когда возникает проблема с отправкой полезной нагрузки, убедитесь, что вы выполняете следующие шаги

  • Проверьте правильность заголовковособенно «Content-Type» и «Authorization» (если вы отправляете прямой http-запрос, вам необходимо добавить «Key»: «Authorization» & «Value»: Bearer # {token})
  • Проверьте,вы отправляете ключ «body»
  • Проверьте, отправляете ли вы все необходимые ключи в «body» для этого API
...