一、签名函数
static string SignTopRequest(IDictionary<string, string> parameters, string secret, string signMethod)
{
// 第一步:把字典按Key的字母顺序排序
IDictionary<string, string> sortedParams = new SortedDictionary<string, string>(parameters, StringComparer.Ordinal);
IEnumerator<KeyValuePair<string, string>> dem = sortedParams.GetEnumerator();
// 第二步:把所有参数名和参数值串在一起
StringBuilder query = new StringBuilder();
if (signMethod == "md5") //签名的摘要算法,可选值为:hmac,md5,hmac-sha256
{
query.Append(secret);
}
while (dem.MoveNext())
{
string key = dem.Current.Key;
string value = dem.Current.Value;
if (!string.IsNullOrEmpty(key) && !string.IsNullOrEmpty(value))
{
query.Append(key).Append(value);
}
}
// 第三步:使用MD5/HMAC加密
byte[] bytes;
if ("hmac" == signMethod)
{
HMACMD5 hmac = new HMACMD5(Encoding.UTF8.GetBytes(secret));
bytes = hmac.ComputeHash(Encoding.UTF8.GetBytes(query.ToString()));
}
else
{
query.Append(secret);
MD5 md5 = MD5.Create();
bytes = md5.ComputeHash(Encoding.UTF8.GetBytes(query.ToString()));
}
// 第四步:把二进制转化为大写的十六进制
StringBuilder result = new StringBuilder();
for (int i = 0; i < bytes.Length; i++)
{
result.Append(bytes[i].ToString("X2"));
}
return result.ToString();
}
二、根据关键字搜索商品
string time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
IDictionary<string, string> parameters = new Dictionary<string, string>();
parameters.Add("app_key", appkey);
parameters.Add("method", "taobao.tbk.dg.material.optional");
parameters.Add("v", "2.0");
parameters.Add("timestamp", time);
parameters.Add("partner_id", "top-apitools");
parameters.Add("format", "json");
parameters.Add("sign_method", "md5");
parameters.Add("adzone_id", AdzoneId.ToString());
parameters.Add("need_free_shipment", "true");
parameters.Add("start_tk_rate", "20");//商品筛选-淘客佣金比率下限。如:1234表示12.34%
parameters.Add("is_tmall", "true");//商品筛选-是否天猫商品。true表示属于天猫商品,false或不设置表示不限
parameters.Add("sort", "tk_total_sales_des");//排序_des(降序),排序_asc(升序),销量(total_sales),淘客佣金比率(tk_rate), 累计推广量(tk_total_sales),总支出佣金(tk_total_commi),价格(price),匹配分(match)
parameters.Add("platform", "2");//链接形式:1:PC,2:无线,默认:1
parameters.Add("get_topn_rate", "0");
parameters.Add("q", item.keyword);//关键字
parameters.Add("include_good_rate", "true");//商品筛选-好评率是否高于行业均值。True表示大于等于,false或不设置表示不限
parameters.Add("include_pay_rate_30", "true");//商品筛选(特定媒体支持)-成交转化是否高于行业均值。True表示大于等于,false或不设置表示不限
parameters.Add("has_coupon", "true");//优惠券筛选-是否有优惠券。true表示该商品有优惠券,false或不设置表示不限
parameters.Add("need_prepay", "true");//商品筛选-是否加入消费者保障。true表示加入,false或不设置表示不限
parameters.Add("start_dsr", "49000");//商品筛选(特定媒体支持)-店铺dsr评分。筛选大于等于当前设置的店铺dsr评分的商品0-50000之间
parameters.Add("page_no", i.ToString());
parameters.Add("page_size", "20");
string sign = SignTopRequest(parameters, secret, "md5");
parameters.Add("sign", sign);
var uriBuilder = new UriBuilder(url);
var param = HttpUtility.ParseQueryString(string.Empty);
foreach (var item2 in parameters)
{
param[item2.Key] = item2.Value;
}
uriBuilder.Query = param.ToString();