亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

Entwicklungsdokumente für die offene Taobao-Plattform / 平臺技術(shù)-用戶授權(quán)介紹

平臺技術(shù)-用戶授權(quán)介紹

登錄授權(quán)

      如果您的應(yīng)用和淘寶開放平臺對接時(shí)需要獲取用戶隱私數(shù)據(jù)(如商品、訂單等),為保證用戶數(shù)據(jù)的安全與隱私,您的應(yīng)用需要取得用戶的授權(quán),即獲取訪問用戶數(shù)據(jù)的授權(quán)令牌 Access Token (即原來的SessionKey)。這種情況下,您的應(yīng)用需要引導(dǎo)用戶完成使用淘寶帳號“登錄授權(quán)”的流程。該流程采用國際通用的OAuth2.0標(biāo)準(zhǔn)協(xié)議作為用戶身份驗(yàn)證與授權(quán)協(xié)議,支持網(wǎng)站、手機(jī)客戶端、桌面客戶端。
    目前淘寶OAuth2.0服務(wù)支持采用兩種方式獲取Access Token(授權(quán)令牌),即 Server-side flow 和 Client-side flow ,詳見如下說明。

注:Taobao ID(淘帳號)產(chǎn)品不得用于阿里巴巴集團(tuán)非官方渠道為淘寶買家提供淘寶會員類服務(wù)(如:訂單查詢、物流追蹤 等),一旦發(fā)現(xiàn)違規(guī)使用,開放平臺將立即收回該appkey的Taobao ID使用權(quán)限。

 

特別注意

此文檔描述的授權(quán)頁面僅適用于PC端,如果您的頁面是在手機(jī)淘寶/天貓客戶端中被訪問,請參考這里。如果您的頁面是在H5手機(jī)瀏覽器中被訪問,請參考這里。

 

一、Server-side flow

此流程要求ISV應(yīng)用有Web Server應(yīng)用,能夠保存應(yīng)用本身的密鑰以及狀態(tài),可以通過https直接訪問淘寶的授權(quán)服務(wù)器。

1、請求入口地址

1)獲取授權(quán)碼(code)
 正式環(huán)境:https://oauth.taobao.com/authorize
 沙箱環(huán)境:https://oauth.tbsandbox.com/authorize
2)獲取訪問令牌(access_token)
 正式環(huán)境:https://oauth.taobao.com/token
 沙箱環(huán)境:https://oauth.tbsandbox.com/token

2、授權(quán)操作步驟

    此處以正式環(huán)境獲取acccess_token為例說明,如果是沙箱環(huán)境測試,需將請求入口地址等相關(guān)數(shù)據(jù)換成沙箱對應(yīng)入口地址,操作流程則同正式環(huán)境一致。
    實(shí)際進(jìn)行授權(quán)操作時(shí),測試的數(shù)據(jù) client_id、client_secret、redirect_uri 均需要根據(jù)自己創(chuàng)建的應(yīng)用實(shí)際數(shù)據(jù)給予替換,不能拿示例中給出的值直接進(jìn)行測試,以免影響實(shí)際測試效果。下圖為Server-side flow 授權(quán)方式流程圖,以下按流程圖逐步說明。
TB1CBIbHpXXXXaIXpXXSutbFXXX.jpg

1)拼接授權(quán)url
拼接用戶授權(quán)需訪問url ,示例及參數(shù)說明如下:
https://oauth.taobao.com/authorize?response_type=code&client_id=23075594&redirect_uri=http://www.oauth.net/2/&state=1212&view=web

QQ截圖20170213145452.png3)獲取code2)引導(dǎo)用戶登錄授權(quán)
引導(dǎo)用戶通過瀏覽器訪問以上授權(quán)url,將彈出如下登錄頁面。用戶輸入賬號、密碼點(diǎn)“登錄”按鈕,即可進(jìn)入授權(quán)頁面。
TB1pwkRHpXXXXXLXpXXSutbFXXX.jpg

上圖頁面,若用戶點(diǎn)“授權(quán)”按鈕后,TOP會將授權(quán)碼code 返回到了回調(diào)地址上,應(yīng)用可以獲取并使用該code去換取access_token;
若用戶未點(diǎn)授權(quán)而是點(diǎn)了“取消”按鈕,則返回如下結(jié)果,其中error為錯(cuò)誤碼,error_description為錯(cuò)誤描述。分別如下圖所示:TB1l1AfHpXXXXXDXXXXSutbFXXX.jpg

說明
可發(fā)布服務(wù)市場(fuwu.taobao.com)的應(yīng)用,在應(yīng)用上線后,如購買應(yīng)用的用戶,通過"我的服務(wù)--立即使用”訪問(下圖),系統(tǒng)會自動跳到授權(quán)頁面(因此這種方式訪問應(yīng)用的,不需要拼接url),只需注意獲取code即可。同時(shí)返回code時(shí),還會返回通過state傳遞訂購服務(wù)相關(guān)的信息,類似:
state=versionNo:1;itemCode:xxxxx (versionNo 為應(yīng)用版本號、itemCode為應(yīng)用收費(fèi)代碼)

4)換取access_token
利用linux 的curl 命令 獲取access_token(授權(quán)令牌),如下;對于應(yīng)用程序,可以參考文檔**示例**這里的示例代碼。

curl -i -d "code=OxlukWofLrB1Db1M6aJGF8x2332458&grant_type=authorization_code&client_id=23075594&
client_secret=69a1469a1469a1469a14a9bf269a14&redirect_uri=http://www.oauth.net/2/ "https://oauth.taobao.com/token


QQ截圖20170213145549.png

{
  "w2_expires_in": 0,
  "taobao_user_id": "263685215",
  "taobao_user_nick": "%E5%95%86%E5%AE%B6%E6%B5%8B%E8%AF%95%E5%B8%90%E5%8F%B752",
  "w1_expires_in": 1800,
  "re_expires_in": 0,
  "r2_expires_in": 0,
  "expires_in": 86400,
  "token_type": "Bearer",
  "refresh_token": "6200e1909ca29b04685c49d67f5ZZ3675347c0c6d5abccd263685215",
  "access_token": "6200819d9366af1383023a19907ZZf9048e4c14fd56333b263685215",
  "r1_expires_in": 1800
}


換取access_token返回值示例

QQ截圖20170213145648.png

二、Client-side flow

客戶端應(yīng)用授權(quán)方式,適合ISV沒有獨(dú)立的web Server,但是能夠借助瀏覽器或者JS腳本訪問授權(quán)服務(wù)器的應(yīng)用。

1、請求入口地址

正式環(huán)境:https://oauth.taobao.com/authorize
沙箱環(huán)境:https://oauth.tbsandbox.com/authorize

2、授權(quán)操作步驟

以正式環(huán)境獲取acccess_token為例說明,如果是沙箱環(huán)境請使用沙箱數(shù)據(jù)。
同時(shí)在授權(quán)過程中client_id等參數(shù)需要根據(jù)自己創(chuàng)建應(yīng)用的實(shí)際數(shù)據(jù)給予替換,否則無法完成授權(quán)。
下圖為Client-side flow 授權(quán)方式流程圖,以下按流程圖逐步詳細(xì)說明TB1gIY_HpXXXXagXVXXSutbFXXX.jpg

1)拼接授權(quán)url

https://oauth.taobao.com/authorize?response_type=token&client_id=23075594&state=1212&view=web

QQ截圖20170213145724.png


2)導(dǎo)用戶登錄授權(quán)
這一步同Server-side flow授權(quán)方式,引導(dǎo)用戶訪問授權(quán)url 進(jìn)行授權(quán),如下。

LB1c5YZKXXXXXamXFXXXXXXXXXX.jpg

3)獲取access_token
此處上圖頁面點(diǎn)授權(quán)后,TOP會直接將access_token 返回到淘寶默認(rèn)頁面(和 Server-side flow 先返回code 再換access_token方式不同)此時(shí)可使用JS腳本(if(window.location.hash!=""){alert(window.location.hash)})可以獲取回調(diào)頁面#后面的字段,從而獲取到訪問令牌。

LB18bZlKXXXXXXdXXXXXXXXXXXX (1).jpg

返回參數(shù)示例:

https://oauth.taobao.com/oauth2?view=web#access_token=6101227f5e8c230696ac93a77b3de7daacb154c6ad98106263664221&token_type=Bearer&expires_in=86400&refresh_token=6100627e3f9202c0960a6ab5bfd704939c91635892c70dd263664221&re_expires_in=86400&r1_expires_in=86400&r2_expires_in=86400&taobao_user_id=263664221&taobao_user_nick=%E5%95%86%E5%AE%B6%E6%B5%8B%E8%AF%95%E5%B8%90%E5%8F%B717&w1_expires_in=86400&w2_expires_in=86400&state=1212&top_sign=3429C556FCD3F3FC52547DD31021592F

注:
此處參數(shù)返回除 top_sign 外,同Server-side flow授權(quán)返回參數(shù)相同,這里不再詳細(xì)描述,具體可參考 Server-side flow 里面的說明。
top_sign 是系統(tǒng)生成簽名參數(shù),使用 Client-side flow 方式授權(quán)需要對該參數(shù)進(jìn)行一致性驗(yàn)證。


4) 驗(yàn)證授權(quán)簽名

即驗(yàn)證返回參數(shù)和 top_sign 是否一致。如上返回參數(shù)中,把井號之后除 top_sign外所有key和value按照參數(shù)的首字母順序排列,以 key1+value+key2+value....的方式拼接在一起,再在其前后加上的AppSecret(假設(shè)AppSecret=69a1469a1469a1469a14a9bf269a14),然后轉(zhuǎn)成utf-8編碼,接著進(jìn)行md5加密,最后全部轉(zhuǎn)大寫即可。
md5(utf-8:AppSecret+k1+v1+k2+v2+...+kn+vn + AppSecret)。


如以下返回參數(shù),取 # 號之后的參數(shù)進(jìn)行拼接并首尾加上AppSecret后得到如下結(jié)果:
69a1469a1469a1469a14a9bf269a14access_token6101227f5e8c230696ac93a77b3de7daacb154c6ad98106263664221token_typeBearer
expires_in86400refresh_token6100627e3f9202c0960a6ab5bfd704939c91635892c70dd263664221re_expires_in86400r1_expires_in86400
r2expires_in86400taobao_user_id263664221taobao_user_nick%E5%95%86%E5%AE%B6%E6%B5%8B%E8%AF%95%E5%B8%90%E5%8F%B717w1_expires_in86400&w2_expires_in86400&state121269a1469a1469a1469a14a9bf269a14

進(jìn)行md5加密(參考API調(diào)用示例代碼)并轉(zhuǎn)化成大寫后得到:3429C556FCD3F3FC52547DD31021592F ,和top_sign 一致。

退出登錄

退出流程目前只支持web訪問,起到的作用是清除taobao.com的cookie,并不是取消用戶的授權(quán)。在WAP上訪問無效。

一、請求入口地址

1、正式環(huán)境:https://oauth.taobao.com/logoff
2、沙箱環(huán)境:https://oauth.tbsandbox.com/logoff
    
二、退出操作步驟

拼接退出url(如 https://oauth.taobao.com/logoff?client_id=12304977&view=web)并訪問即可,退出后跳轉(zhuǎn)到淘寶首頁 。

刷新授權(quán)

通過授權(quán)獲取的refresh_token,可用來刷新access token 的r2時(shí)長。
由于r1 或w1 通常同訂購時(shí)長一致,一般不需刷新,w2必須通過重新授權(quán)給予延長,故refresh_token 一般僅用于r2 有效時(shí)長的延長。
操作方法類似獲取access token ,僅請求參數(shù)有區(qū)別,說明如下:

QQ截圖20170213145927.png

相關(guān)說明

一、授權(quán)時(shí)長說明

授權(quán)獲得的 access_token 有效時(shí)長(expires_in )和標(biāo)簽類型(如IT工具、商家后臺系統(tǒng)等)、狀態(tài)(如正式環(huán)境、上線等)相關(guān)如下。
注:實(shí)際api 調(diào)用時(shí),對應(yīng)用授權(quán)時(shí)長做了更精確的控制,具體可參考(二、安全等級說明);另像“第三方IT工具”類應(yīng)用開發(fā)上線后都是發(fā)布在 fuwu.taobao.com上,賣家需要訂購使用,相應(yīng)授權(quán)時(shí)長會和訂購時(shí)長相同,如購買1個(gè)月,則取得的access_token有效時(shí)長1個(gè)月。

QQ截圖20170213145956.png

二、安全等級說明

為了更加靈活的對淘寶開放平臺開放的數(shù)據(jù)進(jìn)行安全管控, 降低用戶數(shù)據(jù)泄露或者被惡意修改的風(fēng)險(xiǎn),推出了安全等級的概念。
淘寶開放平臺對API(或者API字段)及 應(yīng)用分別打了r1、r2、w1、w2 和 0,1,2,3四種安全級別的標(biāo)記。與 r1、r2、w1、w2對應(yīng)的是在access token(session key)頒發(fā)時(shí)增加了4個(gè)過期時(shí)間:r1_expires_in、r2_expires_in、w1_expires_in、w2_expires_in。這4個(gè)值分別用來表示此access token 調(diào)用各級別API(或字段)的有效期,如下:(受安全等級限制的應(yīng)用有:第三方IT工具、服務(wù)商后臺系統(tǒng)、店鋪模塊后臺這3類應(yīng)用;商家后臺系統(tǒng)和新業(yè)務(wù)這類賣家自用型應(yīng)用暫不受影響。)

安全等級API級別正式環(huán)境測試上線運(yùn)行中是否可刷新Refresh刷新時(shí)長
3級R124小時(shí)同訂購時(shí)長已上線應(yīng)用與訂購時(shí)長一致,正式環(huán)境測試24小時(shí)有效
3級R224小時(shí)同訂購時(shí)長已上線應(yīng)用與訂購時(shí)長一致,正式環(huán)境測試24小時(shí)有效
3級W124小時(shí)同訂購時(shí)長已上線應(yīng)用與訂購時(shí)長一致,正式環(huán)境測試24小時(shí)有效
3級W224小時(shí)同訂購時(shí)長已上線應(yīng)用與訂購時(shí)長一致,正式環(huán)境測試24小時(shí)有效
2級R124小時(shí)同訂購時(shí)長已上線應(yīng)用與訂購時(shí)長一致,正式環(huán)境測試24小時(shí)有效
2級R224小時(shí)72小時(shí)已上線應(yīng)用與訂購時(shí)長一致,正式環(huán)境測試24小時(shí)有效
2級W124小時(shí)同訂購時(shí)長已上線應(yīng)用與訂購時(shí)長一致,正式環(huán)境測試24小時(shí)有效
2級W230分鐘30分鐘 
1級R124小時(shí)同訂購時(shí)長已上線應(yīng)用與訂購時(shí)長一致,正式環(huán)境測試24小時(shí)有效
1級R224小時(shí)24小時(shí) 
1級W124小時(shí)同訂購時(shí)長已上線應(yīng)用與訂購時(shí)長一致,正式環(huán)境測試24小時(shí)有效
1級W25分鐘5分鐘 
0級R130分鐘30分鐘 
0級R20分鐘0分鐘 
0級W130分鐘30分鐘 
0級W20分鐘0分鐘 

示例代碼

一、獲取access_token示例

示例代碼均基于sdk實(shí)現(xiàn),sdk下載及使用參考 說明。

1、JAVA 示例

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import com.taobao.api.internal.util.WebUtils; //引用top sdk
 public class open_oauth {
    public static void main(String[] args) {
      String url="https://oauth.taobao.com/token";
      Map<String,String> props=new HashMap<String,String>();
      props.put("grant_type","authorization_code");
/*測試時(shí),需把test參數(shù)換成自己應(yīng)用對應(yīng)的值*/
      props.put("code","test");
      props.put("client_id","test");
      props.put("client_secret","test");
      props.put("redirect_uri","http://www.test.com");
      props.put("view","web");
      String s="";
      try{s=WebUtils.doPost(url, props, 30000, 30000);
      System.out.println(s);
      }catch(IOException e){
          e.printStackTrace();}
    } }


2、PHP 示例

<?php
/*測試時(shí),需把test參數(shù)換成自己應(yīng)用對應(yīng)的值*/

 $url = 'https://oauth.taobao.com/token';
 $postfields= array('grant_type'=>'authorization_code',
 'client_id'=>'test',
 'client_secret'=>'test',
 'code'=>'test',
 'redirect_uri'=>'http://www.test.com');
 $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數(shù)據(jù)
 curl_setopt($ch, CURLOPT_POST, true);

 //添加變量
 curl_setopt($ch, CURLOPT_POSTFIELDS, substr($post_data,0,-1));
 $output = curl_exec($ch);
 $httpStatusCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
 echo $httpStatusCode;
 curl_close($ch);
 var_dump($output);
 
?>


3、.NET 示例

namespace Oauth2._0
{
    class Program 
    { 
    static void Main(string[] args)
        {
            WebUtils webUtils = new WebUtils(); 
            IDictionary<string, string> pout = new Dictionary<string, string>(); 
            pout.Add("grant_type", "authorization_code"); 
            pout.Add("client_id", "test"); 
            pout.Add("client_secret", "test"); 
            pout.Add("code", "test");
            pout.Add("redirect_uri", "http://www.test.com"); 
            string output = webUtils.DoPost("https://oauth.taobao.com/token", pout); 
            Console.Write(output); 
            Console.ReadLine();       
        }
    } 
}


二、refresh_token刷新示例
以下為基于sdk的java示例,其它語言可參考token獲取方法,是類似的,同時(shí)測試時(shí),需把test參數(shù)換成自己應(yīng)用實(shí)際對應(yīng)的值。

  import java.io.IOException;
  import java.util.HashMap;
  import java.util.Map;
  import com.taobao.api.internal.util.WebUtils;
 
  public class test_refresh {
     
  public static void main(String[] args) {
    String url="https://oauth.taobao.com/token";
    Map<String,String> props=new HashMap<String,String>();
    props.put("grant_type","refresh_token");
    props.put("refresh_token","test");
    props.put("client_id","test");
    props.put("client_secret","test");
    String s="";
    try{s=WebUtils.doPost(url, props, 30000, 30000);
    System.out.println(s);
    }catch(IOException e){
        e.printStackTrace();
    }
    }

以上把responseJson 轉(zhuǎn)化為對象,或者直接從里面提取access_token字段以及新的刷新令牌
refresh_token返回結(jié)果內(nèi)容示例

{    
      "w2_expires_in": 0,    
      "taobao_user_id": "263685215",    
      "taobao_user_nick": "%E5%95%86%E5%AE%B6%E6%B5%8B%E8%AF%95%E5%B8%90%E5%8F%B752",    
      "w1_expires_in": 1800,    
      "re_expires_in": 0,    
      "r2_expires_in": 0,    
      "expires_in": 86400,    
      "token_type": "Bearer",    
      "refresh_token": "6200e1909ca29b04685c49d67f5ZZ3675347c0c6d5abccd263685215",    
      "access_token": "6200819d9366af1383023a19907ZZf9048e4c14fd56333b263685215",    
      "r1_expires_in": 1800    
    }

常見問題

1、授權(quán)獲取token時(shí),appkey是已傳入,仍報(bào):client_id is empty 錯(cuò)誤?
授權(quán)另一關(guān)鍵參數(shù)client_secret錯(cuò)誤,會導(dǎo)報(bào)該錯(cuò)誤,重點(diǎn)檢查

2、是否一定需要沙箱先進(jìn)行授權(quán)測試?

并不做這樣要求,可以是“先沙箱測試授權(quán),再正式環(huán)境”的方式;也可以直接“正式環(huán)境測試授權(quán)”的方式

3、授權(quán)相關(guān)常用文檔有那些?

  • 多店鋪管理:查看
  • 快速授權(quán)工具:查看
  • 提高安全等級辦法:查看
  • 安全等級詳細(xì)說明:查看

4、授權(quán)更多問題及錯(cuò)誤碼參考:查看

FAQ

  • 關(guān)于此文檔暫時(shí)還沒有FAQ