淘宝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开发系列--商家的绑定,如需转载请自行联系原博主。



目录
相关文章
|
22天前
|
Java API Maven
如何使用Java开发抖音API接口?
在数字化时代,社交媒体平台如抖音成为生活的重要部分。本文详细介绍了如何用Java开发抖音API接口,从创建开发者账号、申请API权限、准备开发环境,到编写代码、测试运行及注意事项,全面覆盖了整个开发流程。
64 10
|
2天前
|
算法 Java API
如何使用Java开发获得淘宝商品描述API接口?
本文详细介绍如何使用Java开发调用淘宝商品描述API接口,涵盖从注册淘宝开放平台账号、阅读平台规则、创建应用并申请接口权限,到安装开发工具、配置开发环境、获取访问令牌,以及具体的Java代码实现和注意事项。通过遵循这些步骤,开发者可以高效地获取商品详情、描述及图片等信息,为项目和业务增添价值。
31 10
|
23天前
|
API 开发工具 数据库
开发一份API接口,需要注意这些,看你做到了几项
本文介绍了设计API接口时需注意的关键点,包括数字签名、敏感数据加密与脱敏、限流、参数校验、统一返回与异常处理、请求日志记录、幂等设计、数据量限制、异步处理、参数定义、完整文档及开发者对接SDK等内容,旨在帮助开发者设计出安全、稳定、易维护的API接口。
87 6
开发一份API接口,需要注意这些,看你做到了几项
|
1天前
|
数据可视化 搜索推荐 API
速卖通获得aliexpress商品详情API接口的开发、应用与收益。
速卖通(AliExpress)作为阿里巴巴旗下的跨境电商平台,为全球消费者提供丰富商品。其开放平台提供的API接口支持开发者获取商品详情等信息,本文探讨了速卖通商品详情API的开发流程、应用场景及潜在收益,包括提高运营效率、降低成本、增加收入和提升竞争力等方面。
12 1
|
19天前
|
缓存 前端开发 API
深入浅出:后端开发中的RESTful API设计原则
【10月更文挑战第43天】在数字化浪潮中,后端开发如同搭建梦想的脚手架,而RESTful API则是连接梦想与现实的桥梁。本文将带你领略API设计的哲学之美,探索如何通过简洁明了的设计,提升开发效率与用户体验。从资源定位到接口约束,从状态转换到性能优化,我们将一步步构建高效、易用、可维护的后端服务。无论你是初涉后端的新手,还是寻求进阶的开发者,这篇文章都将为你的开发之路提供指引。让我们一起走进RESTful API的世界,解锁后端开发的新篇章。
|
23天前
|
JSON API 数据格式
如何使用Python开发1688商品详情API接口?
本文介绍了如何使用Python开发1688商品详情API接口,获取商品的标题、价格、销量和评价等详细信息。主要内容包括注册1688开放平台账号、安装必要Python模块、了解API接口、生成签名、编写Python代码、解析返回数据以及错误处理和日志记录。通过这些步骤,开发者可以轻松地集成1688商品数据到自己的应用中。
31 1
|
24天前
|
JSON API 数据格式
淘宝 / 天猫官方商品 / 订单订单 API 接口丨商品上传接口对接步骤
要对接淘宝/天猫官方商品或订单API,需先注册淘宝开放平台账号,创建应用获取App Key和App Secret。之后,详细阅读API文档,了解接口功能及权限要求,编写认证、构建请求、发送请求和处理响应的代码。最后,在沙箱环境中测试与调试,确保API调用的正确性和稳定性。
|
20天前
|
Web App开发 人工智能 自然语言处理
WebChat:开源的网页内容增强问答 AI 助手,基于 Chrome 扩展的最佳实践开发,支持自定义 API 和本地大模型
WebChat 是一个基于 Chrome 扩展开发的 AI 助手,能够帮助用户理解和分析当前网页的内容,支持自定义 API 和本地大模型。
53 0
|
21天前
|
数据采集 自然语言处理 搜索推荐
淘宝评价API接口的开发与应用
在数字化商业时代,数据成为企业提升竞争力的关键资源。淘宝作为电商巨头,其商品评论数据极具价值。本文详细介绍了淘宝评价API接口的开发流程与应用场景,从注册账号、获取密钥到实际调用和数据解析,再到商品分析、店铺管理、个性化推荐等多个方面,全面解析了技术细节与实践方法,为企业和开发者提供了宝贵的技术支持和数据资源。
84 0