腾讯微博应用接入

公司最近开发了一款应用,需要接入到腾讯微博,下面讲讲如何将自己的应用接入到腾讯微博频道

1. 首先要申请一个腾讯账号,成为一个微博应用开发者,开发者申请地址:

http://dev.t.qq.com/developer/

注:对应应用ui的要求:宽度:760,高度700px—1200px,详细可参考:

http://wiki.open.t.qq.com/index.php/%E8%85%BE%E8%AE%AF%E5%BE%AE%E5%8D%9A%E5%BA%94%E7%94%A8%E6%8E%A5%E5%85%A5UI%E8%A7%84%E8%8C%83

2. 接着我们需要创建一个自己的应用, 这里我选的是站内应用。

为什么呢,站内应用最大的好处是:你可以在腾讯微博应用列表中搜索到这个应用,若使用的用户多,可获取腾讯微博应用的推荐

一般如果我们只想将自己的网站接入到腾讯微博,例如:我们网页上有一个很好的效果,想让用户分享到他的腾讯微博,这时我们可选择网页应用。

1

3. 接着按照要求填写你的应用信息,填写完毕后,你会获得你的App Key 和 App Secret

这里值得特别注意的是,你的应用实际地址一定要写全了,因为腾讯会通过他的地址最终回调你的实际地址,将用户的某些信息传给你的后台。如下地址,我们若要获取用户的某些信息,也必须是在main这个control层获取

2

4. 腾讯微博应用的接入,必须调用它的api, 在其官网也给出了SDK,供应用的接入使用,其SDK使用的是OAuth2.0鉴权,因为我申请的是站内应用,而且站内应用有一个特点:无需授权,也就是说,如果你的应用为站内应用,当用户访问你的应用的时候,腾讯微博就会默认将用户的某些信息传给你的后台,比如openid和openkey,

这就是调用腾讯微博api的必要两个参数(我们只需要把传过来的值保存在session中,这样需要调用其api的时候直接从session中取值就可以了),所以我使用的是OpenId&Openkey协议来实现调用api功能(当然你也可以使用它的SDK)。

5. 调用腾讯的api发微薄,参考其官方文档,调用这个接口需传入通用参数和私有参数,主要讲讲通用参数,对于通用参数,主要是获取签名值处理较为繁琐

3

6. 根据其官方给出的说明,我对发送一条微博并发送一张图片的调用做了封装,这里我采取的是POST访问,当然你也可以使用GET方式,
具体代码如下:

send_weibo_add_pic_url($content, $pic_url);
        if(stristr($curlRet, "ok")) {
            echo '1';
        } else {
            echo '0';
        }
    }
    
    private function send_weibo_add_pic_url($content, $pic_url) {
        $postUrl = "http://open.t.qq.com/api/t/add_pic_url";
        $postData = array();
        $postData['format'] = "xml";
        $postData['content'] = $content; //分享内容
        $postData['clientip'] = "";
        $postData['pic_url'] = $pic_url;
        $postData['longitude'] = "";
        $postData['latitude'] = "";
        $postData['syncflag'] = "0";
        $postData['compatibleflag'] = "0";
        $postData['appid'] = Config::$client_id;  //应用app key
        $postData['openid'] = $_SESSION['t_openid'];
        $postData['openkey'] = $_SESSION['t_openkey'];
        $postData['reqtime'] = date("Y-m-d H:i:s");
        $postData['wbversion'] = "1";
        $postData['sig'] = $this->genSig("/t/add_pic_url", $postData);
        $postData = $this->formatPostData($postData);
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_HEADER, false);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_URL, $postUrl);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
        $curlRet = curl_exec($ch);
        curl_close($ch);
        return $curlRet;
    }
    
    /**
     * 获取签名
     * @param String $Posturl
     * @param array $postData
     */
    function genSig($Posturl, $postData) {
        $sig = "POST";
        $sig .= "&". urlencode($Posturl);
        $sig .= "&". urlencode($this->sortKey($postData));
        $appkey = Config::$client_secret . "&"; //应用 app Secret
        return base64_encode(hash_hmac("ripemd160", $sig, $appkey));
    }
    
    /**
     * key值排序
     * @param array $postData
     */
    function sortKey($postData) {
        $str = "";
        $keys = array_keys($postData);
        sort($keys);
        foreach ($keys as $k) {
            $s = $k . "=" . $postData[$k];
            $str .= "&" . $s;
        }
        $str = substr($str, 1);
        return $str;
    }
    
    /**
     * 格式化url
     * @param array $postData
     */
    function formatPostData($postData) {
        $o = "";
        foreach ($postData as $k=>$v)
        {
            $o .= "$k=".urlencode($v)."&";
        }
        $postData = substr($o, 0, -1);
        return $postData;
    }
    
}


 

发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>