2013-10-09 2 views
1

Я пытаюсь получить эту работу https://developer.paypal.com/webapps/developer/docs/integration/direct/make-your-first-call/ Использование приложения Java + Jersey. Кажется, что я пропускаю что-то в параметрах POST.Как получить токен доступа PayPal, используя запрос REST

public String getPaypalToken() { 
    Client client = Client.create(); 
    WebResource webResource = client.resource("https://api.sandbox.paypal.com/v1/oauth2/token"); 
    MultivaluedMap<String, String> queryParams = new MultivaluedMapImpl(); 
    queryParams.add("username", CLIENT_ID + ":" + SECRET); 
    queryParams.add("grant_type", "client_credentials"); 
    ClientResponse response = webResource.accept("application/json").acceptLanguage("en_US").type("application/x-www-form-urlencoded").post(ClientResponse.class, queryParams); 
    return response.toString(); 
} 

Используя предыдущий код, который я получил: POST https://api.sandbox.paypal.com/v1/oauth2/token возвратил состояние ответа 401 Несанкционированное.

Это CURL параметр командной строки просто отлично работает:

curl -X POST 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" 

Любые предложения будут оценены. J.

ответ

1

Параметр -u в curl отправляет строчную строку «username: password», закодированную base64. Я не думаю, что добавление id/secret клиента в карту queryParams делает то же самое (если только Джерси не использует ключ «имя пользователя», иначе я не думаю, что это так).

Вы должны вместо этого попытаться

webResource.header ("Authorization", "Basic" + Base64.encode (CLIENT_ID + ":" + SECRET.getBytes()))

1

Просто разделяя мое решение:

Dictionary<string, string> sdkConfig = new Dictionary<string, string>(); 
sdkConfig.Add("mode", "sandbox"); 

string clientid = "<your client id>"; 
string secretid = "<your secret id>"; 
string accessToken = new OAuthTokenCredential(clientid, secretid, sdkConfig).GetAccessToken(); 

Я ранее сталкивался с несанкционированным ответом с помощью RestSharp, а затем нашел это. Я использую paypal .net sdk из пакета nuget. Reference.

+0

вы можете сказать, как попасть в андроид? –

+0

попробуйте это [статья] (https://techtrendzy.wordpress.com/2013/10/10/get-an-access-token-for-rest-api/) или [пример из PayPal] (https: // devtools -paypal.com/guide/pay_creditcard/java?interactive=ON&env=sandbox) вам понадобится SDK для остальной SDK PayPal для второй ссылки, а не только пример Android, но он находится на Java ... еще не работал на Android, если вы научите меня Android, возможно, мы сможем быстрее решить вашу проблему :)) – juniordeveloper

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