www.gusucode.com > Ectouch手机端网购商城系统PHP版源码程序 > ectouch/plugins/connect/sina.php
<?php /** * ECTouch Open Source Project * ============================================================================ * Copyright (c) 2012-2014 http://ectouch.cn All rights reserved. * ---------------------------------------------------------------------------- * 文件名称:sina.php * ---------------------------------------------------------------------------- * 功能描述:新浪微博登录插件 * ---------------------------------------------------------------------------- * Licensed ( http://www.ectouch.cn/docs/license.txt ) * ---------------------------------------------------------------------------- */ /* 访问控制 */ defined('IN_ECTOUCH') or die('Deny Access'); $payment_lang = ROOT_PATH . 'plugins/connect/language/' . C('lang') . '/' . basename(__FILE__); if (file_exists($payment_lang)) { include_once ($payment_lang); L($_LANG); } /* 模块的基本信息 */ if (isset($set_modules) && $set_modules == TRUE) { $i = isset($modules) ? count($modules) : 0; /* 类名 */ $modules[$i]['name'] = 'Sina'; // 文件名,不包含后缀 $modules[$i]['type'] = 'sina'; $modules[$i]['className'] = 'sina'; // 作者信息 $modules[$i]['author'] = 'Zhulin'; // 作者QQ $modules[$i]['qq'] = '2880175566'; // 作者邮箱 $modules[$i]['email'] = 'zhulin@ecmoban.com'; // 申请网址 $modules[$i]['website'] = 'http://open.weibo.com'; // 版本号 $modules[$i]['version'] = '1.0'; // 更新日期 $modules[$i]['date'] = '2014-10-03'; /* 配置信息 */ $modules[$i]['config'] = array( array('type' => 'text', 'name' => 'app_key', 'value' => ''), array('type' => 'text', 'name' => 'app_secret', 'value' => ''), ); return; } /** * 新浪微博 API client */ class sina { public $api_url = 'https://api.weibo.com/2/'; public $format = 'json'; /** * 构造函数 * * @param unknown $app * @param string $access_token */ public function __construct($conf, $access_token = NULL) { $this->client_id = $conf['app_key']; $this->client_secret = $conf['app_secret']; $this->access_token = $access_token; } /** * 请求登录 * * @param unknown $info * @param unknown $url * @return mixed */ public function act_login($info, $url) { $login_url = $this->login_url($url, $this->scope); $login_url = str_replace('&', '&', $login_url); return $login_url; } /** * 回调 * * @param unknown $info * @param unknown $url * @param unknown $code * @return boolean */ public function call_back($info, $url, $code) { $result = $this->access_token($url, $code); if (isset($result['access_token']) && $result['access_token'] != '') { // 保存登录信息,此示例中使用session保存 $_SESSION['access_token'] = $result['access_token']; // access token // echo '授权完成,请记录<br/>access token:<input size="50" value="', $result['access_token'], '">' . $_SESSION['sina_t']; return true; } else { // echo "授权失败"; return false; } } /** * 生成授权网址 * * @param unknown $callback_url * @return string */ public function login_url($callback_url) { $params = array( 'response_type' => 'code', 'client_id' => $this->client_id, 'redirect_uri' => $callback_url ); return 'https://api.weibo.com/oauth2/authorize?' . http_build_query($params); } /** * 获取access token * * @param unknown $callback_url * @param unknown $code * @return Ambigous <multitype:, mixed> */ public function access_token($callback_url, $code) { $params = array( 'grant_type' => 'authorization_code', 'code' => $code, 'client_id' => $this->client_id, 'client_secret' => $this->client_secret, 'redirect_uri' => $callback_url ); $url = 'https://api.weibo.com/oauth2/access_token'; $login_url = str_replace('&', '&', $login_url); return $this->http($url, http_build_query($params, '', '&'), 'POST'); } /** * 获取登录用户的uid * * @return Ambigous <> */ public function get_openid() { $params = array(); $result = $this->api('account/get_uid', $params); return $result['uid']; } /** * 根据uid获取用户信息 * * @param unknown $uid * @return Ambigous <multitype:, mixed> */ public function get_user_info($uid) { $params = array( 'uid' => $uid ); return $this->api('users/show', $params); } /** * 获取用户名 * * @param unknown $user_info * @return Ambigous <multitype:, mixed> */ public function get_user_name($userinfo){ if($userinfo['screen_name'] != ''){ return $userinfo['screen_name']; } else{ return $userinfo['name']; } } /** * 发布微博 * * @param unknown $img_c * @param string $pic * @return Ambigous <multitype:, mixed> */ public function update($img_c, $pic = '') { $params = array( 'status' => $img_c ); if ($pic != '' && is_array($pic)) { $url = 'statuses/upload'; $params['pic'] = $pic; } else { $url = 'statuses/update'; } return $this->api($url, $params, 'POST'); } /** * 根据uid获取用户微博列表 * * @param unknown $uid * @param number $count * @param number $page * @return Ambigous <multitype:, mixed> */ public function user_timeline($uid, $count = 10, $page = 1) { $params = array( 'uid' => $uid, 'page' => $page, 'count' => $count ); return $this->api('statuses/user_timeline', $params); } /** * 调用接口 * * @param unknown $url * @param unknown $params * @param string $method * @return Ambigous <multitype:, mixed> * //示例:根据uid获取用户信息 * $result=$sina->api('users/show', array('uid'=>$uid), 'GET'); */ public function api($url, $params = array(), $method = 'GET') { $url = $this->api_url . $url . '.' . $this->format; $params['access_token'] = $this->access_token; if ($method == 'GET') { $query = http_build_query($params); $query = str_replace('&', '&', $query); $result = $this->http($url . '?' . $query); } else { if (isset($params['pic'])) { uksort($params, 'strcmp'); $str_b = uniqid('------------------'); $str_m = '--' . $str_b; $str_e = $str_m . '--'; $body = ''; foreach ($params as $k => $v) { if ($k == 'pic') { if (is_array($v)) { $img_c = $v[2]; $img_n = $v[1]; } elseif ($v{0} == '@') { $url = ltrim($v, '@'); $img_c = file_get_contents($url); $url_a = explode('?', basename($url)); $img_n = $url_a[0]; } $body .= $str_m . "\r\n"; $body .= 'Content-Disposition: form-data; name="' . $k . '"; filename="' . $img_n . '"' . "\r\n"; $body .= "Content-Type: image/unknown\r\n\r\n"; $body .= $img_c . "\r\n"; } else { $body .= $str_m . "\r\n"; $body .= 'Content-Disposition: form-data; name="' . $k . '"' . "\r\n\r\n"; $body .= $v . "\r\n"; } } $body .= $str_e; $headers[] = 'Content-Type: multipart/form-data; boundary=' . $str_b; $result = $this->http($url, $body, 'POST', $headers); } else { $query = http_build_query($params); $query = str_replace('&', '&', $query); $result = $this->http($url, $query, 'POST'); } } return $result; } /** * 提交请求 * * @param unknown $url * @param string $postfields * @param string $method * @param unknown $headers * @return Ambigous <multitype:, mixed> */ private function http($url, $postfields = '', $method = 'GET', $headers = array()) { $ci = curl_init(); curl_setopt($ci, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($ci, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ci, CURLOPT_CONNECTTIMEOUT, 30); curl_setopt($ci, CURLOPT_TIMEOUT, 30); if ($method == 'POST') { curl_setopt($ci, CURLOPT_POST, TRUE); if ($postfields != '') curl_setopt($ci, CURLOPT_POSTFIELDS, $postfields); } $headers[] = 'User-Agent: weibo.PHP(piscdong.com)'; curl_setopt($ci, CURLOPT_HTTPHEADER, $headers); curl_setopt($ci, CURLOPT_URL, $url); $response = curl_exec($ci); curl_close($ci); $json_r = array(); if ($response != '') $json_r = json_decode($response, true); return $json_r; } }