yz_server/Server/HttpRequests/TaobaoRequest.cs

868 lines
35 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using CsharpHttpHelper;
using Common.Models.Enums;
using Common.Models.UnqTables;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
using System.Threading.Tasks;
namespace Server.HttpRequests
{
public class TaobaoRequest
{
public delegate bool OrderChange(TaobaoRequest Req, JToken Order);
public static event OrderChange OrderChangeEvent;
#region
public TaobaoRequest() { }
public Lianmeng Lianmeng { get; private set; }
public string Token { get { return Lianmeng.Token; } }
public TaobaoRequest(Lianmeng Lianmeng)
{
if (Lianmeng.LianmengType != LianmengType.) throw new Exception($"当前账号{Lianmeng.LianmengType},不支持!");
this.Lianmeng = Lianmeng;
}
TbMedia Meadia;
public TaobaoRequest(Lianmeng Lianmeng, TbMedia Media)
{
if (Lianmeng.LianmengType != LianmengType.) throw new Exception($"当前账号{Lianmeng.LianmengType},不支持!");
this.Lianmeng = Lianmeng;
this.Meadia = Media;
}
private string Appid { get; set; } = "27754179";
private string Appsecret { get; set; } = "2ee7beffe4752708564bf110971c262f";
private const string SIGN_METHOD_MD5 = "md5";
private const string SIGN_METHOD_HMAC = "hmac";
private string SignTopRequest(Dictionary<string, string> parameters, string secret, string signMethod = "hmac")
{
// 第一步把字典按Key的字母顺序排序
IDictionary<string, string> sortedParams = new SortedDictionary<string, string>(parameters, StringComparer.Ordinal);
// 第二步:把所有参数名和参数值串在一起
StringBuilder query = new StringBuilder();
if (SIGN_METHOD_MD5.Equals(signMethod))
{
query.Append(secret);
}
foreach (KeyValuePair<string, string> kv in sortedParams)
{
if (!string.IsNullOrEmpty(kv.Key) && !string.IsNullOrEmpty(kv.Value) && kv.Key != "sign")
{
query.Append(kv.Key).Append(kv.Value);
}
}
//// 第三步:把请求主体拼接在参数后面
//if (!string.IsNullOrEmpty(body))
//{
// query.Append(body);
//}
// 第四步使用MD5/HMAC加密
byte[] bytes;
if (SIGN_METHOD_HMAC.Equals(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();
}
/// <summary>
/// 计算签名,返回请求阿里妈妈服务器的参数
/// </summary>
/// <param name="_api">api名称</param>
/// <param name="_data">参数</param>
/// <param name="appkey">appkey</param>
/// <param name="appsecret">appsecret</param>
/// <returns></returns>
private string GetAlimamaRequestData(string _api, object _data, string appkey = "", string appsecret = "", string token = "")
{
try
{
var data = _data;
var api = _api;
Dictionary<string, string> param = new Dictionary<string, string>();
var type = data.GetType().GetProperties();
foreach (var item in type)
{
var _value = item.GetValue(data).ToString();
param[item.Name] = _value;
}
param["method"] = api;
param["app_key"] = appkey;
param["session"] = token;
param["timestamp"] = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
param["format"] = "json";
param["v"] = "2.0";
param["sign_method"] = "md5";
//计算签名
string sign = SignTopRequest(param, appsecret, param["sign_method"]);
param["sign"] = sign;
return HttpExtend.BuildQuery(param);
}
catch (Exception)
{
}
return string.Empty;
}
/// <summary>
/// 请求淘宝服务器端
/// </summary>
/// <param name="ApiName">api名称</param>
/// <param name="Data">参数</param>
/// <param name="ThrowException">异常是否抛出</param>
/// <returns></returns>
public JToken GetJSON(string ApiName, object Data, bool ThrowException = false)
{
var query = GetAlimamaRequestData(ApiName, Data, Appid, Appsecret, Token);
var html = string.Empty;
string _url = string.Empty;
try
{
HttpHelper http = new HttpHelper();
_url = "http://gw.api.taobao.com/router/rest?" + query;
HttpItem item = new HttpItem()
{
URL = _url,//URL 必需项
Method = "GET",//URL 可选项 默认为Get
Timeout = 5000,//连接超时时间 可选项默认为100000
ReadWriteTimeout = 5000,//写入Post数据超时时间
Accept = "text/html, application/xhtml+xml, */*",// 可选项有默认值
ContentType = "application/json",//返回类型 可选项有默认值
};
var result = http.GetHtml(item);
//{"tbk_dg_vegas_tlj_create_response":{"result":{"model":{"rights_id":"XvLXNwkX8HBQ8VZ2WS4DlNtN7m9cS4TU","send_url":"https:\/\/uland.taobao.com\/taolijin\/edetail?eh=5L6pfx5vldOZuQF0XRz0iAXoB%2BDaBK5LQS0Flu%2FfbSp4QsdWMikAalrisGmre1Id0BFAqRODu1004PvI5lqUzYTPq7zN5TtBXU4J7X2wljh7PW2ShemY2x1IRRpXndAncj8tXpgtxXzbOKxKSviYxsuv0da8KKt7WubOUkoI2Oa3HR2hP0JFSmjppH3xlrrJg8pBHJnzzOjd2vZvO6fEydXbwx4naJ6dk%2FBu2lJxZtMc7BMk%2FDH7wY2fDQKPuN9qcxwaWpDoQwfi%2B9ZUBfurmaewy3GJqMoK4342DlvX1ZVNOJlvqrE2h6J7%2BkHL3AEW&union_lens=lensId%3A0b14fbf4_0b3d_16f65a622fd_31b4%3Btraffic_flag%3Dlm","vegas_code":"N4HHV6HV"},"success":true},"request_id":"no8k8bbwsct2"}}
if (result != null && result.StatusCode != System.Net.HttpStatusCode.OK) throw new Exception(result.Html);
html = result.Html;
var JsonResult = JObject.Parse(html);
if (JsonResult == null) throw new Exception(html);
if (JsonResult["error_response"] != null)
throw new Exception(html);
//tbk_sc_order_details_get_response
//tbk_sc_order_details_get_response
var key = ApiName.Replace("taobao.", "").Replace(".", "_") + "_response";
if (JsonResult[key] == null) throw new Exception($"key = {key},html = {html}");
var ResultToken = JsonResult[key];
if (ResultToken["result"] != null) return ResultToken["result"];
if (ResultToken["results"] != null) return ResultToken["results"];
if (ResultToken["data"] != null) return ResultToken["data"];
return ResultToken;
}
catch (Exception ex)
{
if (ex.Message.Contains("过期"))
{
Lianmeng.ExpirationTime = DateTime.Now;
//Client.SigleClient.Db.Updateable(Lianmeng).UpdateColumns(f => new { f.ExpirationTime }).ExecuteCommand();
}
//Client.SigleClient.Event.OnLog($"请求API{ApiName}发生错误,{ex.Message}", "系统", ex, true);
if (ThrowException) throw ex;
}
return null;
}
#endregion
/// <summary>
/// 更新订单
/// </summary>
/// <param name="StartTime">开始时间</param>
/// <param name="EndTime">结束时间</param>
/// <param name="orderScene">同步的订单类型</param>
/// <returns>返回错误原因</returns>
public Task<string> UpdateOrder(DateTime StartTime, DateTime EndTime, TBOrderScene orderScene = TBOrderScene.)
{
return Task.Factory.StartNew<string>(() =>
{
try
{
if (StartTime < DateTime.Now.AddMonths(-5)) StartTime = DateTime.Now.AddMonths(-5);
var time = StartTime;
do
{
/*
逻辑:从结束的时间,倒序更新
*/
var sTime = time;
var eTime = time.AddHours(3);
//if (eTime > EndTime) eTime = StartTime;
time = eTime;
//是否还有下一页
var page_on = 0;
var has_next = false;
var position_index = string.Empty;
do
{
page_on++;
var postData = new
{
query_type = 4,//查询时间类型1按照订单淘客创建时间查询2:按照订单淘客付款时间查询3:按照订单淘客结算时间查询4:按照订单更新时间;
page_size = 100,//页大小
start_time = sTime.ToString("yyyy-MM-dd HH:mm:ss"),
end_time = eTime.ToString("yyyy-MM-dd HH:mm:ss"),//这里是对应前面同步间隔的19分钟 //【订单查询结束时间订单开始时间至订单结束时间中间时间段日常要求不超过3个小时但如618、双11、年货节等大促期间预估时间段不可超过20分钟超过会提示错误调用时请务必注意时间段的选择以保证亲能正常调用
page_no = page_on,
position_index = position_index,
order_scene = (int)orderScene,
};
var Json = GetJSON("taobao.tbk.sc.order.details.get", postData);
if (Json != null && Json["data"] != null)
{
var Data = Json["data"];
has_next = (bool)Data["has_next"];
position_index = Data["position_index"].ToString();
var orders = Data["results"]["publisher_order_dto"];
if (orders == null) break;
foreach (var item in orders)
{
item["LianmengId"] = Lianmeng.Id;
OrderChangeEvent?.Invoke(this, item);
}
if (!has_next)
{
Lianmeng.ModifiedTime = sTime;
//Client.SigleClient.Db.SaveCache(Lianmeng);
//Client.SigleClient.Db.Updateable(Lianmeng).UpdateColumns(f => new { f.ModifiedTime }).ExecuteCommand();
}
}
else
break;
} while (has_next);
} while (time < EndTime);
}
catch (Exception ex)
{
//Client.SigleClient.Event.OnLog(ex.Message, "淘宝", ex);
return ex.Message;
}
return string.Empty;
});
}
/// <summary>
/// 淘口令解析并转链 返回商品ID 【淘宝客-服务商-淘口令解析&转链】
/// </summary>
/// <returns></returns>
public JToken TpwdConvert(string Content, string SiteId, string AdzoneId)
{
return GetJSON("taobao.tbk.sc.tpwd.convert", new { password_content = Content, adzone_id = AdzoneId, site_id = SiteId });
}
/// <summary>
/// 正则获取Url链接
/// </summary>
public const string RegexGetUrl = @"(?<链接>(?:(?:ht|f)tps?):\/\/[\w\-]+(?:\.[\w\-]+)+(?:[\w\-\.,@?^=%&:\/~\+#]*[\w\-\@?^=%&\/~\+#])?)";
public JToken TbUrlAnalysis(string Content)
{
try
{
var regs = Regex.Matches(Content, RegexGetUrl);
if (regs.Count == 0) return null;
foreach (Match reg in regs)
{
try
{
var url = reg.Groups["链接"].Value;
var jToken = GetJSON("taobao.tbk.item.click.extract", new { click_url = url });
if (jToken != null)
{
}
}
catch (Exception ex)
{
}
}
}
catch (Exception ex)
{
//Client.SigleClient.Event.OnLog($"解析内容中的url异常", Exception: ex, IsDebug: true);
}
return null;
}
/// <summary>
/// 解析宝贝地址
/// </summary>
/// <returns></returns>
public string AnalysisItemid(string Content)
{
var itemid = AnalysisItemidByUrl(Content);
if (!string.IsNullOrWhiteSpace(itemid))
return itemid;
if (Meadia == null) throw new Exception("推广位信息不能为空!");
var convertRst = TpwdConvert(Content, Meadia.SiteId, Meadia.AdzoneId);
if (convertRst != null)
{
return convertRst["num_iid"].ToString();
}
return String.Empty;
}
/// <summary>
/// 判断是否为淘宝的相关域名,后续有新的在这个位置添加
/// </summary>
private static string RegDomainMatch = @"((?:m.tb.cn))";
private string AnalysisItemidByUrl(string Content)
{
try
{
//判断是否为淘宝的相关域名
if (!Regex.IsMatch(Content, RegDomainMatch, RegexOptions.IgnoreCase))
return string.Empty;
var regs = Regex.Matches(Content, RegexGetUrl);
if (regs.Count == 0)
return String.Empty;
foreach (Match regTmp in regs)
{
try
{
var url = regTmp.Groups["链接"].Value;
var result = new HttpHelper().GetHtml(url);
if (result != null && result.StatusCode != System.Net.HttpStatusCode.OK) throw new Exception(result.Html);
var html = result.Html;
var itemid = string.Empty;
var reg = Regex.Match(html, @"var url = '(?<url>.+?)';", RegexOptions.IgnoreCase);
if (reg.Success)
{
itemid = GetItemIdByContent(html);
if (!string.IsNullOrWhiteSpace(itemid))
return itemid;
itemid = GetItemIdByCoupon(reg.Groups["url"].Value);
if (!string.IsNullOrWhiteSpace(itemid))
return itemid;
}
}
catch (Exception ex)
{
}
}
}
catch (Exception ex)
{
throw ex;
}
return String.Empty;
}
/// <summary>
/// 查找宝贝Id的正则表达式
/// 注:追加为最后一个括号前加|(?:新的正则)
/// </summary>
private static string RegItemId = @"((?:item[Ii]d=(?<itemid>\d{5,}))|(?:item_id=(?<itemid>\d{5,}))|(?:\?id=(?<itemid>\d{5,}))|(?:&id=(?<itemid>\d{5,}))|(?:/i(?<itemid>\d{5,}))|(?:num[Ii]id=(?<itemid>\d{5,})))";
/// <summary>
/// 正则表达式匹配商品Id
/// </summary>
/// <param name="Content">查找的内容</param>
/// <returns>查找到的宝贝id</returns>
public string GetItemIdByContent(string Content)
{
var reg = Regex.Match(Content, RegItemId);
if (reg.Success)
return reg.Groups["itemid"].Value;
return string.Empty;
}
/// <summary>
/// 通过优惠券链接获取淘宝宝贝的id
/// </summary>
/// <param name="url"></param>
public string GetItemIdByCoupon(string url)
{
try
{
var urlTmp = url.ToLower();
if (urlTmp.Contains(@"uland.taobao.com/coupon"))//这是针对淘宝联盟有优惠券的接口.//https://uland.taobao.com/coupon/edetail
{
var coupon = CheckCoupon(url);//将返利接口转成淘宝宝贝接口
if (coupon != null) return coupon.itemId;
}
else if (url.Contains(@"s.click.taobao.com"))//这是针对淘宝联盟没有的接口.//https://s.click.taobao.com/t?e=m
{
var html = string.Empty;
string locUrl = HttpExtend.GetLocationUrl(url);
if (!string.IsNullOrWhiteSpace(locUrl) && locUrl.StartsWith("https://s.click.taobao.com/t?e=", StringComparison.OrdinalIgnoreCase))
{
var locUrlTmp = HttpExtend.GetLocationUrl(locUrl);
if (!string.IsNullOrEmpty(locUrlTmp)) locUrl = locUrlTmp;
}
if (!string.IsNullOrEmpty(locUrl))//跳转地址存在
{
if (locUrl.ToLower().Contains("uland.taobao.com/coupon/edetail?"))
{
var reg = Regex.Match(locUrl, @"(?:&|\?)itemId=(\d+)", RegexOptions.IgnoreCase);
if (reg.Success)
return reg.Groups[1].Value;
html = HttpHelper.URLDecode(new HttpHelper().GetHtml(locUrl).Html);
var reqUrl = Regex.Match(html, "&req_url=([^\"]+)", RegexOptions.IgnoreCase);
if (reqUrl.Success)
{
var param_e = Regex.Match(reqUrl.Groups[1].Value, "e=([^&]+)");
if (!param_e.Success)
return string.Empty;
var coupon = CheckCoupon(reqUrl.Groups[1].Value);
if (coupon != null)
return coupon.itemId;
}
}
else if (locUrl.Contains("uland.taobao.com"))
{
var _reg = Regex.Match(locUrl, "itemId=(\\d+)", RegexOptions.IgnoreCase);
if (_reg.Success)
return _reg.Groups[1].Value;
}
else if (locUrl.Contains("tu="))
{
//获得二次访问地址
string next = HttpHelper.URLDecode(locUrl.Replace("http://s.click.taobao.com/t_js?tu=", "").Replace("https://s.click.taobao.com/t_js?tu=", ""));
html = HttpHelper.URLDecode(new HttpHelper().GetHtml(next, referer: locUrl).Html);
var reg = Regex.Match(html, @"(?:&|\?)itemId=(\d+)", RegexOptions.IgnoreCase);
if (reg.Success)
return reg.Groups[1].Value;
}
else
return GetItemIdByContent(new HttpHelper().GetHtml(locUrl).Html);
}
#region
if (string.IsNullOrWhiteSpace(locUrl))
{
html = new HttpHelper().GetHtml(url).Html;
var reg = Regex.Match(html, "real_jump_address = '(?<真正的跳转地址>[^']+)");
if (reg.Success)
{
var address = reg.Groups["真正的跳转地址"].Value;
for (int i = 0; i < 3; i++)
{
html = new HttpHelper().GetHtml(address.Replace("&amp;", "&"), referer: url).Html;
var itemid = GetItemIdByContent(html);
if (!string.IsNullOrWhiteSpace(itemid))
return itemid;
else
{
//访问频繁,休息重试3次
Thread.Sleep(500);
}
}
}
}
#endregion
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
return string.Empty;
}
private static DateTime NextTime = DateTime.MinValue;
/// <summary>
/// 淘宝优惠券
/// </summary>
public class TaobaoCoupon
{
/// <summary>
/// 优惠券状态,!=0表示优惠券失效或没有优惠券
/// </summary>
public int retStatus { get; set; }
/// <summary>
/// 使用条件
/// </summary>
public string startFee { get; set; }
/// <summary>
/// 使用金额
/// </summary>
public string amount { get; set; }
/// <summary>
/// 店铺Logo
/// </summary>
public string shopLogo { get; set; }
/// <summary>
/// 店铺名称
/// </summary>
public string shopName { get; set; }
/// <summary>
/// 使用时间
/// </summary>
public DateTime effectiveStartTime { get; set; }
/// <summary>
/// 活动截止时间
/// </summary>
public DateTime effectiveEndTime { get; set; }
/// <summary>
/// 点击下单
/// </summary>
public string clickUrl { get; set; }
/// <summary>
/// 分享地址
/// </summary>
public string shareUrl { get; set; }
/// <summary>
/// 软件标题
/// </summary>
public string title { get; set; }
/// <summary>
/// 原价
/// </summary>
public string reservePrice { get; set; }
/// <summary>
/// 折扣价格
/// </summary>
public string discountPrice { get; set; }
/// <summary>
/// 30天销量
/// </summary>
public int biz30Day { get; set; }
/// <summary>
/// 是否是天猫 ,1(是)
/// </summary>
public string tmall { get; set; }
/// <summary>
/// 未知参数
/// </summary>
public int postFree { get; set; }
/// <summary>
/// 宝贝ID
/// </summary>
public string itemId { get; set; }
/// <summary>
/// 未知参数
/// </summary>
public string couponFlowLimit { get; set; }
}
/// <summary>
/// 检测淘宝优惠券
/// </summary>
/// <param name="coupon_click_url">优惠券地址</param>
/// <returns></returns>
public TaobaoCoupon CheckCoupon(string coupon_click_url)
{
string html = string.Empty;
try
{
if (coupon_click_url.Contains("coupon/details") || coupon_click_url.Contains("coupon/edetail"))
{
TaobaoCoupon c = new TaobaoCoupon();
coupon_click_url = coupon_click_url.Replace("coupon/details", "cp/coupon/").Replace("coupon/edetail", "cp/coupon/");
var http = new HttpHelper();
for (int i = 0; i < 4; i++)
{
if (NextTime > DateTime.Now)
return null;
var item = http.GetItem(coupon_click_url);
item.Timeout = 30000;
item.ReadWriteTimeout = 20000;
item.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:18.0) Gecko/20100101 Firefox/18.0";
item.ContentType = "application/x-www-form-urlencoded";
item.SetProxyipCDN();
html = http.GetHtml(item).Html.Replace("\\", "");
if (html.Contains("亲,小二正忙,滑动一下马上回来") || html.Contains("操作超时") || html == @"{""success"": false}")
{
if (i == 3)
{
NextTime = DateTime.Now.AddMinutes(2);
return null;
}
Thread.Sleep(500);
continue;
}
var _obj = HttpExtend.JsonToDictionary(html);//转成字典
if (_obj != null)
{
_obj = _obj["result"] as Dictionary<string, object>;
_obj.ConvertToObj(c);
if (c.retStatus == 1) continue;
_obj = _obj["item"] as Dictionary<string, object>;
if (_obj["clickUrl"] != null) _obj["clickUrl"] = "http:" + _obj["clickUrl"].ToString();
if (_obj["shareUrl"] != null) _obj["shareUrl"] = "http:" + _obj["shareUrl"].ToString();
_obj.ConvertToObj(c);
if (c.retStatus == 2 || c.retStatus == 0 || c.retStatus == 4) return c;
}
}
}
}
catch (Exception ex)
{
// Client.SigleClient.Event.OnLog($@"检查淘宝优惠券异常", Exception: ex);
}
return null;
}
public class TaobaoIteminfo
{
/// <summary>
/// 优惠券剩余量
/// </summary>
public int coupon_remain_count { get; set; }
//coupon_remain_count Number 6859 优惠券剩余量
//优惠券总量
public int coupon_total_count { get; set; }
//coupon_total_count Number 8000 优惠券总量
/// <summary>
/// 优惠券面额
/// </summary>
public string coupon_info { get; set; }
//coupon_info String 满16元减10元 优惠券面额
/// <summary>
/// 优惠券结束时间
/// </summary>
public DateTime coupon_end_time { get; set; }
// coupon_end_time String 2016-09-26 优惠券结束时间
/// <summary>
/// 优惠券开始时间
/// </summary>
public DateTime coupon_start_time { get; set; }
// coupon_start_time String 2016-09-25 优惠券开始时间
/// <summary>
/// 优惠券(商品优惠券推广链接中的券)类型1 公开券2 私有券3 妈妈券
/// </summary>
public int coupon_type { get; set; }
//coupon_type Number 1 优惠券(商品优惠券推广链接中的券)类型1 公开券2 私有券3 妈妈券
/// <summary>
/// 商品优惠券推广链接
/// </summary>
public string coupon_click_url { get; set; }
//coupon_click_url String https://uland.taobao.com/coupon/edetail?e=nqUNB1NOF3Bt3vqbdXnGloankzPYmeEFkgNrw6YHQf9pZTj41Orn8MwBAs06HAOzqQomYNedOiHDYPmqkFXqLR0HgBdG%2FDDL%2F1M%2FBw7Sf%2FesGXLf%2BqX4cbeC%2F2cR0p0NlWH0%2BknxpnCJJP%2FQkZSsyo1HvKjXo4uz&pid=mm_26381042_12970066_52864659&af=1 商品优惠券推广链接
/// <summary>
/// 后台一级类目
/// </summary>
public int category_id { get; set; }
//category_id Number 1 后台一级类目
/// <summary>
/// 展示常规佣金率
/// </summary>
public double max_commission_rate { get; set; }
//max_commission_rate String 20.3 当不入参special_id、relation_id、external_id时展示常规佣金率(%)
/// <summary>
/// 商品id
/// </summary>
public string item_id { get; set; }
//item_id Number 524136796550 商品id
/// <summary>
/// 商品地址
/// </summary>
public string item_url { get; set; }
//item_url String https://s.click.taobao.com/t?spm=a2e2e.10720394/c.90202110.1.4399704cUUhhH0&e=m%3D2%26s%3D0NJS731SUEdw4vFB6t2Z2ueEDrYVVa64LKpWJ%2Bin0XLjf2vlNIV67uIA4kDYDopEpOjgxi0uT208hw4H8GMUew7uoRPWrIBwR7CIpaNCoiKr9WTFywb%2BCtGNFs53xi4QGSKqJrqeJvt5ArodCWjzv9fsai3uVirbXH%2BQH9e66Y4%3D 商品淘客链接
/// <summary>
/// 预售有礼-推广链接
/// </summary>
public string ysyl_click_url { get; set; }
//ysyl_click_url String https://uland.taobao.com/coupon/edetail?e=nqUNB1NOF3Bt3vqbdXnGloankzPYmeEFkgNrw6YHQf9pZTj41Orn8MwBAs06HAOzqQomYNedOiHDYPmqkFXqLR0HgBdG%2FDDL%2F1M%2FBw7Sf%2FesGXLf%2BqX4cbeC%2F2cR0p0NlWH0%2BknxpnCJJP%2FQkZSsyo1HvKjXo4uz&pid=mm_26381042_12970066_52864659&af=1 预售有礼-推广链接
/// <summary>
/// 预售有礼-预估淘礼金(元)
/// </summary>
public string ysyl_tlj_face { get; set; }
//ysyl_tlj_face String 0.6 预售有礼-预估淘礼金(元)
/// <summary>
/// 预售有礼-淘礼金发放时间
/// </summary>
public string ysyl_tlj_send_time { get; set; }
//ysyl_tlj_send_time String 2019-11-10 21:59:59 预售有礼-淘礼金发放时间
/// <summary>
/// 预售有礼-淘礼金使用开始时间
/// </summary>
public string ysyl_tlj_use_start_time { get; set; }
//ysyl_tlj_use_start_time String 2019-11-10 21:59:59 预售有礼-淘礼金使用开始时间
/// <summary>
/// 预售有礼-佣金比例
/// </summary>
public string ysyl_commission_rate { get; set; }
//ysyl_commission_rate String 20.3 预售有礼-佣金比例(% 预售有礼活动享受的推广佣金比例推广该活动有特殊分成规则请详见https://tbk.bbs.taobao.com/detail.html?appId=45301&postId=9334376
public string ysyl_tlj_use_end_time { get; set; }
//ysyl_tlj_use_end_time String 2019-11-10 21:59:59 预售有礼-淘礼金使用结束时间
/// <summary>
/// 预估最低佣金率
/// </summary>
public double min_commission_rate { get; set; }
//min_commission_rate String 20.3 当入参special_id、relation_id、external_id时该字段展示预估最低佣金率(%)
/// <summary>
/// 比价场景专用
/// </summary>
public int reward_info { get; set; }
//reward_info Number 1 比价场景专用当系统检测到入参消费者ID购买当前商品会获得《天天开彩蛋》玩法的彩蛋时该字段显示1否则为0
}
/// <summary>
/// 单品券高效转链
/// </summary>
/// <param name="ItemId">需要转链的产品ID</param>
/// <param name="SpecialId">会员运营ID</param>
/// <returns></returns>
public TaobaoIteminfo ConvertItemid(string ItemId, long? SpecialId = null)
{
object transportData;
if (SpecialId != null)
{
transportData = new { adzone_id = this.Meadia.AdzoneId, site_id = this.Meadia.SiteId, item_id = ItemId, special_id = SpecialId };
}
else
{
transportData = new { adzone_id = this.Meadia.AdzoneId, site_id = this.Meadia.SiteId, item_id = ItemId };
}
var data = GetJSON("taobao.tbk.privilege.get", transportData);
TaobaoIteminfo obj = new TaobaoIteminfo();
Utils.Util.CopyToObj(data,obj);
return obj;
}
/// <summary>
/// 获取会员绑定的specialId
/// </summary>
/// <param name="ExternalId">通常情况下为wxid</param>
/// <returns></returns>
public long GetSpecialId(string ExternalId)
{
var data = GetJSON("taobao.tbk.sc.publisher.info.get", new { info_type = 2, relation_app = "common", external_id = ExternalId, external_type = 1 });
if (data["inviter_list"]["map_data"].Count() > 0)
{
return (long)data["inviter_list"]["map_data"].First["special_id"];
}
return 0;
}
/// <summary>
/// 获取私域标记链接
/// </summary>
/// <param name="WxId"></param>
/// <param name="RedirectUrl"></param>
/// <param name="ExternalType"></param>
/// <param name="UcRowdId"></param>
/// <returns></returns>
public string GetRelationLink(string WxId, string RedirectUrl, int ExternalType = 1, int? UcRowdId = null)
{
object transportData;
if (UcRowdId != null)
{
transportData = new { external_id = WxId, external_type = ExternalType, op_type = 2, redirect_url = RedirectUrl, ucrowd_id = UcRowdId };
}
else
{
transportData = new { external_id = WxId, external_type = ExternalType, op_type = 2, redirect_url = RedirectUrl };
}
var data = GetJSON("taobao.tbk.sc.relation.record", transportData);
return data["url"].ToString();
}
}
}