Инициирование приглашения Trustpilot с помощью Trustpilot API на Coldfusion

Я пытаюсь написать веб-приложение для отправки автоматических приглашений Trustpilot, однако при попытке отправить данные во втором CFHTTP для обработки приглашения каждый параметр типа в CFHTTPPARAM возвращает ошибку неподдерживаемого типа мультимедиа:

<cfset apiKey = "XXXXXXX">
<cfset secret = "YYYYY">

<cfset encAccess = apiKey & ":" & secret>
<cfset encAccess = ToBase64(encAccess)>
    
<cfset myurl = "https://api.trustpilot.com/v1/oauth/oauth-business-users-for-applications/accesstoken">

<!---Generate Access Token Call--->
<cfhttp url="#myurl#" result="myauth" method="POST">
  <cfhttpparam type="HEADER" value="Basic[#encAccess#]" name="Authorization"></cfhttpparam>
  <cfhttpparam type="HEADER" value="application/x-www-form-urlencoded" name="Content-Type"></cfhttpparam>
  <cfhttpparam type="FORMFIELD" value="password" name="grant_type"></cfhttpparam>
  <cfhttpparam type="FORMFIELD" value="[email protected]" name="username"></cfhttpparam>
  <cfhttpparam type="FORMFIELD" value="Password" name="password"></cfhttpparam>              
</cfhttp>


<cfset result = DeserializeJSON(#myauth.fileContent#)>
<cfset token = #result.access_token#>   


<!--SET DATA TO SEND FOR INVITION--->
<cfset mydata = "{
'consumerEmail': '[email protected]',
'replyTo': '[email protected]',
'referenceNumber': '11223344',
'consumerName': 'Consumer Name',
'locale': 'en-US',
'senderEmail': '[email protected]',
'serviceReviewInvitation': {
  'preferredSendTime': '2020-09-01T17:00:00', 
  'redirectUri': 'https://uk.trustpilot.com',
   ],
  'templateId': 'XXXYYYZZZ'
 },
'senderName': 'MyCompany'
}">

<cfset inviteurl = "https://invitations-api.trustpilot.com/v1/private/business-units/X1X1X1X1X1X1/email-invitations?token=" & token>

<cfhttp url="#inviteurl#" result="newresult" method="POST">
   <cfhttpparam value="#mydata#" name="request" type="FORMFIELD"></cfhttpparam>
</cfhttp>

<cfdump var="#newresult#">

Для справки, я пытаюсь следовать рекомендациям, изложенным здесь: https://developers.trustpilot.com/invitation-api#create-invitation(s)

Любая помощь по второй половине этого кода будет большим подспорьем.


person Sam Allen    schedule 02.09.2020    source источник


Ответы (1)


Я считаю, что API Trustpilot ожидает данные JSON в качестве тела запроса, но вы пытаетесь поместить его в поле формы. Пытаться:

<cfhttp url="#inviteurl#" result="newresult" method="POST">
    <cfhttpparam type="header" name="Content-Type" value="application/json" />
    <cfhttpparam type="body" value="#mydata#" />
</cfhttp>

Обратите внимание, что приведенное выше предполагает, что mydata уже является строкой, как в вашем примере. Если бы это все еще были структурированные данные, вы бы вместо этого использовали <cfhttpparam type="body" value="#serializeJson(mydata)#" />.

person Sev Roberts    schedule 03.09.2020