Попытка конвертировать JSON HTTP сообщение в сообщение CFHTTP - PullRequest
1 голос
/ 25 сентября 2019

Я пытаюсь правильно закодировать вызов API REST Firebase Cloud Messaging через CFHTTP, воссоздав вывод успешного сообщения консоли Firebase.Ниже указано, что консоль сообщает правильный код

POST /fcm/send HTTP/1.1
Host: fcm.googleapis.com
Content-Type: application/json
Authorization: key=AIzcXE
cache-control: no-cache

{   
  "to": "e5kpn8h9bR95NuXVHTOi50bCURG0BS4S6ccUm3X5q",
  "priority": "high",
  "notification" : {
    "title": "",
    "body" : "This is the actual message content",
    "sound": "default", 
    "image": "https://gladevalleyanimalhospital.net/wp-content/uploads/2017/03/raster-7.png"
  }
} 

Это наш текущий код CFHTTP:

<cfhttp method="Post" url="https://fcm.googleapis.com/fcm/send"> 
   <cfhttpparam type="header" name="Authorization" value="key=AIzXE">
   <cfhttpparam type="header" name="Content-Type" value="application/json">
   <cfhttpparam type="header" name="Postman-Token" value="e19b8abf3f9">
   <cfhttpparam type="header" name="cache-control" value="no-cache">

   <cfhttpparam type="Formfield" value="3569D24982E3B" name="to"> 
   <cfhttpparam type="Formfield" value="high" name="priority"> 
   <cfhttpparam type="Formfield" value="Test" name="title">
   <cfhttpparam type="Formfield" value="This is the actual message content" name="body"> 
   <cfhttpparam type="Formfield" value="https://gladevalleyanimalhospital.net/wp-content/uploads/2017/03/raster-7.png" name="image"> 
</cfhttp>

Кажется, проблема возникает при обработке полей формы.Я получаю сообщение об ошибке ниже, которая возникает при обработке первого поля формы "to".

JSON_PARSING_ERROR: неожиданный символ (t) в позиции 0.

Любая помощьбудет принята с благодарностью.Спасибо !!!

1 Ответ

5 голосов
/ 25 сентября 2019

API ожидает строку JSON в качестве запроса body , но код передает все значения отдельно, вместо этого в виде полей формы.Избавьтесь от всех параметров поля формы и создайте единую структуру с соответствующими ключами и значениями:

<cfset bodyData = {  "to": "***the_message_recipient_id_here****",
                     "priority": "high",
                     "notification" : {
                       "title": "",
                       "body" : "This is the actual message content",
                       "sound": "default", 
                       "image": "https://example.com/someimage-name.png"
                      }
                } >

Затем сериализуйте ее как JSON и отправьте, используя type="body":

<cfhttp method="Post" url="https://fcm.googleapis.com/fcm/send"> 
   <cfhttpparam type="header" name="Authorization" value="key=AIzXE">
   <cfhttpparam type="header" name="Content-Type" value="application/json">
   <cfhttpparam type="header" name="cache-control" value="no-cache">

   <cfhttpparam type="body" value="#serializeJSON( bodyData )#"> 
</cfhttp>
...