Nexmo API и CFHttp POST
Я пытаюсь использовать CFHttp для POST в Nexmo 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 это исправит.