代码改变世界

Silverlight如何调用淘宝API

2012-06-19 13:57  slmk  阅读(804)  评论(2编辑  收藏  举报

     淘宝开放平台TOP并没有提供SL版本的SDK,其实是没有必要,也是不可能的。其原因有二:1、Siverlight默认不允许跨域访问,需要在被访问网站下面放置策略文件,Taobao不可能为我们放置一个策略文件的。2、你的taobao应用程序的appkey,appsecret,甚至是sessionkey都暴露在Silverlight前端了,这也太傻了吧!存在很大的安全隐患!SL直接调用Taobao Api是不可能的,怎么办呢?

  其实,我们只要将调用taobao的代码放到我们的服务器端就可以了,服务器获取到数据后再传到前端去。而SL和Web服务器通讯最好的方法莫过于WCF RIA Service了(谁还有更好的方法?)。关于调用Taobao API的流程,参见我以前的文章。下面我们以淘宝开放平台用户Api为例,演示一下如何调用并在silverlight中显示。

1.新建一个Silverlight业务应用程序

2.解决方案中添加一个WCF RIA Services类型的项目。这种类型的项目,其实是两个类库项目,一个供SL引用,一个带.web后缀的供服务器端引用。

3.在2中的web项目中,添加一个DomainService,代码如下:

[EnableClientAccess()]
    public class TopService : DomainService
    {
        const string SERVICEURL = "http://gw.api.taobao.com/router/rest";
        const string APPKEY = "your app key";
        const string APPSECRET = "your app secret";

        public Top.Api.Domain.User GetUser(string nick)
        {
            ITopClient client = new DefaultTopClient(SERVICEURL, APPKEY, APPSECRET);
            UserGetRequest req = new UserGetRequest();

            //要查询的字段
            req.Fields = "user_id,uid,nick,sex,buyer_credit,seller_credit,location,created";
            req.Nick = nick;
            UserGetResponse res = client.Execute(req); //必要时传入Session key

            return res.User;
        }
    }

4.SL中调用TopService的域服务:

private void GetUser_Click(object sender, System.Windows.RoutedEventArgs e)
        {
            TopService.Web.TopContext tc = new TopService.Web.TopContext();
            tc.GetUser(tbName.Text,(lo) =>
            {
                this.userInfoGrid.DataContext = lo.Value;
            },null);
        }

完成了,就这么简单。用到哪个api就在我们的TopService中添加,SL调用就好了!当然了,权限控制还是要做好的,参见:[Silverlight]Wcf Ria Services权限控制的实现