淘宝开放平台不少API须要受权后才能使用。
受权的时候就须要一个回调地址。javascript
经过回调,咱们能够获取保用用户名,淘宝ID,过时时间等资料,方便后续开发。php
这里咱们直接修改welcome的index方法,代码以下:css
public function index() { $tbnick = get_cookie('taobao_user_nick'); $etime = get_cookie('expire_time'); $tbserid = get_cookie('taobao_user_id'); $session = get_cookie('access_token' ); $data = array( 'taobao_user_nick' => $tbnick, 'expire_time' => $etime, 'taobao_user_id' => $tbserid, 'access_token' => $session ); $this->load->view('welcome_message',$data); }
模板代码,因为页面简单,用pure的CSS框架。html
<!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="description" content="A layout example with a side menu that hides on mobile, just like the Pure website."> <title>大华软件受权</title> <link rel="stylesheet" href="/static/css/pure-min.css" integrity="sha384-" crossorigin="anonymous"> <!--[if lte IE 8]> <link rel="stylesheet" href="/static/css/layouts/side-menu-old-ie.css"> <![endif]--> <!--[if gt IE 8]><!--> <link rel="stylesheet" href="/static/css/layouts/side-menu.css"> <!--<![endif]--> <script src="http://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script> <script type="text/javascript"> function getoauth() { $.ajax({ //几个参数须要注意一下 type: "POST",//方法类型 dataType: "json",//服务端接收的数据类型 url: "http://vipapi.dahuariji.com/index.php/welcome/getoauth" ,//url data: $('#form1').serialize(), success: function (result) { console.log(result);//打印服务端返回的数据(调试用) if (result.id > 0) { //alert("SUCCESS"); $("#td1").html(decodeURIComponent(result.taobao_user_nick)); $("#td2").html(result.expire_time); $("#td3").html(result.taobao_user_id); $("#td4").html(result.access_token); } }, error : function() { alert("异常!"); } }); } /** * 时间戳转化为年 月 日 时 分 秒 * number: 传入时间戳 * format:返回格式,支持自定义,但参数必须与formateArr里保持一致 */ function formatTime(number,format) { var formateArr = ['Y','M','D','h','m','s']; var returnArr = []; var date = new Date(number * 1000); returnArr.push(date.getFullYear()); returnArr.push(formatNumber(date.getMonth() + 1)); returnArr.push(formatNumber(date.getDate())); returnArr.push(formatNumber(date.getHours())); returnArr.push(formatNumber(date.getMinutes())); returnArr.push(formatNumber(date.getSeconds())); for (var i in returnArr) { format = format.replace(formateArr[i], returnArr[i]); } return format; } //数据转化 function formatNumber(n) { n = n.toString() return n[1] ? n : '0' + n } </script> </head> <body> <div id="layout"> <!-- Menu toggle --> <a href="#menu" id="menuLink" class="menu-link"> <!-- Hamburger icon --> <span></span> </a> <div id="menu"> <div class="pure-menu"> <a target="_blank" class="pure-menu-heading" href="http://www.dahuariji.com/?from=vipapi">大华日记</a> <ul class="pure-menu-list"> <li class="pure-menu-item"><a href="#" class="pure-menu-link">Home</a></li> <li class="pure-menu-item"><a href="#" class="pure-menu-link">About</a></li> <li class="pure-menu-item menu-item-divided pure-menu-selected"> <a href="#" class="pure-menu-link">Services</a> </li> <li class="pure-menu-item"><a href="#" class="pure-menu-link">Contact</a></li> </ul> </div> </div> <div id="main"> <div class="header"> <h1>大华软件受权</h1> <h2>大华软件的使用导引,大华软件通常须要到这里受权</h2> </div> <div class="content"> <h2 class="content-subhead">如何使用</h2> <p> 因为大华不少软件都是调用淘宝开放平台的API,而这须要您的受权。受权过程很是简单,点击受权连接登陆便可自动保存。 <a href="https://oauth.taobao.com/authorize?response_type=code&client_id=25307802&redirect_uri=http://vipapi.dahuariji.com/index.php/welcome/oauth&state=vipapi&view=web" alt="点击给我受权">点击给我受权</a>, 受权后请记住您的<code>淘宝数字ID</code>。 </p> <h2 class="content-subhead">忘记淘宝数字ID或受权过时怎么办</h2> <p> 咱们将在下面给您提供查询接口,只须要输入淘宝帐号,或您从新受权一次。受权有效期一个月。若是受权失败,请从新受权。 </p> <h2 class="content-subhead">查询结果</h2> <form class="pure-form" method="post" onsubmit="return false" action="#" id="form1"> <fieldset> <input class="pure-input-1-2" type="text" name="tbnick" placeholder="淘宝用户名"> <button type="submit" class="pure-button pure-button-primary" onclick="getoauth()">查询</button> </fieldset> </form> <table class="pure-table" id = "table1"> <thead> <tr> <th>#</th> <th>淘宝用户名</th> <th>过时时间</th> <th>淘宝数字ID</th> <th>session</th> </tr> </thead> <tbody> <tr> <td>1</td> <td id="td1"><?=$taobao_user_nick?></td> <td id="td2"><?php echo date('Y-m-d H:i:s', $expire_time/1000); ?></td> <td id="td3"><?=$taobao_user_id?></td> <td id="td4"><?=$access_token?></td> </tr> </tbody> </table> <p>若是名字里含有乱七八糟的字符查不到,别查了,从新受权下吧。</p> </div> </div> </div> <script src="/static/js/ui.js"></script> </body> </html>
上面的页面,主要是为了方面用户操做,同时为了友好显示,把用户受权后的信息又给保存了下来。java
https://oauth.taobao.com/authorize?response_type=code&client_id=25307802&redirect_uri=http://vipapi.dahuariji.com/index.php/welcome/oauth&state=vipapi&view=web
用户正常受权后,咱们取回所须要的内容。jquery
public function oauth() { $url = 'https://oauth.taobao.com/token'; $postfields = array('grant_type' => 'authorization_code', 'client_id' => '你的appkey', 'client_secret' => '你的appkey', 'code' => $_GET['code'], 'redirect_uri' => 'http://vipapi.dahuariji.com/index.php/welcome/oauth'); $post_data = ''; foreach ($postfields as $key => $value) { $post_data .= "$key=" . urlencode($value) . "&"; } $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); //指定post数据 curl_setopt($ch, CURLOPT_POST, true); //添加变量 curl_setopt($ch, CURLOPT_POSTFIELDS, substr($post_data, 0, -1)); $output = curl_exec($ch); curl_close($ch); $j = json_decode($output); $tbnick = $j->taobao_user_nick; $etime = $j->expire_time; $openuid = $j->taobao_open_uid; $tbserid = $j->taobao_user_id; $session = $j->access_token; $data = array( 'taobao_user_nick' => $tbnick, 'expire_time' => $etime, 'taobao_open_uid' => $openuid, 'taobao_user_id' => $tbserid, 'access_token' => $session ); if ($session) { set_cookie('taobao_user_nick',$tbnick,2592000); set_cookie('expire_time',$etime,2592000); set_cookie('taobao_user_id',$tbserid,2592000); set_cookie('access_token' , $session,2592000); //入库 $querys = $this->users_model->get_user($tbserid); if ($querys->num_rows() == 1) { $query = $this->users_model->update_user($data); } else { $query = $this->users_model->insert_user($data); } // } //$this->load->view('welcome_show',$data); //跳转到额新页面展现 redirect("http://vipapi.dahuariji.com/index.php/welcome/showuid/".$tbserid); }
这里为了显示简单点,跳转到新的页面,简单的显示了下。web
public function showuid() { $uid = $this->uri->segment(3); $data =array('uid' => $uid); $this->load->view('welcome_show',$data); }
数据库的基本操做,增删改查ajax
public function get_user_by_name($taobao_user_nick) { $query = $this->db->get_where('usertoken', array('taobao_user_nick' => $taobao_user_nick), 0,1); return $query; } public function get_user($taobao_user_id) { $query = $this->db->get_where('usertoken', array('taobao_user_id' => $taobao_user_id), 0,1); return $query; } public function insert_user($data) { return $this->db->insert('usertoken', $data); } public function update_user($data) { return $this->db->replace('usertoken', $data); }
这样一个基本的session受权管理就作好了。数据库