2013-03-21 2 views
2

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

API documentation

<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

+0

Ваш код выглядит правильно для меня. Может ли быть признано, что ваш запрошенный isdn недействителен? – BKK

+0

@BenKoshy Я проверил, что все прошлое действительно. Я только что изменил номер перед публикацией здесь. – Dre

ответ

1

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

HTTP Методы

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

Ожидаемое "Content-Type" для POST является "применение/х-WWW-форм-urlencoded", однако мы также поддерживаем "приложения/JSON", "приложение/JSONRequest", "применение/х-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. Измените это значение в зависимости от того, что вы хотите.

+0

Такая же ошибка с использованием 'type =" formfield "' – Dre

+0

@ Возможно, вам также нужно включить кодировку символов. Я обновил свой пример кода. –

+0

Еще не повезло. Я также попробовал «закодирован =« да »», и это не сработало. – Dre

1

Попробуйте изменить в поле формы

<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 исправит это.

Смежные вопросы