1

我试图让这个工作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。

4

2 回答 2

1

curl 中的 -u 选项发送一个 base64 编码的“用户名:密码”字符串。我不认为向 queryParams 映射添加客户端 ID / 秘密会起到同样的作用(除非 Jersey 以不同的方式对待“用户名”键,我认为它不会这样做)。

你应该尝试

webResource.header("授权", "基本" + Base64.encode(CLIENT_ID + ":" + SECRET.getBytes()))

于 2013-10-10T05:49:21.817 回答
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 遇到未经授权的响应,然后发现了这个。我正在使用 nuget 包中的 paypal .net sdk。 参考。

于 2015-08-07T01:54:23.113 回答