淘宝开发日记2011.09-2011.11

  记录了用C#(桌面程序)调用淘宝的API、开发淘宝的过程。


2011.09.05*************************************************************************
昨天在CSDN上面发了几贴,问能不能用C#开发淘宝的TOP桌面程序,得到答案是肯定的。
又跟淘宝TOP技术聊了一下,回答也是肯定的。
下载了.Net的SDK包和Demo。用VS2005打不开,说是版本太低。。。。。。


四、动手修改VS2008的解决方案文件,以让VS2005打开它
<1>用记事本打开解决方案文件“解决方案名.sln”,然后修改最上面两行为如下代码:

Microsoft Visual Studio Solution File, Format Version 9.00 # Visual Studio 2005

<2>用记事本打开每个项目文件“项目名.csproj”,在<PropertyGroup>节点下移除如下节点:

<TargetFrameworkVersion>v2.0</TargetFrameworkVersion>

<3>并修改ProductVersion和Import两个节点为如下:

<ProductVersion>8.0.50727</ProductVersion>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />

没有找到可编译的EXE


2011.09.06*************************************************************************
早晨问的淘宝,居然说Demo是开发者上传的不是他们开发的。。。。。。 吐血。
白忙活了。

晚上回去百度了一下delphi淘宝。额,有一点点收获。

2011.09.07*************************************************************************
白天继续百度没什么进展
晚上调试了一下淘宝提供的测试环境,http://my.open.taobao.com/apitools/apiTools.htm?catId=1&apiName=taobao.user.get
找了淘宝提供的测试用户(sandbox_c_3),返回来的结果<type>C</type>说明类型是正确的。

原来是拼装URL,发送HTTP请求,例如:
http://gw.api.tbsandbox.com/router/rest?app_key=test&fields=user_id&format=xml&method=taobao.user.get&nick=andyy_tan&sign_method=md5&sign=6038922FFED6ABDEE4F371C8A8A0A0B2&timestamp=2010-12-15 14:53:54&v=2.0

会返回一个XML
<?xml version="1.0" encoding="utf-8" ?>
- <user_get_response>
- <user>
  <user_id>175982549</user_id>
  </user>
  </user_get_response>
- <!-- vsandbox068049.cm4
  -->

可以自己拼装URL,也可以使用淘宝提供的SDK来拼装。。。。。

额,有点眉目。。。。。。

2011.09.08*************************************************************************
晚上用Dephi写了一段:

 Params := TStringList.Create;

  Params.Values['app_key']:= AnsitoUtf8('test');//所有参数必须经过Utf8转换
  Params.Values['fields']:= AnsitoUtf8('user_id');
  Params.Values['format']:= AnsitoUtf8('xml');
  Params.Values['method']:= AnsitoUtf8('taobao.user.get');
  Params.Values['nick']:= AnsitoUtf8(trim('andyy_tan'));
  Params.Values['sign']:= AnsitoUtf8('6038922FFED6ABDEE4F371C8A8A0A0B2');
  Params.Values['sign_method'] := AnsitoUtf8('md5');
  Params.Values['timestamp'] := AnsitoUtf8('2010-12-15 14:53:54');
  Params.Values['v'] := AnsitoUtf8('2.0');


  RespData := TStringStream.Create('');
  http.Post('http://gw.api.tbsandbox.com/router/rest?', Params, RespData);


返回的错误码:
 <?xml version="1.0" encoding="utf-8" ?>  
- <error_response>
  <args list="true" />  
  <code>21</code>  
  <msg>Missing method</msg>  
  </error_response>
- <!-- vsandbox068048.cm4
  -->  

根据淘宝的错误码21,是“缺少方法名参数 传入的参数加入method字段 ”

但我明明是传过了。。。。。。


2011.09.09*************************************************************************

下午在网上找到了一段代码,果断剽窃之,嘿嘿。
  public void ItemsGet()
  {

  Dictionary<string, string> req_params = new Dictionary<string, string>();

  //系统级输入参数 //app_key 
  req_params.Add("app_key", "test");

  //返回格式 
  req_params.Add("format", "xml");

  //api方法名 
  req_params.Add("method", "taobao.items.get");

  //时间戳 
  req_params.Add("timestamp", DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss"));

  //版本 
  req_params.Add("v", "1.0");

  //应用级输入参数 

  //返回字段列表 
  req_params.Add("fields", "iid,title,nick,pic_path,cid,price,type,location.city,delist_time,post_fee");

  //查询条件 
  req_params.Add("q", "iphone 3g");

  //Secret,App Secret密钥 
  string secret = "test";

  //sign,生成签名字符串 
  string sign = EncryptUtil.Signature(req_params,secret,"sign"); 

  req_params.Add("sign", sign); 

  //调用API 
  TaobaoJsonRestClient client=new TaobaoJsonRestClient(); 

  string responseBody = client.invokeAPI(req_params); 

  Console.WriteLine(responseBody); 

  }

编译抛错:

错误 1 当前上下文中不存在名称“EncryptUtil” D:\Project\Demo\TaoBaoAPI\TaoBaoAPI\TaoBaoAPI\MainForm.cs 129 27 TaoBaoAPI

错误 2 找不到类型或命名空间名称“TaobaoJsonRestClient”(是否缺少 using 指令或程序集引用?) D:\Project\Demo\TaoBaoAPI\TaoBaoAPI\TaoBaoAPI\MainForm.cs 134 13 TaoBaoAPI

错误 3 找不到类型或命名空间名称“TaobaoJsonRestClient”(是否缺少 using 指令或程序集引用?) D:\Project\Demo\TaoBaoAPI\TaoBaoAPI\TaoBaoAPI\MainForm.cs 134 45 TaoBaoAPI


应该是没有引用taobao的API,下了一个SDK,用“TaobaoJsonRestClient”关键字果断搜之,无果。问,如何引用?

2011.09.10*************************************************************************

调用成功,呵呵。
1、引用淘宝提供的TopSdk.dll
2、引用using Top.Api;
using Top.Api.Domain;
using Top.Api.Parser;
using Top.Api.Request;
using Top.Api.Response;
using Top.Api.Util;

3、
  string url = "http://gw.api.tbsandbox.com/router/rest";
  string appkey = "test";//"12129701";
  string appsecret = "test"; // "FDE5D2E2B98A81BB91057D9BB03F6B66";
 
  ITopClient client = new DefaultTopClient(url, appkey, appsecret);

  UserGetRequest req = new UserGetRequest();
  req.Fields = "user_id,uid,nick,sex,buyer_credit,seller_credit,location,created,last_visit,birthday,type,status,alipay_no,alipay_account,alipay_account,email,consumer_protection,alipay_bind";
  req.Nick = ttbxUser.Text;//"sandbox_c_1";

  UserGetResponse response = client.Execute(req);
           
  rtbProperty.Text = "用户(User):********************************************************************" + "\n";
  rtbProperty.Text = rtbProperty.Text + "用户数字ID(user_id):" + response.User.UserId + "\n";
  rtbProperty.Text = rtbProperty.Text + "用户字符串ID(uid):" + response.User.Uid + "\n";
  rtbProperty.Text = rtbProperty.Text + "用户昵称(nick):" + response.User.Nick + "\n";


2011.09.13*************************************************************************
1、如果上网环境要求使用代理该怎么办呢?
2、如何遍历淘宝TopDll.dll下面类的所有属性和值呢?目前只取到了第一级.

第一问题问了淘宝开发客服,目前没有这个功能留了建议给他们
第二问题在“床上等你”留贴,无解。贴子沉了。

2011.09.15*************************************************************************
想试一个API的商品类API,但是没有测试用例。淘宝开发客服说是要用正式测试环境,需要用实名绑定支付宝,偶有没有.
晚上试着绑定支付宝,不成功。有点晚了,明天再说。

2011.09.15*************************************************************************
下午实名注册了支付宝,等审核。手机号、身份证全都卖给淘宝了。。。。。。。

2011.09.17*************************************************************************
进了开发者中心要配置神马沙箱,还要填一个回调URL地址,不知道应该填什么,烦燥。奇怪了,怎么现在进了开发者中心没有客服服务了。星期一再说吧。

2011.09.19*************************************************************************
下午骚扰淘宝开发客服。搞清楚了两件事
1、URL地址是指自己开发的网页地址,如果是桌面程序就不用填。
2、如果要测试商品类API,则直接在淘宝上面选择一个商品,把ID填上去即可。但是要使用自己申请的沙箱
比如:http://item.taobao.com/item.htm?id=10844596668那么ID就是10844596668。但是我测试不成功,可能是我的沙箱有问题。

还想研究一下淘宝的赢利模式。没时间哇,十一月份就要考会计证了。。。。

晚上回去试了下商品API,抛错:Invalid app Key。我用的可是申请的App Key和App Secret,感情这都不行......
淘宝开发客服下班了,明天再骚扰.

2011.09.20*************************************************************************
看了淘宝的一些开发突然想到了解决桌面系统注册收费的解决办法:
1、桌面程序登录时首先访问一个网站。桌面程序提供公司名称并发送请求。网站返回公司是否可以继续使用等信息。
如果能继续使用则进入系统否则提示信息。
2、当收到用户费用,在网站上添加用户的最后使用期限。。。。
3、网站想采用C#开发webservice

上午骚扰淘宝开发客服有成效。原来我那个申请的App Key和App Secret还处在什么沙箱环境,要转成正式环境才行。
转成正式环境时要填写回调URL,没有,果断填上“度娘”的网址,成功。淘宝去审核了。
用淘宝API测试工具测试通过,晚上回家再用C#试下商品类的API。一直郁闷的是桌面程序没办法穿透代理。不然在公司也
可以试下。

又想到一个问题。如果我的程序要用做分析,比如销售排行搒之类的。这必然要写SQL语句才行,可是淘宝只提供基础数据。
我要怎么加工数据呢?难道把查询出来的数据先插入到数据库,然后再做深加工?


2011.09.21*************************************************************************
尿结石。早上5:30分疼醒了。难以忍受。站也不是,坐也不是。挨到7:00上医院。B超、验尿,右手一针,左手一针,
屁股一针,折腾了一上午。拿了一个星期的药回家。还是疼,但没有那个强烈了。医生交代多跳跃、多喝水。花掉了400大元。
下午看了在“床上等你”发布的帖子:怎么引用top.bll的cs,试了一下网上回复,不行。


2011.09.22*************************************************************************
今天有点小收获。解决引用top.bll的cs。虽然还是不能引用(可能是把两个完整的项目加一个解决方案里面所以抛错)。
还有一个是解决了获取淘宝TOPSDK.dll类中指定的类属性遍历问题。

但愿晚上肚子不要再痛了,昨天晚上搞了2点半才睡。
不过休息了两天。嘿嘿,爽啊。
明天又上班了。>_<

2011.09.23*************************************************************************
今天搞定了遍历一个类的属性名、类型、值
private void btnClassInfo_Click(object sender, EventArgs e)
{

  Item itemtest = new Item();

  itemtest.AfterSaleId = 12;
  itemtest.ApproveStatus = "ApproveStatus";
}

//显示对象的属性及值
private void SetObjPropValueToCtrls(object objprop)
{

  System.Type type = objprop.GetType();
  foreach (System.Reflection.PropertyInfo p in type.GetProperties())
  {
    rtbProperty.Text = rtbProperty.Text + "Name: " + p.Name +
                                          "   Value:" + p.GetValue(objprop, null) + 
                                          "   PropertyType: " + p.PropertyType +
                                          "\n";
   }
 
}

明天估计可以把按照类自己将值赋到界面上这个方法写一下......
       
2011.10.11*************************************************************************
十一放假,考会计。好长时间没搞了。这两天小有成就,SetObjPropValueToCtrls()方法搞的差不多。可以把类的值赋
到界面上去了。再接再厉。

2011.10.12*************************************************************************
SetObjPropValueToGridRow(将对象的值按属性赋给网格中定的一行)遇到了两个问题,
一个网格里面加载图片的问题.如果是本地图片还好办,如果是网络上图片就麻烦一点。
另一个网格中的Combobox类型的列怎么显示内容。
第一个问题:
  String pictUrl = (String)p.GetValue(objProperty, null);
  WebRequest webrequest = WebRequest.Create(pictUrl);
  WebResponse res = webrequest.GetResponse();

  dgView[col, rowIndex].Value = new Bitmap(res.GetResponseStream());

第二个问题:
  先取得Combobox里面的Items,然后循环,发现相等则赋值
  DataGridViewComboBoxColumn dataGridViewComboBoxColumn = new DataGridViewComboBoxColumn();
  dataGridViewComboBoxColumn = (DataGridViewComboBoxColumn)dgView.Columns[col];
  for (int i = 0; i < dataGridViewComboBoxColumn.Items.Count; i++)
  {
    ......
  }

2011.10.14*************************************************************************
  给系统换了下皮肤.用的是IrisSkin2.dll,貌似对DataGridView无效.

1. 先把IrisSkin2.dll文件添加到当前项目
  引用(解决方案资源管理器->当前项目->引用->右键->添加引用,找到IrisSkin2.dll文件.....之后就不用我说了吧^_^).IrisSkin2.dll文件最好放在当前项目\\bin\\Debug文件中.
 
2. 然后把IrisSkin2.dll文件添加到vc2005的工具箱:
  右键->选择项->浏览找到IrisSkin2.dll文件(文件最好放在当前项目\\bin\\Debug文件中)按确定,控件就添加到工具箱中了.然后把工具箱中新添加的 SkinEngine控件拖到当前项目中。
 
3. 把皮肤目录中的.ssk文件复制到当前项目\\bin\\Debug文件中,(ssk文件可选).
 
4. 再在项目中调用.ssk皮肤文件。例:
 
namespace 当前项目

{
    public partial class Form1 : Form

    {
      public Form1()  //当前项目的构造器中调用皮肤文件

        {
            InitializeComponent();

            this.skinEngine1.SkinFile = \"DiamondBlue.ssk\"; //DiamondBlue.ssk可换用皮肤目录中你喜欢的.ssk文件
                                                                 //(把.ssk复制到当前项目\\bin\\Debug目录中)
        }

    ...

    ...

    ...

2011.10.18*************************************************************************
  这几天做了点封装的工作,小有进展。今天想封装一个基本窗体然后去继承。但是基类窗体做完了,继承下来的子窗体上面的
控件都动不了被锁定了。度娘一把,说是把Modifiers改成public就可以。额,这是忽悠人的。我想还是还放一放。先做一个完
整的界面出来,然后再分析有哪些东西可以做成抽象的。

2011.10.21*************************************************************************
  今天解决了两个不同类型的List转换的问题:
 
  //商品对象转为无类型对象
  public static object ItemToObject(object Item)
  {
  return (object)Item;
  }

  //商品列表转为无类型列表
  public static List<Object> ItemListToObjectList(List<Item> itemList){
   
  List<Object> objectList = new List<object>();

  objectList = itemList.ConvertAll(new Converter<Item, object>(ItemToObject));

  return objectList;  
  }

  还搞清楚一件事,怎么样在一个函数中传出多个参数

        private void button2_Click(object sender, EventArgs e)
        { 
            int a = 1; int b = 2;
            MessageBox.Show("1a: " + a + " 1b: " + b + "\n");
            ExChange(out a, out b);
            MessageBox.Show("2a: " + a + " 2b: " + b + "\n");
        }

        //数值交换
        private void ExChange(out int a, out int b) {
            //这一段是不行的。因为标记了a和b标记out关键字。只能写,不能读
            /*int e;

            e = a;
            a = b;
            b = e; */

            a = 2;
            b = 1;           
        }

2011.10.26*************************************************************************
发现IrisSkin2.dll换肤,有闪动的现象。并且速度明显慢很多(不能接受)。今天换了控件。

2011.11.03*************************************************************************
这些天把用户、类目、商品写完了。系统有一点点样子了。
有一个问题一直没有解决:淘宝的CS架构不用设置代理来访问。
今天先写了一个用代理访问图片的,看看能不能加到淘宝API上面去。

            try
            {

                String pictUrl = "http://img03.taobaocdn.com/bao/uploaded/i3/T1lLyfXgRwXXbQk1zX_114722.jpg";
                WebRequest webrequest = WebRequest.Create(pictUrl);

                WebProxy proxy = new WebProxy();
                proxy.Address = new Uri("http://proxy.midea.com.cn:8080");
                proxy.Credentials = new NetworkCredential("rdccs17", "ccs117");

                webrequest.Proxy = proxy;

                webrequest.UseDefaultCredentials = true;
                WebResponse res = webrequest.GetResponse();

                reflectionImage1.Image = new Bitmap(res.GetResponseStream());
            }
            catch (Exception errStr)
            {
                MessageBox.Show("Exception: " + errStr.Message.ToString());
            }

另外,还要搜集一些需求。可以在猪八戒威客网上面找一找。上面有一些人在发项目。
再一个,是使用淘宝的用户名和密码进行验证用户是否可以登录。淘宝的客服说提供TaoBaoID可以使用。
找到了一个TopAPI.cs的文件,貌似可以用。晚上回去试下。
还有,准备以买家的身份用自己开发的系统买一个暖脚桶送给我妈。。。。^_^

2011.11.04*************************************************************************
早上9:30准时骚扰淘宝客服。连线的时候没有等待排队,直接排第一,呵呵。弄清楚了淘宝验证用户登录的问题:

先打开淘宝的登录网页:http://container.api.taobao.com/container?appkey={appkey}
appkey是开发者申请的。

然后输入用户名和密码登录。
如果登录成功则返回一个访问的URL,在这个URL后面就会跟上返回的参数。获取返回的参数就可以了。

具体如下:
一、打开登录网址,http://container.api.taobao.com/container?appkey={appkey}
二、输入用户名和密码、登录
三、返回结果:http://www.baidu.com/?top_appkey=********
                     &top_parameters=aWZyYW1lPTEmdHM9MTMyMDM3MjQzMjI3NSZ2aXNpdG9yX2lkPTQ3NDI1MjQ2JnZpc2l0b3Jfbmljaz1uaWV5dWFuMTk4MA%3D%3D
                     &top_session=4110406d3a963Yf9ftNhJ74ce9225d4a7020d11cbbcfd76474252461
                     &top_sign=xCcF%2BPznUvTWOvlUk%2F5IRw%3D%3D

下一步工作就是解析上面这个字符串了。

因为我开发的是桌面程序所以申请的回调页面填的是度娘www.baidu.com。所以登录成功就把度娘的网站打开了。

不过这里有一个很大的问题,那个登录界面是淘宝的官方登录网站。这也就算了,上面还有我申请应用的时候随便找的一个
图片。。。。。讨厌

2011.11.05*************************************************************************
上午调试登录窗体。拼命的用我账号登录淘宝验证。由于频繁登录,十几次后被淘宝发现了,直接弹出一个验证码框要填
验证码。反正搞定了,不填,果断跑路。。。呵呵,

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值