开发者社区> 问答> 正文

android调用短信服务失败

用官网给的示例写了个工具类SendSmsUtil,同样的util类,在JAVA运行环境下写个测试类调用可以成功运行,放在android项目里运行报错。下面附源码

SendSmsUtil.java:

public class SendMessageUtil {

    //产品名称:云通信短信API产品,开发者无需替换

    static final String product = "Dysmsapi";

    //产品域名,开发者无需替换

    static final String domain = "dysmsapi.aliyuncs.com";

    //指定接收消息的终端地址 可更换

    static final String endpointName = "cn-hangzhou";

    //指定接收消息的终端地址机构id

    static final String regionId = "cn-hangzhou";

    //此处需要替换成开发者自己的AK (在阿里云访问控制台寻找)

    static final String accessKeyId = "*****";

    static final String accessKeySecret = "*******";

    /**

     * 发送验证码

     * @param receivePhone 要接受短信手机号

     * @param code  验证码内容

     * @return

     */

    public static boolean sendSms(String receivePhone, String code) {

        //是否发送成功

        boolean isSendSuccess=  false;

        try {

            //初始化acsClient,暂不支持region化

            IClientProfile profile = DefaultProfile.getProfile(regionId, accessKeyId, accessKeySecret);

            //添加接受节点

//            DefaultProfile.addEndpoint(endpointName, regionId, product, domain);

            IAcsClient acsClient = new DefaultAcsClient(profile);

            //组装请求对象-具体描述见控制台-文档部分内容

            SingleSendSmsRequest request = new SingleSendSmsRequest();

            //必填:待发送手机号

            request.setRecNum(receivePhone);

            //必填:短信签名-可在短信控制台中找到

            request.setSignName("*******");

            //必填:短信模板-可在短信控制台中找到

            request.setTemplateCode("SM******");

            //可选:模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为${code}"时,此处的值为

            request.setParamString("{'number':'" + code + "'}");

            //得到响应消息

            SingleSendSmsResponse sendSmsResponse = null;

            try {

                sendSmsResponse = acsClient.getAcsResponse(request);

            } catch (Exception e) {

                e.printStackTrace();

            }

            isSendSuccess = true;

        } catch (Exception e) {

            e.printStackTrace();

        }

        return isSendSuccess;

    }

}

在android中调用这个sendSms方法报错:

08-15 16:53:56.540 2759-11391/cc.wolf.gamebox W/System.err: com.aliyuncs.exceptions.ClientException: SignatureDoesNotMatch : Specified signature is not matched with our calculation.

08-15 16:53:56.541 2759-11391/cc.wolf.gamebox W/System.err: RequestId : E7686154-3C84-4653-A7CA-45DAF620657B

08-15 16:53:56.542 2759-11391/cc.wolf.gamebox W/System.err:     at com.aliyuncs.DefaultAcsClient.parseAcsResponse(DefaultAcsClient.java:168)

08-15 16:53:56.543 2759-11391/cc.wolf.gamebox W/System.err:     at com.aliyuncs.DefaultAcsClient.getAcsResponse(DefaultAcsClient.java:105)

08-15 16:53:56.544 2759-11391/cc.wolf.gamebox W/System.err:     at com.daoxian.damai.gamebox.util.SendMessageUtil.sendSms(SendMessageUtil.java:62)

08-15 16:53:56.544 2759-11391/cc.wolf.gamebox W/System.err:     at com.daoxian.damai.gamebox.ui.fragment.me.FragmentPhoneRegister$MyThread.run(FragmentPhoneRegister.java:454)

展开
收起
别叫我留情 2017-08-15 16:55:07 4496 0
1 条回答
写回答
取消 提交回答
  • 旺旺:nectar2。
    楼主您好,

    欢迎来到阿里云论坛。

    可以为您的帖子转移到“消息服务”版块里吗?
    2017-08-15 21:33:43
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
58同城Android客户端Walle框架演进与实践之路 立即下载
Android组件化实现 立即下载
蚂蚁聚宝Android秒级编译——Freeline 立即下载