Nexmo API и CFHttp POST

Я пытаюсь использовать CFHttp для POST в Nexmo API.

API документация

<cfhttp url="https://rest.nexmo.com/number/buy/" method="post">
    <cfhttpparam name="api_key" value="#api.key#" type="url">
    <cfhttpparam name="api_secret" value="#api.secret#" type="url">
    <cfhttpparam name="country" value="US" type="url">
    <cfhttpparam name="msisdn" value="11234567890" type="url">
</cfhttp>

Я получаю статус 420 (неправильные параметры) при запуске этого.

Что я делаю неправильно?

Вот пример в PHP: API

2 ответа

Решение

Глядя на документацию API, мне кажется, что они ожидают, что поля будут значениями формы. Вот выдержка из документации здесь:

Методы HTTP

Все запросы отправляются методом HTTP POST или GET с использованием кодировки UTF-8 и значений в кодировке URL.

Ожидаемый "Content-Type" для POST - "application / x-www-form-urlencoded", однако мы также поддерживаем "application/json", "application/jsonrequest", "application/x-javascript", "text/json", "text/javascript", "text/x-javascript", "text/x-json" при публикации параметров в виде объекта JSON.

Поэтому попробуйте изменить свой код следующим образом:

<cfhttp url="https://rest.nexmo.com/number/buy/" method="post" charset="utf-8">
    <cfhttpparam name="Content-Type" value="application/x-www-form-urlencoded" type="header">
    <cfhttpparam name="Accept" value="application/xml" type="header">
    <cfhttpparam name="api_key" value="#api.key#" type="formField">
    <cfhttpparam name="api_secret" value="#api.secret#" type="formField">
    <cfhttpparam name="country" value="US" type="formField">
    <cfhttpparam name="msisdn" value="11234567890" type="formField">
</cfhttp>

Обратите внимание, что для меня установлен заголовок Accept application/xml, Согласно документам это также может быть application/json, Измените это значение в зависимости от того, что вы хотите.

Попробуйте перейти в форму поля

<cfhttp url="https://rest.nexmo.com/number/buy/" method="post">
    <cfhttpparam name="api_key" value="#api.key#" type="FormField">
    <cfhttpparam name="api_secret" value="#api.secret#" type="FormField">
    <cfhttpparam name="country" value="US" type="FormField">
    <cfhttpparam name="msisdn" value="11234567890" type="FormField">
</cfhttp>

Эта документация ищет сообщение POST и отправку комбо-сообщения / получения. Исходя из того, что вы отправляете, вы не отправляете переменные. FormField это исправит.

Другие вопросы по тегам