开发者社区> 问答> 正文

短信接口SignatureDoesNotMatch

          调用发短信接口SingleSendSms, 总是返回这个信息,参数反复检验过很多次了,就是不行。{"Message":"Specified signature is not matched with our calculation.","RequestId":"1C2702F8-9890-41AE-B448-268A9DB09A06","HostId":"sms.aliyuncs.com","Code":"SignatureDoesNotMatch"}
            HttpClient client = new HttpClient();
    PostMethod post = new PostMethod("http://sms.aliyuncs.com/"); 
    post.addRequestHeader("Content-Type","application/x-www-form-urlencoded;charset=utf-8");//在头文件中设置转码
    String signatureNonce = UUID.randomUUID().toString();

// String signatureNonce = "e1b44502-6d13-4433-9493-69eeb068e955";

    System.out.println(signatureNonce);
    String jsonParams = "{\"code\":\"{code}\"}".replace("{code}", "1234");
    System.out.println(jsonParams);
    String recNum = "15521282715";
    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("YYYY-MM-dd'T'HH:mm:ss'Z'");
    simpleDateFormat.setTimeZone(TimeZone.getTimeZone("GMT"));
    String timestamp = simpleDateFormat.format(new Date());
    log.info("timestamp:"+timestamp);
            //该签名方法返回的签名字符串是正确的,因为使用API文档里的参数调用后结果和文档里的一致。
    String signature = getSignature(AccessKeyId, jsonParams, recNum, SignName, signatureNonce, TemplateCode, timestamp);
    log.info("signature:"+signature);
    
    NameValuePair[] data ={ 
         new NameValuePair("Signature", signature)
        ,new NameValuePair("AccessKeyId", AccessKeyId)
        ,new NameValuePair("Action", Action)
        ,new NameValuePair("Format", Format)
        ,new NameValuePair("ParamString", jsonParams)
        ,new NameValuePair("RecNum", recNum)

// ,new NameValuePair("RegionId", RegionId)

        ,new NameValuePair("SignName", SignName)
        ,new NameValuePair("SignatureMethod", SignatureMethod)
        ,new NameValuePair("SignatureNonce", signatureNonce)
        ,new NameValuePair("SignatureVersion", SignatureVersion)
        ,new NameValuePair("TemplateCode", TemplateCode)
        ,new NameValuePair("Timestamp", timestamp)
        ,new NameValuePair("Version", Version)
    };
    post.setRequestBody(data);

    client.executeMethod(post);
    Header[] headers = post.getResponseHeaders();
    int statusCode = post.getStatusCode();
    log.info("statusCode:"+statusCode);
    String result = new String(post.getResponseBodyAsString().getBytes("utf-8")); 
    log.info("result:"+result);
    
    post.releaseConnection();

展开
收起
chenym_hi 2016-11-12 23:23:09 18307 0
10 条回答
写回答
取消 提交回答
  • 硕硕鸭

    我也遇到这个问题了,原因是我看错了,把accessKeySecret写成了accessSecret,改过来就好了

    2019-11-16 12:25:20
    赞同 展开评论 打赏
  • 这两个填写不对会报SignatureDoesNotMatch,我是拷贝过来时左右两边多了两个空格,去掉两边空格就解决了 $accessKeyId = "XXXXXXXXXXXXXXXXXXX"; $accessKeySecret = "XrXXXXXXXX7kzXXXXFXXXXXXXXXXFG"; 以下是我报错的填写 $accessKeySecret = " XrXXXXXXXX7kzXXXXFXXXXXXXXXXFG ";

    2019-11-07 12:25:07
    赞同 2 展开评论 打赏
  • 我也遇到这个问题了,一直未解决呢!

    2019-07-17 20:25:28
    赞同 展开评论 打赏
  • 这个问题解决了吗,我也出现了...

    2019-07-17 20:25:28
    赞同 展开评论 打赏
  • 少了下面这行 真是坑爹 我还是在开发者文档中找到的
    //使用post提交
    request.setMethod(MethodType.POST);

    2019-07-17 20:25:28
    赞同 1 展开评论 打赏
  • 请问这个问题怎么解决的?

    2019-07-17 20:25:28
    赞同 展开评论 打赏
  • accessKeyId和secretAccessKey填的不正确

    2019-07-17 20:25:28
    赞同 3 展开评论 打赏
  • 请问解决了吗???我也出现了……

    2019-07-17 20:25:27
    赞同 1 展开评论 打赏
  • 同出现,请问问题怎么解决的?

    2019-07-17 20:25:27
    赞同 展开评论 打赏
  • 这个问题解决了吗,我也出现了

    2019-07-17 20:25:27
    赞同 展开评论 打赏
滑动查看更多
问答分类:
问答地址:
相关产品:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载