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

2023-04-28 00:09:40 +08:00
 lieyan

因为需要天翼云的《智能视图服务》,所以看了相关开发文档,把我给恶心坏了

以下问题仅仅是针对《智能视图服务》

  1. 没有相关 SDK 可用
  2. api 文档没有相关代码调用示例
  3. 接口鉴权文档乱起八糟,应该是从其他服务里面复制过来的
  4. 客服不行,问啥都不知道,转技术客服之后叫我提工单-.-!!

第一点和第二点只要其中任何一个满足我都不会吐槽,关键是这俩都没有!!

第三点:各位可以去文档地址看看,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<string, string> _params = new Dictionary<string, string>
            {
                { "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<string, string> q2 = _params.OrderBy(t => t.Key).ToDictionary(t => t.Key, t => t.Value);
            foreach( KeyValuePair<string, string> 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

1998 次点击
所在节点    程序员
9 条回复
dayeye2006199
2023-04-28 00:19:36 +08:00
因为这类服务的常规用法:你是个甲方的爹爹,找到天翼的人或者外包,让他们搞定。
BugCry
2023-04-28 11:18:30 +08:00
别用天翼云提供的任何 PaaS 、SaaS 服务
都是外包的,东西上线就再没人管了
利益相关:前天翼云公司员工
lieyan
2023-04-28 11:24:07 +08:00
@BugCry 没办法,我的甲方要求使用他们的服务
iocntop
2023-04-28 12:08:15 +08:00
@BugCry #2 这个话说的太真实了. --> 都是外包的,东西上线就再没人管了
BugCry
2023-04-28 13:58:21 +08:00
@lieyan 找领导投诉,比提工单啥的都好使
bogun
2023-04-28 14:19:33 +08:00
嘿嘿,认证鉴权是他们做的比较好的了已经,等你深入去对接的时候,就会体会到什么叫真正的痛苦
Aiurvia
2023-04-28 21:06:21 +08:00
这个都是外包的,并且外包的比较烂。
烂到什么程度呢,就是外包的发包的、接包的可能都不懂。
zzl22100048
2023-04-28 22:20:00 +08:00
天翼云最蠢的是他那个网络控制,达到带宽后直接丢包,监控图表与限流完全不一致,还好 1m 的机器也有 200m 下载,ghcr 等仓库自带镜像
oldstudyman
164 天前
鉴权是因为要兼容他们过去老系统的垃圾,所以只能继续垃圾下去。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/936076

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX