Как получить токен доступа 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. Ссылка.