[转载]淘宝API开发系列--商家的绑定

[转载]淘宝API开发系列–商家的绑定 – wuhuacong(伍华聪)的专栏 – 博客园.

在上篇《淘宝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失效的时候,让商家用户输入账号密码并确认即可,其他使用即可顺利无阻。

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

主要研究技术:代码生成工具、Visio二次开发

转载请注明出处:
撰写人:伍华聪  http:
//www.iqidi.com

赞(0) 打赏
分享到: 更多 (0)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏