Как получить токен доступа PayPal с помощью запроса REST

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

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 Unauthorized.

Этот параметр командной строки 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.

2 ответа

Опция -u в curl отправляет строку "username:password" в кодировке base64. Я не думаю, что добавление идентификатора клиента / секрета к карте queryParams делает то же самое (если Джерси не обрабатывает ключ 'username' по-другому, что я не думаю, что это делает).

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

webResource.header("Авторизация", "Базовый" + Base64.encode(CLIENT_ID + ":" + SECRET.getBytes()))

Просто делюсь своим решением:

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. Ссылка.

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