zoukankan      html  css  js  c++  java
  • C# 阿里短信 HTTP验签方式 遇到的问题

    上周接了阿里的短信服务,有2种方式,引入SDK和拼接URL。

    1.SDK

    项目框架要4.0以上的,如果时3.5的目标框架就只能用http拼URL了。

    开始搜索导入包,报错:

    我们项目框架用的4.0,所以不兼容,后面重新找了个4.0的sdk 单独引用到项目。

    用阿里官方的DEMO 最后测试通过。

    2.http 

    这个公开的demo是java版的,用C#写了一版,遇到很多问题。

     (1) C#默认排序:

     参数拼接后生成签名,顺序不能错,默认排序不分大小写,导致“SignName”参数位置错了,大写'N'字母ascii码表应该在小写'a'前面才对。

    var list = keyValues.OrderBy(o => o.Key);

    换了个规则,不用默认的排序,就对上了。
    var list = keyValues.OrderBy(o => o.Key,StringComparer.Ordinal);

     (2) C#URL编码:

    url编码后,字母是小写的,其他的服务器可能是大写的,生成签名时也会不一致。

     对需要编码的字符再转一次大写。

    public static string UrlEncode1(string str)
    {
        StringBuilder builder = new StringBuilder();
        foreach (char c in str)
        {
            if (HttpUtility.UrlEncode(c.ToString()).Length > 1)
            {
                builder.Append(HttpUtility.UrlEncode(c.ToString()).ToUpper());
            }
            else
            {
                builder.Append(c);
            }
        }
        //Console.WriteLine(builder.ToString());
        return builder.ToString().Replace("+", "%20").Replace("*", "%2A").Replace("%7E", "~");
    }

    公开的文档不友好,主要遇到这2个坑,折腾了很久最后也没弄好,放个实现好了的链接:

    https://blog.csdn.net/wangyijie521/article/details/79030841

    总结:由于各服务器的一些细微差别,对接3方API可能就会遇到各种问题,最好还是用SDK方式,简单快捷快速实现功能,缺点就是要引入很多包。

  • 相关阅读:
    jdk1.8 -- 方法推导 静态方法、实例方法、构造方法推导
    java23种设计模式之五:代理模式
    区块链共识机制:POW、POA、POS、DPOS、PBFT、DBFT
    Backen-Development record 1
    记录一下哈希表底层原理
    总结区块链系统运行过程
    认识一下区块链
    Django:模板template(二)
    Django:模板template(一)
    Django:视图views(三)
  • 原文地址:https://www.cnblogs.com/glory0727/p/10889127.html
Copyright © 2011-2022 走看看