天翼云的 API 对接可能是我目前对接的云商里面最恶心的一个了

查看 41|回复 1
作者:lieyan   
因为需要天翼云的《智能视图服务》,所以看了相关开发文档,把我给恶心坏了
以下问题仅仅是针对《智能视图服务》
[ol]
  • 没有相关 SDK 可用
  • api 文档没有相关代码调用示例
  • 接口鉴权文档乱起八糟,应该是从其他服务里面复制过来的
  • 客服不行,问啥都不知道,转技术客服之后叫我提工单-.-!!
    [/ol]
    第一点和第二点只要其中任何一个满足我都不会吐槽,关键是这俩都没有!!
    第三点:各位可以去文档地址看看,https://www.ctyun.cn/document/10011391/10040115
    这里面提到的“传进来的 body 参数进行 sha256 摘要,对摘要出来的结果转十六进制”,不知道这个 body 是什么东西?而相关 api 的请求方式都是 GET 请求,所以更不知道这个 body 是什么鬼了,还有最重要的,里面提到的几次 hash 摘要和 hex 没有一句话是告诉开发者应该是大写还是小写,纯纯的恶心人!
    然后我尝试根据文档的指示写了请求代码,无一例外,签名验证错误。。。
    还有一个恶心点,在获取 AK 的时候,有一个 API 密钥和 OpenAPI 密钥,这俩只有 OpenAPI 密钥才能用于接口调用鉴权,不知道搞这么多密钥干什么。。。。
    第四点,我直接提工单了。。
    说真的,对比其他几家云商,就如同从大城市走进一个穷乡僻壤的地方,基础建设太差了,我觉得提供的服务可以少点,至少这些基础的文档建设还是要完善吧?
    参考代码:(用了 Flurl.Http 库)
    using Flurl.Http;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Security.Cryptography;
    using System.Text;
    using System.Threading.Tasks;
    namespace CTYunHelper
    {
        public class Vss
        {
            const string API = "https://vss-dsp-gzgy2-a.ctapi.ctyun.cn/v1";
            const string AccessKeyId = "xxx";
            const string SecretAccessKey = "xxxx";
            public static async void Client()
            {
                Dictionary _params = new Dictionary
                {
                    { "Action", "DescribeVSSGroups" }
                };
                string eop_date = DateTime.Now.ToString("yyyyMMdd'T'HHmmss'Z'");
                string request_id = Guid.NewGuid().ToString();
                var request = API.WithHeader("eop-date", eop_date).WithHeader("ctyun-eop-request-id", request_id);
                Dictionary q2 = _params.OrderBy(t => t.Key).ToDictionary(t => t.Key, t => t.Value);
                foreach( KeyValuePair item in q2)
                {
                    request.SetQueryParam(item.Key, item.Value);
                }
                string query = request.Url.Query;
                string queryHash = CalcSHA256(query);
                string queryHex = ToHex(queryHash);
                string sigture = $"ctyun-eop-request-id:{request_id}\neop-date:{eop_date}\n\n{query}\n{queryHash}";
                string kTime = HmacSHA256(eop_date, SecretAccessKey);
                string kAk = HmacSHA256(AccessKeyId, kTime);
                string kdate = HmacSHA256(eop_date, kAk);
                string signature = HmacSHA256(sigture, kdate);
                signature = Convert.ToBase64String(Encoding.UTF8.GetBytes(signature));
                request.WithHeader("Eop-Authorization", $"{AccessKeyId} Headers=ctyun-eop-request-id;eop-date Signature={signature}");
                try
                {
                    var a = await request.GetAsync();
                }
                catch(FlurlHttpException ex)
                {
                    string s = await ex.GetResponseStringAsync();
                    Console.WriteLine(s);
                }
            }
            public static string CalcSHA256(string s)
            {
                SHA256 sha = SHA256.Create();
                byte[] hash_bytes = sha.ComputeHash(Encoding.UTF8.GetBytes(s));
                sha.Dispose();
                return BitConverter.ToString(hash_bytes).Replace("-", "").ToLower();
            }
            public static string ToHex(string s)
            {
                return Convert.ToHexString(Encoding.UTF8.GetBytes(s)).ToLower();
            }
            public static string HmacSHA256(string s, string key)
            {
                HMACSHA256 hMACSHA256 = new HMACSHA256();
                hMACSHA256.Key = Encoding.UTF8.GetBytes(key);
                byte[] hash_bytes = hMACSHA256.ComputeHash(Encoding.UTF8.GetBytes(s));
                hMACSHA256.Dispose();
                return BitConverter.ToString(hash_bytes).Replace("-", "").ToLower();
            }
        }
    }
    Datetime:2023-04-28 00:09

    string, hmacsha256, using, getBytes

  • dayeye2006199   
    因为这类服务的常规用法:你是个甲方的爹爹,找到天翼的人或者外包,让他们搞定。
    您需要登录后才可以回帖 登录 | 立即注册

    返回顶部