<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      淘寶API應(yīng)用開發(fā)小試

      無力吐槽淘寶開發(fā)平臺相關(guān)文檔的表述清晰度、錯誤率、各種費解的概念、讓人頭暈?zāi)垦5膶?dǎo)航等等。至少能夠在幾年前就開放眾多的API供第三方調(diào)用,算得上是有前瞻性的一次重要舉措。閑來無事,咱也費心研究了下,有錯莫怪我,要怪就怪淘寶文檔太不給力。

      大致是這么個流程:創(chuàng)建應(yīng)用——開發(fā)應(yīng)用——提交審核——上線使用。

      在創(chuàng)建應(yīng)用前,還得支付寶實名認證。像咱這種基本不網(wǎng)購的人,支付寶的賬號密碼綁定手機號是啥早忘了。于是用我表妹賬號,特別開心的是,表妹已經(jīng)開了家網(wǎng)點,沒幾個月,據(jù)說小丫頭片子已經(jīng)能月入2K了(利潤)。哎,我又想轉(zhuǎn)行了。。。我用我表妹賬號,能訂閱已經(jīng)上線的賣家服務(wù),發(fā)現(xiàn)很多都是免費而且做的不錯的,也有淘寶自己開發(fā)的應(yīng)用,比如量子恒道。

      我特地研究了下這個應(yīng)用,發(fā)現(xiàn)單憑現(xiàn)在開放出來的TOPAPI,基本上不能獲取該應(yīng)用所需的數(shù)據(jù),比如實時客戶訪問。結(jié)論:第三方只能在較小范圍內(nèi)做做簡單業(yè)務(wù)處理和數(shù)據(jù)分析,能賺到錢,但想要賺大錢,精致程度如淘寶本土應(yīng)用,我認為幾乎是不可能的事,除非淘寶真的打算將這塊蛋糕完全奉獻出來。

      廢話少說,開始創(chuàng)建應(yīng)用,換句話說就是填寫基本信息。

      應(yīng)用分web應(yīng)用和客戶端應(yīng)用。貌似客戶端應(yīng)用發(fā)布后,是通過web下載安裝的,而且資質(zhì)要求很高,我等屌絲只能不關(guān)心略過。web應(yīng)用有個回調(diào)URL,其實就是你的web服務(wù)站點地址,在沙箱環(huán)境管理下,我們可以將回調(diào)URL設(shè)為localhost以便本機開發(fā)測試。

      授權(quán)協(xié)議:若要獲取私密數(shù)據(jù),需要得到用戶授權(quán)。默認是OAuth2.0協(xié)議。要求先獲取授權(quán)碼,然后通過授權(quán)碼獲取訪問憑證和刷新憑證,應(yīng)用可以通過訪問憑證獲取用戶私密數(shù)據(jù),當訪問憑證過期時,可以嘗試使用刷新憑證重新獲取訪問憑證,當然刷新憑證也有有效期,過期只能讓用戶重新授權(quán)。

      原本使用HttpWebRequest獲取憑證,可參看dudu的ASP.NET MVC通過OAuth調(diào)用Google API獲取用戶信息。后來想說學學新概念,改為用httpclient獲取,當然過程很坑爹。 

       1 async Task<string> GetToken(string code)
       2 {
       3     WebRequestHandler webRequestHandler = new WebRequestHandler();
       4     webRequestHandler.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(RemoteCertificateValidate);
       5     HttpClient client = new HttpClient(webRequestHandler);
       6     var httpContent = new FormUrlEncodedContent(new Dictionary<string, string>()
       7     {
       8         {"grant_type", "authorization_code"},
       9         {"code", code},
      10         {"client_id", "1021489060"},
      11         {"client_secret", "sandboxccbc898dce7e6525cca1b1f1c"},
      12         {"redirect_uri", "http://localhost:9198"}
      13     });
      14     string uri = "https://oauth.tbsandbox.com/token";
      15     var response = await client.PostAsync(uri, httpContent);
      16     return response.Content.ReadAsStringAsync().Result;
      17 }

      由于淘寶沙箱的證書無效,webRequestHandler.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(RemoteCertificateValidate);忽略證書驗證,否則得不到期望的結(jié)果,可能會拋異常。await client.PostAsync(uri, httpContent);這句折磨我很久,具體細節(jié)可以看我的上一篇博文:async、await在ASP.NET[ MVC]中之線程死鎖的故事

      下面開始調(diào)用API。我們可以直接通過訪問WebApi獲取Json格式的數(shù)據(jù),不過還要轉(zhuǎn)換成實體類神馬的太過麻煩,幸好淘寶為幾種流行的語言提供了SDK工具包,我屁顛屁顛地下了.net版本,開用。

      獲取店鋪信息:

      1 private Shop GetShopInfo(string nick)
      2 {
      3     ITopClient client = new DefaultTopClient("http://gw.api.tbsandbox.com/router/rest", "1021489060", "sandboxccbc898dce7e6525cca1b1f1c");//實例化ITopClient類
      4     ShopGetRequest req = new ShopGetRequest(); //實例化具體API對應(yīng)的Request類
      5     req.Fields = "sid,cid,nick,title";
      6     req.Nick = nick;
      7     ShopGetResponse rsp = client.Execute(req);//執(zhí)行API請求并將該類轉(zhuǎn)換為response對象
      8     return rsp.Shop;
      9 }

      DefaultTopClient構(gòu)造函數(shù)的三個參數(shù)分別為沙箱API地址(上線使用時請改為正式地址),APPKEY,APPSecret,這兩個東西是在創(chuàng)建應(yīng)用時給到我們的,也有沙箱和正式環(huán)境兩個版本。Request.Fields表示請求的字段(不同字段訪問級別可能不一樣,這方面我沒去研究),其余屬性一般為請求參數(shù),不同API的參數(shù)要求請參看對應(yīng)的文檔說明。當Response返回時,會將數(shù)據(jù)轉(zhuǎn)化成實體類,方便.NET程序訪問。

      我們也可以將TopApi封裝為自己的WebApi供JS請求(猜測未驗證:由于眾所周知的跨域問題,JS應(yīng)該不能直接請求TopApi,或者說相當麻煩。不過善良的淘寶也同樣提供了JSSDK工具包,具體如何應(yīng)用請有興趣的同學研究好告訴我:))。

      獲取商品列表:

       1 public class ItemController : ApiController
       2 {
       3     public IEnumerable<Item> GetItemsInventory(string sessionKey)
       4     {
       5         ITopClient client = new DefaultTopClient("http://gw.api.tbsandbox.com/router/rest", "1021489060", "sandboxccbc898dce7e6525cca1b1f1c");
       6         ItemsInventoryGetRequest req = new ItemsInventoryGetRequest();
       7         req.Fields = "approve_status,num_iid,title,nick,type,cid,pic_url,num,props,valid_thru,list_time,price,has_discount,has_invoice,has_warranty,has_showcase,modified,delist_time,postage_id,seller_cids,outer_id";
       8         ItemsInventoryGetResponse rsp = client.Execute(req, sessionKey);
       9         return rsp.Items;
      10     }
      11 }

      前臺JS就可以如是調(diào)用:

       1 $.ajax({
       2     url: '/apis/Item/GetItemsInventory?sessionKey=@ViewData["SessionKey"]',
       3     type: "get",
       4     dataType: "json",
       5     success: function (data) {
       6         ConstructData(data);
       7         $("#grid").kendoGrid({
       8             dataSource: {
       9                 data: data,
      10                 pageSize: 15
      11             },
      12             height:530,
      13             scrollable: true,
      14             sortable: true,
      15             filterable: true,
      16             pageable: {
      17                 input: true,
      18                 numeric: false
      19             },
      20             columns: [
      21                 { field: "Title", title: "商品名稱" },
      22                 { field: "Price", title: "售價", format: "{0:c}", width: "130px" },
      23                 { field: "Num", title: "庫存", width: "130px" },
      24                 { field: "ListTime", title: "上架時間" },
      25                 { field: "DelistTime", title: "下架時間" }
      26             ]
      27         });
      28     }
      29 });

      這里需要注意,返回的data并不能直接拿過來用。因為淘寶SDK中的.NET實體類加了Serializable特性且屬性為自動屬性,序列化為Json對象屬性名稱XXX將變?yōu)?lt;XXX>k__BackingField,對這種名稱的屬性JS只能通過中括號的形式訪問,點形式讀取屬性將讀不到,造成有些組件(比如KendoUI的Grid)數(shù)據(jù)無法綁定。更詳細信息可參看C#對 Json的序列化和反序列化會出現(xiàn)“k_BackingField”。

      運行程序:

      首先會跳到授權(quán)界面(如果你的應(yīng)用不涉及到私密數(shù)據(jù)的訪問,那么可以不考慮這個步驟)。

      在大部分瀏覽器中,由于沙箱地址的證書無效,會導(dǎo)致這一界面顯示異常。在Chorme中,可以事先使用用戶賬號登錄mini.taobao(沙箱使用,模擬真實環(huán)境),在IE10中干脆就無解。淘寶文檔中對這一情況作了一定說明。

      授權(quán)成功后,轉(zhuǎn)到應(yīng)用界面:

      轉(zhuǎn)載請注明本文出處:http://www.rzrgm.cn/newton/archive/2013/05/14/3078788.html                       

      posted @ 2013-05-15 08:50  萊布尼茨  閱讀(8088)  評論(31)    收藏  舉報
      主站蜘蛛池模板: 亚洲狠狠婷婷综合久久久| 亚洲中文字幕无码专区| 国产高清av首播原创麻豆| 日韩乱码人妻无码系列中文字幕| 推特国产午夜福利在线观看| 日韩大片一区二区三区| 扒开双腿猛进入喷水高潮叫声| 日本a在线播放| 亚洲欧美成人一区二区在线电影| 马龙县| 亚洲中文字幕av不卡无码| 精品视频不卡免费观看| 99久久国产精品无码| 亚洲人黑人一区二区三区| 丁香五月亚洲综合在线国内自拍| 亚洲最大av资源站无码av网址| 国产精品无遮挡猛进猛出| 国产精品有码在线观看| 精品国产乱码久久久久久口爆网站 | 免费网站看av片| 免费无码又爽又刺激高潮虎虎视频| 日本丶国产丶欧美色综合| 国产日韩精品一区二区在线观看播放 | 青青草无码免费一二三区| 成年站免费网站看v片在线| 亚洲欧洲精品一区二区| 苍井空一区二区波多野结衣av | 玩弄漂亮少妇高潮白浆| 国产成人午夜福利在线播放| 精品无码国产不卡在线观看| 国产91小视频在线观看| 成人亚洲精品一区二区三区| 真实国产乱子伦视频| 99国产精品欧美一区二区三区| 91老肥熟女九色老女人| 亚洲老熟女一区二区三区| 999精品全免费观看视频| 国产精品免费第一区二区| 欧美成人免费一区二区三区视频 | 久久三级国内外久久三级| 亚洲色婷婷一区二区|