淘寶開放平臺不少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受權管理就作好了。數據庫