最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

关于新浪微博与腾讯微博从Oauth1.0升级到Oauth2.0的过程

来源:动视网 责编:小采 时间:2020-11-09 07:37:11
文档

关于新浪微博与腾讯微博从Oauth1.0升级到Oauth2.0的过程

关于新浪微博与腾讯微博从Oauth1.0升级到Oauth2.0的过程:下载地址~ http://download.csdn.net/detail/zhangnianxiang/4375685 新浪微博 曾经@微博API 新浪那边表示 旧版的Oauth 1.0a将在不久的2012.9.1号停止。这个是一个很苦的消息。意味着涉及微博的都要修改。 Oauth2.0相比较于Oauth1.0的话 流
推荐度:
导读关于新浪微博与腾讯微博从Oauth1.0升级到Oauth2.0的过程:下载地址~ http://download.csdn.net/detail/zhangnianxiang/4375685 新浪微博 曾经@微博API 新浪那边表示 旧版的Oauth 1.0a将在不久的2012.9.1号停止。这个是一个很苦的消息。意味着涉及微博的都要修改。 Oauth2.0相比较于Oauth1.0的话 流


下载地址~ http://download.csdn.net/detail/zhangnianxiang/4375685 新浪微博 曾经@微博API 新浪那边表示 旧版的Oauth 1.0a将在不久的2012.9.1号停止。这个是一个很苦的消息。意味着涉及微博的都要修改。 Oauth2.0相比较于Oauth1.0的话 流程少了很多,其中

下载地址~

http://download.csdn.net/detail/zhangnianxiang/4375685



新浪微博

曾经@微博API 新浪那边表示 旧版的Oauth 1.0a将在不久的2012.9.1号停止。这个是一个很苦逼的消息。意味着涉及微博的都要修改。

Oauth2.0相比较于Oauth1.0的话 流程少了很多,其中一点就是签名。之前都是用signpost这个开源项目辅助。现在完全可以去掉了


好吧。废话不说了。

新浪微博Oauth2.0认证的官方说明

http://open.weibo.com/wiki/Oauth2


简单步骤:1获取code 2获取accessToken 3使用accessToken访问api

新浪的这份授权机制还是比较详细。理解起来比较容易

接口 说明
OAuth2/authorize 请求用户授权Token
OAuth2/access_token 获取授权过的Access Token
OAuth2/get_oauth2_token OAuth1.0的Access Token更换至OAuth2.0的Access Token

步骤1http://open.weibo.com/wiki/Oauth2/authorize

获取code

请求参数

必选 类型及范围 说明
client_id true string 申请应用时分配的AppKey。
redirect_uri true string 授权回调地址,站外应用需与设置的回调地址一致,站内应用需填写canvas page的地址。
response_type false string 返回类型,支持code、token,默认值为code。
state false string 用于保持请求和回调的状态,在回调时,会在Query Parameter中回传该参数。
display false string 授权页面的终端类型,取值见下面的说明。


https://api.weibo.com/oauth2/authorize?client_id=YOUR_CLIENT_ID&response_type=code&redirect_uri=YOUR_REGISTERED_REDIRECT_URI

值得注意的是这边的redirect_uri 必须与 申请的应用那边设置(高级设置里面)的回调地址一致。否则就会出现 error:redirect_uri_mismatch.
这是网页载入授权界面,用户填完账号密码之后按下确定 服务器将返回一个“回调地址+code=xxxxx”的URL(如果是腾讯微博还有openid和openkey等等) 把code是步骤2的关键
步骤2 获取accessToken
API https://api.weibo.com/oauth2/access_token
将code等参数 以POST传给服务器将返回
 {
 "access_token": "ACCESS_TOKEN",
 "expires_in": 1234,
 "remind_in":"798114",
 "uid":"12341234"
 }

这些数据都是要做数据持久化管理的。 腾讯微博返回稍有不同,但是并不影响
步骤3 访问API


研究中遇到的一些问题 1.腾讯微博 那群脑残的腾讯微博把appke和secret变成 ClientID和ClientSecret
oAuth.setClientId(StatcParame.T_CONSUMER_KEY);
oAuth.setClientSecret(StatcParame.T_CONSUMER_SECRET);
下面直接贴源码了
1 sina webview承载授权页面的设置
	web=(WebView)findViewById(R.id.web);
	web.getSettings().setJavaScriptEnabled(true);
	web.getSettings().setSupportZoom(true);
	web.getSettings().setBuiltInZoomControls(true);
	web.setWebViewClient(new WebViewC()); 
WebviewClient
class WebViewC extends WebViewClient{
	@Override
 public void onPageStarted(WebView view, String url, Bitmap favicon) {
	 super.onPageStarted(view, url, favicon);
	 Log.v("aaa", "===onPageStarted==="+url);
	 if(url.contains("code=")){
	try {
	Intent intent = new Intent(Oauth2Activity.this,MainActivity.class);
	 	Uri uri = Uri.parse(url);
	String code = uri.getQueryParameter("code");
	String openid =uri.getQueryParameter("openid");
	String openkey=uri.getQueryParameter("openkey");
	editor.putString(StatcParame.T_OPEN_ID, openid);
	editor.putString(StatcParame.T_OPEN_KEY, openkey);
	HttpClient httpclient=MyCountHttpClient.getNewHttpClient();
	URI accessToken = null;
	List parameters=new ArrayList();
	//必须编码,否则无法向服务器发送微博
	if(codeFlag==1){
	parameters.add(new BasicNameValuePair("client_id", StatcParame.S_CONSUMER_KEY));
	parameters.add(new BasicNameValuePair("client_secret", StatcParame.S_CONSUMER_SECRET));
	parameters.add(new BasicNameValuePair("redirect_uri", StatcParame.S_CALLBACK));
	
	accessToken = URI.create(StatcParame.S_API_access_token);
	intent.putExtra("mode", 1);
	}else if(codeFlag ==2){
	parameters.add(new BasicNameValuePair("client_id", StatcParame.T_CONSUMER_KEY));
	parameters.add(new BasicNameValuePair("client_secret", StatcParame.T_CONSUMER_SECRET));
	parameters.add(new BasicNameValuePair("redirect_uri", StatcParame.T_CALLBACK));
	
	accessToken = URI.create(StatcParame.T_API_access_token);
	
	intent.putExtra("mode", 2);
	}
	parameters.add(new BasicNameValuePair("grant_type", "authorization_code"));
	parameters.add(new BasicNameValuePair("code", code));
	
	
	HttpPost post=new HttpPost(accessToken);
	HttpResponse response=null;
	
	post.setEntity(new UrlEncodedFormEntity(parameters ,HTTP.UTF_8) );
	post.getParams().setBooleanParameter(CoreProtocolPNames.USE_EXPECT_CONTINUE, false);
	
	 response = httpclient.execute(post);
	 if(codeFlag==1){
	 JSON.GetOauth(sharedpre,Utils.getResponseText(response));
	 }else if(codeFlag==2){
	 String tempUrl = StatcParame.T_CALLBACK+"?"+Utils.getResponseText(response);
	 Uri temp = Uri.parse(tempUrl);
	 String access_token = temp.getQueryParameter("access_token");
	 String expires_in=temp.getQueryParameter("expires_in");
	 String name=temp.getQueryParameter("name");
	 editor.putString(StatcParame.T_ACCESS_TOKEN, access_token);
	 editor.putString(StatcParame.T_EXPIRES_IN, expires_in);
	 editor.putString(StatcParame.T_NAME, name);
	 editor.commit();
	 }
	 startActivity(intent);
	 Oauth2Activity.this.finish();
	} catch (Exception e) {
	// TODO Auto-generated catch block
	e.printStackTrace();
	}
	 }
 }
	}

这个方法集合了sina和tencent的处理

这步走完就拿到ACCESSTOKEN了


下面贴个发布微博的方法


SINA发送一个带图片的微博

Weibo weibo = Weibo.getInstance();
	AccessToken accessToken = new AccessToken(shared.getString(StatcParame.S_ACCESS_TOKEN, ""), StatcParame.S_CONSUMER_SECRET);
	accessToken.setExpiresIn(shared.getString(StatcParame.S_EXPIRES_IN, ""));
	weibo.setAccessToken(accessToken);
	weibo.setupConsumerConfig(StatcParame.S_CONSUMER_KEY, StatcParame.S_CONSUMER_SECRET);
	weibo.setRedirectUrl("http://www.sina.com.cn");

	try {
	String msg = URLEncoder.encode(body, HTTP.UTF_8);
	
	 WeiboParameters bundle = new WeiboParameters();
	 bundle.add("status", msg);
	 bundle.add("pic", "/sdcard/1.jpg");
	 String rlt = "";
	 String url = Weibo.SERVER + "statuses/upload.json";
	 
	 Utility.setAuthorization(new Oauth2AccessTokenHeader());
	 rlt = weibo.request(context, url, bundle, Utility.HTTPMETHOD_POST, weibo.getAccessToken());

	Toast.makeText(context, rlt, 1000).show();
	Log.v("aaa","Successfully upload the status to ["+ rlt+ "].");
	return "OK";
	} catch (Exception e1) {
	e1.printStackTrace();
	}


TENCent发送一条微博

OAuthV2 oAuth =new OAuthV2();
	oAuth.setAccessToken(shared.getString(StatcParame.T_ACCESS_TOKEN, ""));
	oAuth.setOauthVersion("2.a");
	oAuth.setClientIP("117.25.173.11");
	oAuth.setOpenid(shared.getString(StatcParame.T_OPEN_ID, ""));
	oAuth.setOpenkey(shared.getString(StatcParame.T_OPEN_KEY, ""));
	oAuth.setClientId(StatcParame.T_CONSUMER_KEY);
	oAuth.setClientSecret(StatcParame.T_CONSUMER_SECRET);
	

	try {
	TAPI api = new TAPI("2.a");
	String respone = api.add(oAuth, "json","abcc","117.25.173.11","","","0");
	Toast.makeText(context, respone, 1000).show();
	} catch (Exception e) {
	// TODO Auto-generated catch block
	e.printStackTrace();
	}


源码之后上传。

联系 zhangnianxiang@gmail.com


文档

关于新浪微博与腾讯微博从Oauth1.0升级到Oauth2.0的过程

关于新浪微博与腾讯微博从Oauth1.0升级到Oauth2.0的过程:下载地址~ http://download.csdn.net/detail/zhangnianxiang/4375685 新浪微博 曾经@微博API 新浪那边表示 旧版的Oauth 1.0a将在不久的2012.9.1号停止。这个是一个很苦的消息。意味着涉及微博的都要修改。 Oauth2.0相比较于Oauth1.0的话 流
推荐度:
标签: QQ 微博 新浪微博
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top