2013-08-14 10 views
2

Я пытаюсь реализовать API REST Paypal для приложения в ColdFusion. У меня есть мое приложение, настроенное в paypal, поэтому у меня есть секретный ключ client_id &.ColdFusion Paypal REST API oAuth

https://developer.paypal.com/webapps/developer/docs/integration/direct/make-your-first-call/

Этот URL показывает пример локон называют, что я пытаюсь воспроизвести в CF:

curl https://api.sandbox.paypal.com/v1/oauth2/token \ 
-H "Accept: application/json" \ 
-H "Accept-Language: en_US" \ 
-u "EOJ2S-Z6OoN_le_KS1d75wsZ6y0SFdVsY9183IvxFyZp:EClusMEUk8e9ihI7ZdVLF5cZ6y0SFdVsY9183IvxFyZp" \ 
-d "grant_type=client_credentials" 

вот мой CF вызов (измененная ключи немного для моей тестовой учетной записи)

<cfhttp method="post" url="https://api.sandbox.paypal.com/v1/oauth2/token" result="test"> 
<cfhttpparam type="header" name="authorization" value="ASfK_BCZ54849na-kMSKvrKEk4WNDkoIikQlTfsI3nS-ghY1VTzH5q2pU:EC-7qhACEQ7XGjo2dU4gFPJDH3Et0KeMx0Z5Xmbf9PnhPE5diq-CO" > 
<cfhttpparam type="header" name="content-type" value="application/x-www-form-urlencoded" > 
<cfhttpparam type="formfield" name="grant_type" value="client_credentials" > 

ответ Я получаю это «invalid_client "-" недопустимые учетные данные клиента ". Документы заявляют, что auhorization следует передавать в виде «client_id: secret». Я играл вокруг изменения имен моего поля, пытался передать его в заголовке и пытался передать его как поле формы, но безрезультатно. Лучшее, что я могу сказать, paypal не требует метода подписи и заявляет, что он использует базовый http auth.

Может ли кто-нибудь увидеть, чего я здесь не вижу?

ответ

2

Я отвечаю здесь из памяти, но я, кажется, помню, что для того, чтобы установить тип контента в application/json, вам необходимо установить его в application/x-www-form-urlencoded.

+0

Я изменил его на: , и теперь он возвращает пустую строку. Я выполнял инструкции на этой папской ссылке, в которой говорилось: «Примечание. Убедитесь, что запросы для токена доступа задают тип содержимого как application/x-www-form-urlencoded. Это делается по умолчанию в вызовах cURL». Это то, что я пытаюсь сделать в тот момент, который извлекает токен. – Dan

+1

У меня сейчас работает, и решение должно было передать учетные данные в строке CFHTTP: Dan

+1

@Dan - Вы должны опубликовать это как отдельные ответы, так что это более заметно. – Leigh

3

Я не уверен, почему ваше решение не работало для вас, но не я. Это заставило меня начать, но мне нужно было настроить мою, чтобы получить запрос. Обратное проектирование сценария PHP Я придумал следующее:

<cfset clientid = "***************************"/> 
<cfset secret = "***************************"/> 

<cfhttp method="post" url="https://api.sandbox.paypal.com/v1/oauth2/token" result="local.test"> 
    <cfhttpparam type="header" name="Content_Type" value="application/json" > 
    <cfhttpparam type="formfield" name="grant_type" value="client_credentials" > 
    <cfhttpparam type="header" name="Authorization" value="BasiC#ToBase64(clientid & ":" & secret)#"> 
</cfhttp> 

Надеюсь, это спасет кого-то еще 3 часа их субботы. Теперь я собираюсь разобраться в следующих шагах. Если кто-то заинтересован в том, чтобы превратить это в полное SDK-решение для API-интерфейса PayPal REST, дайте мне знать, мне может быть интересно сотрудничать.

+0

спасибо! Это только помогло мне получить токен пользователя. Я знаю, что это старо, но только вопрос, я не играл много с oauth, но, глядя на документы, что указывает вам на использование «BasiC# ToBase64 (.....: ....) # ». это сбило меня с толку. – steve