using CsharpHttpHelper;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;
namespace Api.Framework.Tools
{
///
/// 快站短网址
///
public class KuaiZhanShort
{
///
/// 快站缩短
///
///
///
public static string GetShort(string url)
{
try
{
var APP_KEY = "LFxURPXd0Qy3";
var APP_SECRET = "94e50cce6317fa27360247e64e7ae48149a04b88";
var pams = new Dictionary();
pams.Add("url", url);
pams.Add("appKey", APP_KEY);
pams.Add("urlType", "default");
var sign = signTopRequest(pams, APP_SECRET);
pams.Add("sign", sign);
var Postdata = HttpExtend.BuildQuery(pams);
var http = new HttpHelper();
var item = new HttpItem()
{
URL = "https://cloud.kuaizhan.com/api/v1/tbk/genShortUrl",
Method = "post",
IsToLower = false,
Cookie = "",
Referer = "",
Postdata = Postdata,
Timeout = 100000,
ReadWriteTimeout = 30000,
UserAgent = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)",
ContentType = "application/x-www-form-urlencoded",
Allowautoredirect = false,
ProxyIp = ""
};
var result = http.GetHtml(item);
//{"code":200,"msg":"ok","data":{"shortUrl":"http://kzurl07.cn/tbKy"}}
var jobj = JObject.Parse(result.Html);
if (jobj != null)
{
if ((int)jobj["code"] == 200)
{
var data = (JObject)jobj["data"];
return data["shortUrl"].ToString();
}
else if ((int)jobj["code"] == 1001)
{
EventClient.OnEvent("短连接", "由于快站短连接接口请求的额度超限制,正在切换其他短连接");
}
}
else
{
}
}
catch (Exception ex)
{ }
return url;
}
///
/// 计算快站的sign
///
///
///
///
private static String signTopRequest(Dictionary pams, String secret)
{
// 第一步:检查参数是否已经排序
IDictionary sortedParams = new SortedDictionary(pams, StringComparer.Ordinal);
// 第二步:把所有参数名和参数值串在一起
var query = new StringBuilder();
query.Append(secret);
foreach (KeyValuePair kv in sortedParams)
{
if (!string.IsNullOrEmpty(kv.Key) && !string.IsNullOrEmpty(kv.Value) && "sign" != kv.Key)
query.Append(kv.Key).Append(kv.Value);
}
query.Append(secret);
var ss = query.ToString();
// 第三步:使用MD5加密
return GetMd5(query.ToString());
}
///
/// MD5加密方法写法
///
/// 参数字符串
///
private static string GetMd5(string str)
{
MD5 md5 = MD5.Create();
byte[] ba = Encoding.Default.GetBytes(str);
byte[] md55 = md5.ComputeHash(ba);
StringBuilder sb = new StringBuilder();
for (int I = 0; I < md55.Length; I++)
{
sb.Append(md55[I].ToString("x2"));
}
return sb.ToString();
}
}
}