.Net(C#)对接TikTok开放平台,动态生成API签名(sign)

最近在对接抖音海外版的公共平台,在其官方文档上要求在进行身份验证后,后续的api请求都需要根据请求API动态生成当前Request的Sign,并带入path的参数中。

官方文档上给的是go语言的示例代码,今天在这里分享一下我用.NET(C#)写的版本。

直接看代码:

首先这是该方法的参数:

public static string getSign(string app_secret, string url, string body, string contentType)

方法参数说明: 

app_secret:TikTok平台中的密钥

url:不包含域名的path,注意他是以' / '开头的

body:body的json字符串,如果你的Request带body的话,没有传空字符串就好。

contentType:数据格式,如果不是“”,格式的话需要在签名内容的末尾加上body。

调用例子:

 DateTimeOffset now = DateTimeOffset.UtcNow;//时间戳是UTC时间啊!!!
 long timeStamp = now.ToUnixTimeSeconds();
 string url=$"/authorization/202309/shops?access_token=TTP_3Iuo*****D2WyPZGifA&app_key=6***qtj2o&sign=9579f1****a80&timestamp={timeStamp}"
 var sign= HttpUntil.getSign("d78d4***a966", url, "", "application/json");
            

官方文档的流程图:

注意事项:

注意时间戳是10位UTC秒时间戳

完整的方法体:

public static string getSign(string app_secret, string url, string body, string contentType)
        {
            var Query = url.Split("?");//将参数和路径分割
            var paramsList = Query[1].Split('&');//分离参数
            //将参数按升序排序
            for (int i = 0; i < paramsList.Length; i++)
            {
                for (int j = i + 1; j < paramsList.Length; j++)
                {
                    string str1 = paramsList[i].Split("=")[0];
                    string str2 = paramsList[j].Split("=")[0];
                    if (str1.CompareTo(str2) > 0)
                    {
                        string tool = paramsList[i];
                        paramsList[i] = paramsList[j];
                        paramsList[j] = tool;
                    }
                }
            }
            //签名内容
            string input = string.Empty;

             //除了sign和access_token外,将排序好的参数按{key}{value}格式追加到input中
            foreach (var param in paramsList)
            {
                string str = param.Split("=")[0];
                if (str.Equals("sign") || str.Equals("access_token"))
                { continue; }
                input += param.Replace("=", "");
            }

            //前缀追加路径(参数前的,域名后的部分)
            input = Query[0] + input;

            //如果请求头content_type不是 multipart/form-data,则追加到末尾body
            if (!contentType.Equals("multipart/form-data"))
            {
                input += body;
            }

            //用密钥包住签名内容
            input = app_secret + input + app_secret;

            //使用 HMAC-SHA256 算法生成签名
            string signature = string.Empty;
            byte[] keyBytes = Encoding.UTF8.GetBytes(app_secret);
            byte[] messageBytes = Encoding.UTF8.GetBytes(input);
            using (var hmac = new HMACSHA256(keyBytes))
            {
                byte[] hashBytes = hmac.ComputeHash(messageBytes);
                // BitConverter.ToString(hashBytes)生成的事用“-”分割的字符,将它替换掉
                signature = BitConverter.ToString(hashBytes).Replace("-", "").ToLower();
            }

            //最终签名
            return signature;
        }

一定要ToLower(),否则这个签名就是无效的。

希望对大家有帮助。下面给大家看一下运行中几个点的截图,有兴趣的可以瞄一眼,哈哈哈哈。

分割path和参数:

分割参数:

前缀追加path:

要将“-”去掉,不然的话就会得到这样的结果:

postman简单发个请求:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 12
    评论
要获取TikTok用户信息,您需要使用TikTokAPI。下面是一个使用C#获取TikTok用户信息的例子: 首先,您需要注册一个TikTok开发者账户,并创建一个应用程序获取API密钥。 然后,您可以使用C#中的HttpClient类来发送HTTP请求,并使用Newtonsoft.Json包来解析JSON响应数据。 示例代码如下: ```csharp using System; using System.Net.Http; using Newtonsoft.Json; public class TikTokUser { public string UserId { get; set; } public string NickName { get; set; } public string Avatar { get; set; } } public class TikTokApi { private readonly HttpClient _httpClient; private readonly string _apiKey; public TikTokApi(string apiKey) { _apiKey = apiKey; _httpClient = new HttpClient(); } public async Task<TikTokUser> GetUser(string username) { var url = $"https://api.tiktok.com/aweme/v1/user/?user_id={username}&{apiKey}"; var response = await _httpClient.GetAsync(url); if (response.IsSuccessStatusCode) { var responseBody = await response.Content.ReadAsStringAsync(); var user = JsonConvert.DeserializeObject<TikTokUser>(responseBody); return user; } else { throw new Exception($"Failed to get TikTok user. Status code: {response.StatusCode}"); } } } ``` 在上面的代码中,TikTokUser类定义了需要获取的用户信息,TikTokApi类定义了获取用户信息的方法。 要使用此方法,请实例化TikTokApi类并调用GetUser方法,将TikTok用户名作为参数传递。此方法将返回一个TikTokUser对象,其中包含用户的ID,昵称和头像URL。 请注意,此代码仅供参考,并需要根据您的具体需求进行更改和扩展。另外,使用TikTokAPI时,请务必遵守TikTokAPI使用规则和用户隐私政策。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值