`
Danny_zhao
  • 浏览: 9703 次
  • 性别: Icon_minigender_2
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

android 调用腾讯微博接口

阅读更多

 

腾讯微博Android客户端开发——获取未授权的Request Token .

 

给大家介绍下腾讯微博API通过以下步骤来完成认证授权:

1.获取未授权的Request Token(temporary credentials)

2.请求用户授权Request Token

3.使用授权后的Request Token换取Access Token(token credentials)

本次给大家介绍如何获取未授权的Request Token。

在腾讯微博开放平台的API中介绍了获取Request Token的URL地址、所需要的参数以及返回内容。

    获取request_token

    URL:https://open.t.qq.com/cgi-bin/request_token

    格式:xml,json

    HTTPS请求方式:GET

    是否需要鉴权:true

    请求数限制:true

    请求参数:

    oauth_callback:回调URL 如果是桌面应用或手机应用没有回调URL,采用pin码方式,请填上 oauth_callback=null

    oauth_consumer_key:你申请的appkey

    oauth_nonce:随机串(32个字符长度)随机生成,只能使一次,与时间戳一起 防重放

    oauth_signature:oauth请求签名 oauth请求的签名,根据oauth协议中算法生成basestring 后,用appsecret 对basestring 经hmac_sha1生成的签名串

    oauth_signature_method:签名方法(HMAC-SHA1)

    oauth_timestamp:时间戳 你的请求当前时间戳 (你的服务器时间你定要准确,不然请求会被拒绝掉)

    oauth_version:oauth版本号(填 1.0 )

    使用示例如下:

    https://open.t.qq.com/cgi-bin/request_token?oauth_callback=http%3A%2F%2Fqunmgr.qq.com%2Foauthapi%2Fcallback.php&oauth_consumer_key=0aae7ba5c10d4b939694b0b3b9ffe8ac&oauth_nonce=b788149731e0ed75daa03a6e1e30427c&oauth_signature=zO5%2FgT%2FP6tbhBBZVuoyfjPwjdxY%3D&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1288932298&oauth_version=1.0

    返回结果:

    oauth_token=a63f4a0e1242462fb8c11e53159ba294&oauth_token_secret=40ece707e064128e4fec692e3c09c692&oauth_callback_confirmed=true

    返回结果说明:

    oauth_token:返回的request_token

    oauth_token_secret:返回的request_secret

    oauth_callback_confirmed:回调确认

使用流程图表示则十分的简单:

 

其中URL地址和请求方式我们已经可以直接指定:
view plaincopy to clipboardprint?

    String url = "https://open.t.qq.com/cgi-bin/request_token"; 
    String httpMethod = "GET"; 

请求所需的参数除了oauth_signature外我们都可以直接指定或者调用前面将结果的方法:

 

 List params = new ArrayList();  
    String timestamp = generateTimeStamp();  
    String nonce = generateNonce(false);  

    params.add(new Parameter("oauth_consumer_key", CONSUMER_KEY));  
    params.add(new Parameter("oauth_signature_method", SIGNATURE_METHOD));  
    params.add(new Parameter("oauth_timestamp", timestamp));  
    params.add(new Parameter("oauth_nonce", nonce));  
    params.add(new Parameter("oauth_callback", "null"));  
    params.add(new Parameter("oauth_version", "1.0"));  

 

 

 

同时发送请求和处理返回信息的方法在前面已给大家介绍,我们也可直接调用:
  

  try  
    {  
    SyncHttp http = new SyncHttp();  

    String result = http.httpGet(url, params);  
    } catch (Exception e)  
    {  
    e.printStackTrace();  
    }  

 

 

 

下面我们所需要处理的就是得到oauth_signature的值。

通过阅读帮助文档我们可得知oauth_signature是将请求源串以及密钥根据一定签名方法生成的签名值,用来提高传输过程参数的防篡改性。

签名值的生成共有3个步骤:构造源串,构造密钥,生成签名值。

Step 1.构造源串

第1步:将请求的URI路径进行URL编码。

第2步:将除“oauth_signature”外的所有参数按key进行字典升序排列。

第3步:将第2步中排序后的参数(key=value)用&拼接起来,并进行URL编码。

第4步:将HTTP请求方式(GET或者POST)以及第1步和第3步中的字符串用&拼接起来。

Step 2. 构造密钥

密钥由2部分内容用“&”拼接起来:

oauth_consumer_secret & oauth_token_secret

Step 3. 生成签名值

1. 使用HMAC-SHA1加密算法,将Step1中的到的源串以及Step2中得到的密钥进行加密。

2. 然后将加密后的字符串经过Base64编码,即得到oauth_signature签名参数的值。

 

代码如下:

 

    String tokenSecret = "";  
    // App Key   

    String consumer_key = "dabd7b3bdf744acc9777a506c74c285e";  
    // App Secret   
    String consumer_secret = "04fb0ca42cb64ab06ef606b49579c9cb";  
    // 签名方法   
    String signature_method = "HMAC-SHA1";  
    // 请求URL   
    String url = "https://open.t.qq.com/cgi-bin/request_token";  
    // 请求方式   
    String httpMethod = "GET";  
      
    // 保存参数集合   
    List<Parameter> params = new ArrayList<Parameter>();  
    // 得到时间戳   
    String timestamp = generateTimeStamp();  
    // 单次值   
    String nonce = generateNonce();  
    // 添加参数   
    params.add(new Parameter("oauth_consumer_key", consumer_key));  
    params.add(new Parameter("oauth_signature_method", signature_method));  
    params.add(new Parameter("oauth_timestamp", timestamp));  
    params.add(new Parameter("oauth_nonce", nonce));  
    params.add(new Parameter("oauth_callback", "null"));  
    params.add(new Parameter("oauth_version", "1.0"));  
      
    // Step 1.构造源串:HTTP请求方式 & urlencode(uri) & urlencode(a=x&b=y&...)   
    StringBuilder baseStringBuilder = new StringBuilder();  
    baseStringBuilder.append(httpMethod);  
    baseStringBuilder.append("&");  
    baseStringBuilder.append(encode(url));  
    baseStringBuilder.append("&");  
    // 所有参数按key进行字典升序排列   
    Collections.sort(params);  
    for (Parameter param : params)  
    {  
        String name = encode(param.getName());  
        String value = encode(param.getValue());  
        baseStringBuilder.append(name);  
        baseStringBuilder.append("%3D"); // 字符 =   
        baseStringBuilder.append(value);  
        baseStringBuilder.append("%26"); // 字符 &   
    }  
    // 删除末尾的%26   
    baseStringBuilder.delete(baseStringBuilder.length() - 3, baseStringBuilder.length());  
    String baseString = baseStringBuilder.toString();  
      
    // Step 2. 构造密钥   
    String oauthKey = "";  
    if (null == tokenSecret || tokenSecret.equals(""))  
    {  
        oauthKey = encode(consumer_secret) + "&";  
    } else  
    {  
        oauthKey = encode(consumer_secret) + "&" + encode(tokenSecret);  
    }  
      
    // 生成签名值   
    byte[] encryptBytes = HMAC_SHA1.HmacSHA1Encrypt(baseString, oauthKey);  
    String signature = Base64.encode(encryptBytes);  
      
    params.add(new Parameter("oauth_signature", signature));  
      
    // 构造传递参数字符串   
    StringBuilder urlBuilder = new StringBuilder();  
    for (Parameter param : params)  
    {  
        urlBuilder.append(param.getName());  
        urlBuilder.append("=");  
        urlBuilder.append(param.getValue());  
        urlBuilder.append("&");  
    }  
    urlBuilder.deleteCharAt(urlBuilder.length() - 1);  
    String urlParams = urlBuilder.toString();  
      
    SyncHttp http = new SyncHttp();  
    String result = http.httpGet(url, urlParams);  
    System.out.println(result);  

 

 

 

通过上面代码我们就能获取平台传递过来的信息,当然代码显得比较臃肿,课中中会分割在几个方法中。正常的返回结果为:

oauth_token=079ad6989409456a9878bf41ca8d2d7a&oauth_token_secret=b494075906b8846416735bf802ced89f&oauth_callback_confirmed=true

我们可以编写一个辅助方法获取每个返回参数的值,已供以后使用:

 
 

   /** 
     * 分割返回结果 
     *  
     * @param response 
     *            返回字符串 
     * @return 
     */  
    public static Map<String, String> splitResponse(String response)  

    {  
        // 保存返回结果   
        Map<String, String> map = new HashMap<String, String>();  
        // 判断是否为空   
        if (!TextUtil.isEmpty(response))  
        {  
            // 已“&”进行分割   
            String[] array = response.split("&");  
            if (array.length > 2)  
            {  
                String tokenStr = array[0]; // oauth_token=xxxxx   
                String secretStr = array[1];// oauth_token_secret=xxxxxxx   
                String[] token = tokenStr.split("=");  
                if (token.length == 2)  
                {  
                    map.put("oauth_token", token[1]);  
                }  
                String[] secret = secretStr.split("=");  
                if (secret.length == 2)  
                {  
                    map.put("oauth_token_secret", secret[1]);  
                }  
            }  
        }  
        return map;  
    }  

 

 

 

分享到:
评论

相关推荐

    android腾讯微博分享demo

    当用户点击分享按钮时,会调用腾讯微博SDK提供的接口,准备分享的内容(文字、图片、链接等)并进行授权流程。授权通常采用OAuth 2.0协议,用户会被引导到腾讯微博的授权页面,确认授权后返回应用。 在"android腾讯...

    android仿腾讯微博客户端

    《Android仿腾讯微博客户端开发详解》 在移动互联网飞速发展的今天,社交应用已经成为人们日常生活中不可或缺的一部分。作为中国主流的社交媒体平台,腾讯微博在移动端的重要性不言而喻。本篇将详细介绍如何在...

    Android.腾讯微博

    【Android腾讯微博】是一款基于Android平台的客户端应用,它允许用户在移动设备上方便地浏览、发布和互动微博。此毕业设计项目展示了如何利用Android SDK和腾讯微博的开放API来开发一个功能完整的社交应用程序。 ...

    腾讯微博开放平台

    腾讯微博开放平台是腾讯公司推出的一个社交平台接口,它为开发者提供了与腾讯微博进行数据交互的能力。通过这个平台,开发者可以创建应用,将微博分享、评论、关注等功能无缝地嵌入到自己的应用中,提升用户体验,...

    Android腾讯微博源码

    在Android平台上,腾讯微博是一款非常流行的社交媒体应用,它允许用户发布、阅读和分享微博,与朋友保持联系。这里我们讨论的是“Android腾讯微博源码”,这是一份宝贵的资源,可以帮助开发者深入理解Android应用...

    android 腾讯微博 分享

    在Android平台上,腾讯微博分享是一种常见的社交功能,允许用户将应用程序内的内容,如文本、图片、链接等,快速地发布到自己的腾讯微博账号上,与好友进行互动分享。本教程将详细讲解如何在Android应用中集成腾讯...

    android 腾讯微博Oauth2.0认证以及自定义webview认证

    腾讯微博提供了OAuth2.0的API接口,供开发者获取用户授权,发布微博、读取用户信息等操作。 1. **OAuth2.0认证流程** - **申请App Key和App Secret**: 在腾讯微博开放平台注册应用,获取App Key和App Secret,这是...

    新浪、腾讯微博,微信好友、朋友圈 分享

    总结来说,实现新浪、腾讯微博和微信的分享功能,开发者需要了解并集成各平台的SDK,处理好授权流程,然后调用对应的分享接口。使用统一的分享库可以简化这一过程,而导入debug签名文件是为了在Android设备上运行和...

    Android 腾讯微博客户端源码

    【Android 腾讯微博客户端源码】是一个深入学习Android应用开发的重要资源,它揭示了腾讯微博客户端的具体实现细节,对于开发者来说,是提升技能、理解大型应用架构和交互设计的宝贵材料。在这个项目中,我们可以...

    Android腾讯微博开放平台入门源代码

    在Android平台上,腾讯微博开放平台为开发者提供了丰富的接口和工具,使得应用能够与微博进行深度交互,例如发布微博、获取用户信息等。本教程通过一个入门级的源代码实例,帮助开发者了解并掌握如何利用腾讯微博API...

    发送腾讯微博

    这些文件可能包括Java源代码文件、XML布局文件、图片资源等,它们共同构成了调用腾讯微博客户端分享的核心部分。 综上所述,实现“发送腾讯微博”的功能涉及反编译、理解和复用腾讯微博APK中的代码,利用Android的...

    新浪以及腾讯微博绑定

    综上所述,新浪和腾讯微博的绑定涉及到了OAuth认证、API调用、BroadcastReceiver等多个技术环节。开发者需要熟悉这些概念和技术,才能在应用中实现顺畅的微博绑定功能。同时,注意遵守隐私政策和最佳实践,提升用户...

    腾讯微博开放平台签名生成工具

    腾讯微博开放平台签名生成工具是一款专为开发者设计的实用软件,它简化了在开发与腾讯微博接口集成的应用程序时的签名生成过程。在使用腾讯微博开放平台进行应用开发时,安全性和验证是至关重要的环节,而这个工具...

    简易的腾讯微博

    腾讯微博开放平台提供了丰富的接口,允许开发者获取用户信息、发布微博、评论、转发、点赞等操作。开发者需要注册成为开发者,获取App Key和App Secret,然后通过OAuth2.0授权机制,获取用户的访问令牌(Access ...

    Android 腾讯微博客户端源码.rar

    【Android腾讯微博客户端源码分析】 本资源是关于Android平台上腾讯微博客户端的源代码,对于想要深入了解Android应用开发,特别是社交应用开发的开发者来说,这是一个非常有价值的参考。通过对这个源码的学习,...

    ChesterWeiboDemo(腾讯微博)

    腾讯微博提供了SDK,开发者可以利用这些接口来完成授权、获取用户信息等一系列操作。 1. **配置应用** 在开始开发前,需要在腾讯开放平台注册一个应用,获取到AppKey和AppSecret。这两个关键参数用于识别你的应用...

    简单腾讯微博分享

    3. 发起分享:使用获取到的Access Token,调用腾讯微博SDK的分享接口,传递分享内容。 4. 处理分享结果:监听分享操作的回调,以便在分享成功或失败时给予用户反馈。 三、扩展到其他平台 除了腾讯微博,该项目还...

    新浪腾讯微博分享demo

    在获取到Access Token后,应用就能调用腾讯微博的API,实现分享功能。 分享功能在demo中分为文字分享和图片分享。文字分享相对简单,只需构造请求参数,包括Access Token、正文内容等,通过HTTP POST请求发送到微博...

    android腾讯微博

    6. **用户授权**:在需要使用腾讯微博功能的地方,调用SDK提供的登录或授权方法,引导用户进行授权。这通常涉及到一个WebView界面,用户在此输入账号密码完成登录。 7. **发布消息**:授权成功后,你可以通过SDK...

    Android应用源码腾讯微博微频道项目.zip

    【Android应用源码腾讯微博微频道项目】是一个深入学习Android应用程序开发的重要资源,它揭示了腾讯微博微频道的实现细节。这个项目可以帮助开发者了解如何在Android平台上构建一个类似社交网络应用,尤其是涉及到...

Global site tag (gtag.js) - Google Analytics