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 无效的主要内容,如果未能解决你的问题,请参考以下文章
使用 Windows 身份验证远程访问的 Visual Basic Sql 连接字符串