String 签名错误

String 签名错误,string,encoding,utf-8,apex-code,amazon-sns,String,Encoding,Utf 8,Apex Code,Amazon Sns,这显示错误“我们计算的请求签名与您提供的签名不匹配。请检查您的AWS string url; integer statuscode; String date1=json.serialize(Datetime.now()); if(date1.contains('"')){ date1=date1.replace('"','');} String algorithmName = 'HmacSHA256'; date1=date1.subst

这显示错误“我们计算的请求签名与您提供的签名不匹配。请检查您的AWS

     string url;
    integer statuscode;
    String date1=json.serialize(Datetime.now());
    if(date1.contains('"')){
    date1=date1.replace('"','');}
    String algorithmName = 'HmacSHA256';
    date1=date1.substring(0,(date1.length()-5));
     date1=date1+'Z';
     date1=EncodingUtil.UrlEncode(date1,'UTF-8');    
     String Action=EncodingUtil.UrlEncode('CreateTopic','UTF-8');
     String AccessKey=EncodingUtil.UrlEncode('APIKEY','UTF-8'); // API key hide due to security resion but i check it work fine for SES
     String Signaturemethod=EncodingUtil.UrlEncode('HmacSHA256','UTF-8');
     string str= 'GET\nsns.us-east-1.amazonaws.com\n/\nAction='+Action+'&Name=Testtopics&AWSAccessKeyId='+AccessKey+'&Timestamp='+date1+'&SignatureVersion=2&SignatureMethod='+Signaturemethod; 
    Blob mac = Crypto.generateMac(algorithmName,Blob.valueOf(str),Blob.valueOf('SECURITYKEY')); //blob value of key used in signature
    url='https://sns.us-east-1.amazonaws.com/?Action=CreateTopic&Name=Testtopics&AWSAccessKeyId=ACCESSKEY&Timestamp='+date1+'&SignatureVersion=2&SignatureMethod=HmacSHA256&Signature='+EncodingUtil.UrlEncode(EncodingUtil.base64Encode(mac),'UTF-8'); // final url   

我对AWS不太了解,但下面是我能找到的。无法在任何地方测试这些东西来解决问题

下面错误消息的一个常见原因是未正确创建要签名的字符串,例如忘记对AmazonS3存储桶名称中的冒号(:)和正斜杠(/)等字符进行URL编码


看起来您的url末尾可能缺少一个尾随的单引号。看看这是否有区别

url="https://sns.us-east-1.amazonaws.com/?Action=CreateTopic&Name=Testtopics&AWSAccessKeyId=ACCESSKEY&Timestamp='+date1+'&SignatureVersion=2&SignatureMethod=HmacSHA256&Signature='+EncodingUtil.UrlEncode(EncodingUtil.base64Encode(mac),'UTF-8')+"'";

请提供上一个问题的链接。这是什么语言?我当然看不到任何HTML。请相应地标记。您确定最后一行中的版本吗this@JonathonReinhart这是APEX Langauge的代码,如果您了解此问题的解决方案谢谢回复。我尝试了很多,也对日期和签名值进行了编码,但仍然发现相同的错误。我尝试在末尾添加一个空字符串,但仍然得到相同的错误
url="https://sns.us-east-1.amazonaws.com/?Action=CreateTopic&Name=Testtopics&AWSAccessKeyId=ACCESSKEY&Timestamp='+date1+'&SignatureVersion=2&SignatureMethod=HmacSHA256&Signature='+EncodingUtil.UrlEncode(EncodingUtil.base64Encode(mac),'UTF-8')+"'";