OVH 的签名短信无效

问题描述 投票:0回答:1

我正在尝试使用 OVH 的短信服务发送短信,遵循 此文档

当我使用 URL 的 post 方法测试发送时https://eu.api.ovh.com/1.0/sms/sms-zj16668-1/jobs

我得到一个

错误代码:INVALID_SIGNATURE

签名计算如下:

        String signature = "$1$" + HashSHA1(AS + "+" + CK + "+" + METHOD + "+" + QUERY + "+" + BODY + "+" + TSTAMP);

使用 Get 方法(无 Body)我得到了成功的结果,但是当我更改为使用带有 Body 的 Post 方法时,会触发上述错误。

这是我传递给签名的正文:

        string BODY = @"{  ""receivers"": [ ""+33601020304"" ], ""message"": ""Test SMS OVH"", ""senderForResponse"": true}";

我做错了什么?

更新

我在 ovh 社区中发现了类似的 issue 以及使用 TLS1.2 PROTOCOL 的解决方案,但是即使在添加了这行建议的代码之后:

 ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | (SecurityProtocolType)768 | (SecurityProtocolType)3072;

我仍然遇到同样的错误! ?

c# api sms ovh
1个回答
0
投票

我知道已经有一段时间了,但我遇到了同样的问题,现在它正在工作,所以我将分享我的代码。 (如果代码的某些部分很奇怪,提前抱歉,我是初学者。)

首先,我创建了一个类,它将成为签名中使用的主体:

public class MessageBody
   {
   public string charset { get; set; }
   public List<string> receivers { get; set; }
   public string message { get; set; }
   public string priority { get; set; }
   public bool senderForResponse { get; set; }
   public string sender { get; set; }

   public MessageBody() { }
   public MessageBody(string _charset, List<string> _receivers, string _message, string _priority, bool _senderForResponse, string _sender)
   {
      charset = _charset;
      receivers = _receivers;
      message = _message;
      priority = _priority;
      senderForResponse = _senderForResponse;
      sender = _sender;
   }
}

定义查询后,我初始化新对象并将其转换为 JSON 字符串:

MessageBody body = new MessageBody
{
    charset = "UTF-8",
    receivers = numbersToSendTextTo,
    message = text,
    priority = "high",
    senderForResponse = true,
    sender = "anything you want"
};

// This line require the Newtonsoft NuGet package
string bodyJson = JsonConvert.SerializeObject(body);

注意:Visual Studio 告诉我属性名称的第一个字母应该大写,但这样做会使 JSON 无法使用。

我没有更改时间戳中的任何内容,但我确实更改了签名的书写方式:

string signature = "$1$" + HashSHA1($"{AS}+{CK}+{method}+{query}+{bodyJson}+{timeStamp}");

我没有放置你提到的代码,这会改变安全协议。

我真的不知道为什么会这样,我唯一的提示是关于空格字符,它使签名对 OVH 无效。我希望它会有所帮助!

© www.soinside.com 2019 - 2024. All rights reserved.