淘宝API开发系列--商家的绑定

简介:

在上篇《淘宝API开发系列--开篇概述》介绍了下淘宝API平台的一些基本知识,由于一直有事情忙,就没有及时跟进随笔的更新,本篇继续讨论淘宝API的开发知识,主要介绍商家的绑定操作。上篇我们说过,淘宝就是基于应用程序键来控制用户的访问频率和流量的,另外可以通过应用程序键,让使用者登陆确认,获取到相关的授权码,然后获取SessionKey,作为访问使用者淘宝资源(如买入卖出等私人记录的信息) 

我们再看看SessionKey是如何获取的(下面是淘宝关于正式环境下SessionKey的说明):

正式环境下获取SessionKey

注意:web插件平台应用和web其它应用在正式环境下是同样的获取方法

1、WEB应用

例如回调URL为:http://localhost

访问 http://container.open.taobao.com/container?appkey={appkey},页面会跳转到回调URL,地址类似如下:

http://localhost/?top_appkey={appkey} &top_parameters=xxx&top_session=xxx&top_sign=xxx

回调url上的top_session参数即为SessionKey
2、客户端应用

访问 http://auth.open.taobao.com/?appkey={appkey},即可获得授权码

通过http方式访问 http://container.open.taobao.com/container?authcode={授权码},会得到类似如下的字符串

top_appkey=1142&top_parameters=xxx&top_session=xxx&top_sign=xxx

字符串里面的top_session值即为SessionKey。 

由于本篇文章主要是介绍C/S客户的应用,因此客户端的应用就不能通过回调Url方式获得用户的验证,我们可以通过在Winform中的WebBrowser控件,显示一个登陆验证及访问确认的操作界面给客户,当客户确认的时候并返回Session Key的内容界面的时候,我们取出Session Key保存并关闭浏览器窗口即可,今后把该SessionKey作为参数来访问相关需要Session Key的API即可。

另外,由于SessionKey的间隔时间比较短,如果API调用间隔时间比较长,那么SessionKey有可能失效的,但是我们注意到,如果API调用的时候,SesionKey过期 那么会抛出TopException(其中ErrorCode为26或者27是SessionKey过期),里面有关于与TopException的部分说明如下:

26 Missing Session 缺少SessionKey参数
27 Invalid Session 无效的SessionKey参数


 我们先看看具体实现的界面,然后分析其中的实现逻辑吧。

1、首次需要登录的时候,使用一个Winform嵌套一个WebBrowser控件,实现网页登录。 

 

 2、商家用户输入账号密码后,确认是否授权程序访问相关资源。

 

 3、确认后生成SessionKey,这个Key正是我们的程序需要的关键内容,因此需要自动获取出来。

 

4、程序拿到该Session Key后,把它作为参数来访问淘宝API获取相关的信息,这里获取交易API的购买信息,需要SessionKey的。

 

 以上就是使用SessionKey的API工作流程界面,我们下面介绍一下相关的实现代码。

1) 主窗体主要的操作代码:

     public   partial   class  Form1 : Form
    {
        
private  TopJsonRestClient jsonClient;
        
private  TopContext context;

        
private   void  Form1_Load( object  sender, EventArgs e)
        {
            
this .winGridView1.ProgressBar  =   this .toolStripProgressBar1.ProgressBar;
            
this .winGridView1.AppendedMenu  =   this .contextMenuStrip1;

            jsonClient 
=   new  TopJsonRestClient( " http://gw.api.taobao.com/router/rest " " 12033411 " " 你的密钥 " );
            
            client 
=  GetProductTopClient( " json " );
            xmlClient 
=   new  TopXmlRestClient( " http://gw.api.taobao.com/router/rest " " 12033411 " " 你的密钥 "" );
        }

        
///   <summary>
        
///  判断是否顺利获取SessionKey
        
///   </summary>
        
///   <returns></returns>
         private   bool  GetAuthorizeCode()
        {
            
string  authorizeCode  =   "" ;
            FrmAuthorized dlg 
=   new  FrmAuthorized();
            
if  (dlg.ShowDialog()  ==  DialogResult.OK)
            {
                authorizeCode 
=  dlg.AuthrizeCode;
            }
            
if  ( string .IsNullOrEmpty(authorizeCode))  return   false ;
                        
            context 
=  SysUtils.GetTopContext(authorizeCode);
            
if  (context  ==   null return   false ;

            
return   true ;
        }

        
private   void  BindData()
        {
            
if  (context  ==   null )
            {
                
bool  flag  =  GetAuthorizeCode();
                
if  ( ! flag)  return ;
            }

            
string  sessionKey  =  context.SessionKey;

            
/// /获取用户信息
             // UserGetRequest request = new UserGetRequest();
            
// request.Fields = "user_id,nick,sex,created,location,alipay_account,birthday";
            
// request.Nick = "wuhuacong";
            
// User user = client.Execute(request, new UserJsonParser());
            
// MessageBox.Show(ReflectionUtil.GetProperties(user));

            
try
            {
                
// 买入交易
                TradesBoughtGetRequest req  =   new  TradesBoughtGetRequest();
                req.Fields 
=   " tid,title,price,type,iid,seller_nick,buyer_nick,status,orders " ;
                req.PageNo 
=   1 ;
                req.PageSize 
=   10 ;
                ResponseList
< Trade >  rsp  =  jsonClient.GetBoughtTrades(req, sessionKey);
                
this .winGridView1.DataSource  =  rsp.Content;
                MessageBox.Show(rsp.Content.Count.ToString());

                
// 卖出交易
                TradesSoldGetRequest soldReq  =   new  TradesSoldGetRequest();
                soldReq.Fields 
=   " tid,title,price,type,iid,seller_nick,buyer_nick,status,orders " ;
                soldReq.PageNo 
=   1 ;
                soldReq.PageSize 
=   10 ;
                ResponseList
< Trade >  soldRsp  =  jsonClient.GetSoldTrades(soldReq, sessionKey);
                
this .winGridView1.DataSource  =  soldRsp.Content;
                MessageBox.Show(soldRsp.Content.Count.ToString());
            }
            
catch  (TopException ex)
            {
                
if  (ex.ErrorCode  ==   26   ||  ex.ErrorCode  ==   27 )
                {
                    
if  (MessageUtil.ShowYesNoAndError( " SessionKey过期,您是否需要重新认证 " ==  DialogResult.Yes)
                    {
                        
bool  flag  =  GetAuthorizeCode();
                        
if  ( ! flag)  return ;

                        BindData();
// 重新刷新
                    }
                    
else
                    {
                        
return ;
                    }
                }
            }
        }

        
private   void  btnTest_Click( object  sender, EventArgs e)
        {
            BindData();
        }

 2、用户登陆的窗体,就是一个form窗体加上一个WebBrowser控件,窗体代码如下:

     public   partial   class  FrmAuthorized : Form
    {
        
///   <summary>
        
///  授权码
        
///   </summary>
         public   string  AuthrizeCode  =   "" ;
        
private   string  url  =   " http://open.taobao.com/authorize/?appkey=12033411 " ;

        
public  FrmAuthorized()
        {
            InitializeComponent();
        }

        
///   <summary>
        
///  获取HTML页面内制定Key的Value内容
        
///   </summary>
        
///   <param name="html"></param>
        
///   <param name="key"></param>
        
///   <returns></returns>
         public   string  GetHiddenKeyValue( string  html,  string  key)
        {
            
string  str  =  html.Substring(html.IndexOf(key));
            str 
=  str.Substring(str.IndexOf( " value " +   7 );
            
int  eindex1  =  str.IndexOf( " ' " );
            
int  eindex2  =  str.IndexOf( " \ "" );
             int  eindex  =  eindex2;
            
if  (eindex1  >=   0   &&  eindex1  <  eindex2)
            {
                eindex 
=  eindex1;
            }
            
return  str.Substring( 0 , eindex);
        }

        
private   void  webBrowser1_DocumentCompleted( object  sender, WebBrowserDocumentCompletedEventArgs e)
        {
            
if  (e.Url.AbsoluteUri  ==  url)
            {
                AuthrizeCode 
=  GetHiddenKeyValue( this .webBrowser1.DocumentText,  " autoInput " );
                
if  ( ! string .IsNullOrEmpty(AuthrizeCode)  &&  AuthrizeCode.IndexOf( " TOP- " >=   0 )
                {
                    
this .DialogResult  =  DialogResult.OK;
                    
this .Close();
                }
            }
        }

        
private   void  FrmAuthorized_Load( object  sender, EventArgs e)
        {
            webBrowser1.Navigate(url);
        }
    }

这样我们就可以在首次使用API或者SessionKey失效的时候,让商家用户输入账号密码并确认即可,其他使用即可顺利无阻。

是不是有点意思呢,赶快试试吧,说不定带来一些意想不到的收获及创意哦。 

本文转自博客园伍华聪的博客,原文链接:淘宝API开发系列--商家的绑定,如需转载请自行联系原博主。



目录
相关文章
|
4天前
|
缓存 监控 API
构建高效可扩展的RESTful API:后端开发的实践指南
【4月更文挑战第26天】在现代Web开发中,构建一个高效、可扩展且易于维护的RESTful API是后端工程师必须面对的挑战。本文将深入探讨如何利用最佳实践和流行技术,设计出符合REST架构原则的服务端接口。我们将重点讨论API版本控制、资源路由、数据库优化、缓存策略以及安全性考虑等方面,旨在为开发者提供一套综合性解决方案,帮助其提升API的性能与可靠性。
|
24天前
|
API 开发者
如何获取淘宝/天猫购物车的商品列表 API 返回值说明
淘宝/天猫的购物车API返回值会包含当前用户购物车中的商品列表及相关信息。以下是API返回值可能包含的主要字段和信息的详细说明:
|
1天前
|
XML JSON API
【PHP开发专栏】PHP RESTful API设计与开发
【4月更文挑战第29天】本文探讨了在Web开发中流行的前后端分离模式,重点介绍了RESTful API的设计与实现。REST是一种基于HTTP协议的架构风格,核心概念包括资源、表述和状态转换。RESTful API设计遵循无状态、统一接口等原则,使用GET、POST、PUT、DELETE等HTTP方法执行操作,并通过状态码和JSON/XML传输数据。在PHP中实现RESTful API,可通过定义路由、创建控制器、处理请求和响应,同时注意安全性措施,如使用HTTPS。文中还提供了一个用户管理API的实战示例,以帮助读者更好地理解和应用RESTful API。
|
7天前
|
人工智能 机器人 API
【Python+微信】【企业微信开发入坑指北】3. 如何利用企业微信API给微信群推送消息
【Python+微信】【企业微信开发入坑指北】3. 如何利用企业微信API给微信群推送消息
10 0
|
7天前
|
缓存 人工智能 API
【Python+微信】【企业微信开发入坑指北】2. 如何利用企业微信API主动给用户发应用消息
【Python+微信】【企业微信开发入坑指北】2. 如何利用企业微信API主动给用户发应用消息
9 0
|
11天前
|
XML JSON API
快速淘宝商品详情页面API接口传输 php
PI(Application Programming Interface,应用程序接口)是一组预定义的函数、协议和工具,用于构建软件应用程序之间的交互。它允许不同的软件系统和应用通过统一的接口进行数据交换和通信
|
13天前
|
供应链 数据挖掘 API
淘宝API接口系列:数据分析丨Erp上货丨维权控价丨商品搬家丨店铺订单管理
淘宝API接口系列在多个方面为电商业务提供了强大的支持,包括数据分析、ERP上货、维权控价、商品搬家以及店铺订单管理。下面将针对这些方面逐一进行说明。
|
16天前
|
缓存 负载均衡 NoSQL
构建高效可扩展的RESTful API:后端开发的最佳实践
【4月更文挑战第14天】在当今快速发展的网络应用时代,一个结构良好且高效的RESTful API是确保后端服务可靠性和性能的关键。本文深入探讨了设计和实现高效可扩展RESTful API的最佳实践,涵盖了API设计原则、数据库优化、缓存策略以及负载均衡等关键方面。文中不仅提供了具体的技术建议,还通过案例分析展示了如何应对实际开发中的挑战。
|
18天前
|
小程序 前端开发 API
小程序全栈开发中的RESTful API设计
【4月更文挑战第12天】本文探讨了小程序全栈开发中的RESTful API设计,旨在帮助开发者理解和掌握相关技术。RESTful API基于REST架构风格,利用HTTP协议进行数据交互,遵循URI、客户端-服务器架构、无状态通信、标准HTTP方法和资源表述等原则。在小程序开发中,通过资源建模、设计API接口、定义资源表述及实现接口,实现前后端高效分离,提升开发效率和代码质量。小程序前端利用微信API与后端交互,确保数据流通。掌握这些实践将优化小程序全栈开发。
|
19天前
|
API 监控 开发者
淘宝评论数据API接口:洞察消费者声音的关键工具
随着全球电商的快速发展,速卖通(AliExpress)作为知名的跨境电商平台,为卖家提供了广阔的销售渠道。为了更好地满足卖家的需求,速卖通提供了丰富的API接口,使卖家能够自动化、高效地管理商品、订单和用户数据。本文将围绕速卖通AliExpress API接口开发系列展开探讨,帮助卖家更好地理解和应用这些接口。