Paypal Basic 访问身份验证中的 URL 无效

Posted

技术标签:

【中文标题】Paypal Basic 访问身份验证中的 URL 无效【英文标题】:Invalid URL in Paypal Basic access authentication 【发布时间】:2014-05-02 02:54:21 【问题描述】:

您好,感谢您的帮助。

我尝试从我的 android 应用获取 PayPal Oauth refresh_token。

卷曲代码是:

curl 'https://api.paypal.com/v1/oauth2/token' \
-H "Content-Type: application/x-www-form-urlencoded" \
-H "Authorization: Basic QWZV...==" \
-d 'grant_type=authorization_code&response_type=token&redirect_uri=urn:ietf:wg:oauth:2.0:oob&code=EBYhRW3ncivudQn8UopLp4A28...'

我喜欢这个。

HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("https://api.sandbox.paypal.com/v1/oauth2/token");

try 
String text=CONFIG_CLIENT_ID+":"+SECRET;
        byte[] data = text.getBytes("UTF-8");
        String base64 = Base64.encodeToString(data, Base64.DEFAULT);

        httppost.addHeader("content-type", "application/x-www-form-urlencoded");
        httppost.addHeader("Authorization", "Basic "+base64);

        StringEntity se=new StringEntity("grant_type=authorization_code&response_type=token&redirect_uri=urn:ietf:wg:oauth:2.0:oob&code="+authorization.getAuthorizationCode());
        httppost.setEntity(se);

// Execute HTTP Post Request
HttpResponse response = httpclient.execute(httppost);

 catch (ClientProtocolException e) 
// TODO Auto-generated catch block
 catch (IOException e) 
// TODO Auto-generated catch block

但我得到以下响应:

网址无效

请求的网址“/v1/oauth2/token”无效。


编辑编辑编辑编辑编辑编辑编辑编辑编辑

如果我使用

HttpPost httppost = new HttpPost("https://api.sandbox.paypal.com")

我明白了:

网址无效

请求的网址“/”无效。

参考 #9.8c5e6cc1.1395837240.16f01684


编辑编辑编辑编辑编辑编辑编辑编辑编辑

以下代码似乎可以正常工作,

感谢 Sabuj Hassan 的回答。

HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("https://api.sandbox.paypal.com/v1/oauth2/token");

try 
String text=CONFIG_CLIENT_ID+":"+SECRET;
        byte[] data = text.getBytes("UTF-8");
        String base64 = Base64.encodeToString(data, Base64.NO_WRAP);

        httppost.addHeader("content-type", "application/x-www-form-urlencoded");
        httppost.addHeader("Authorization", "Basic "+base64);

        StringEntity se=new StringEntity("grant_type=authorization_code&response_type=token&redirect_uri=urn:ietf:wg:oauth:2.0:oob&code="+authorization.getAuthorizationCode());
        httppost.setEntity(se);

// Execute HTTP Post Request
HttpResponse response = httpclient.execute(httppost);

 catch (ClientProtocolException e) 
// TODO Auto-generated catch block
 catch (IOException e) 
// TODO Auto-generated catch block

但现在我从 PayPal 沙箱服务器收到以下响应:

"error":"invalid_request","error_description":"Invalid auth code"

【问题讨论】:

https://api.sandbox.paypal.com/v1/oauth2/token 是正确的,如果你漏掉v1/oauth2/token 然后用你的浏览器访问网站,它会给出 404 错误。但这不起作用的原因可能是因为您试图将数据发布到https url,而不是普通的http。它有点复杂,您可以忽略 SSL 证书,但就安全性而言,这是不推荐的。见:***.com/questions/5206010/… 你好,你能说出什么是authorization.getAuthorizationCode() 【参考方案1】:

您的代码对我来说似乎没问题。它可以很好地将数据发送到我的托管服务器。所以我怀疑问题出在您的以下行:

String base64 = Base64.encodeToString(data, Base64.DEFAULT);

打印 base64 并查看它是否与 curl 命令的标题完全匹配。我想相信它是不同的。可能添加了换行符(在 base64 中)。

所以用这个:

String base64 = Base64.encodeToString(data, Base64.NO_WRAP);

请参阅其他 encoding flags 的文档。

【讨论】:

感谢 Sabuj,这似乎有效,但现在我收到以下回复 "error":"invalid_request","error_description":"Invalid auth code" 请知道吗??? 我稍后会检查它。此时,请使用当前代码更新您的代码。另外,authorization.getAuthorizationCode() 是否需要进行 urlencoded?是否有 & = ? 等字符? 感谢 Sabuj,我尝试过 urlencode,但结果相同 :-(((... 非常感谢您的帮助! SUCCESS !!!,我将 PayPal 配置切换到 ENVIRONMENT_SANDBOX 并使用沙盒帐户登录,我得到了刷新和访问令牌!谢谢萨布杰!!!! @SabujHassan 你能帮我用贝宝吗

以上是关于Paypal Basic 访问身份验证中的 URL 无效的主要内容,如果未能解决你的问题,请参考以下文章

Basic认证方式访问url

使用 Windows 身份验证远程访问的 Visual Basic Sql 连接字符串

IOS中的paypal sdk Touch id身份验证

使用 HTTP-Basic 身份验证发出 HTTP GET 请求

如何使用 Cloudfront 和基本身份验证?

C#进阶系列——WebApi 身份认证解决方案:Basic基础认证