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方式,简单快捷快速实现功能,缺点就是要引入很多包。

 

posted on 2019-05-19 14:06  月光glory  阅读(266)  评论(0编辑  收藏  举报

导航