开发者社区> 问答> 正文

模版审核失败原因:*运营商暂不支持此类业务发送”; 具体是什么原因

模版审核失败原因:*运营商暂不支持此类业务发送”; 具体是什么原因

展开
收起
游客pncr3wiruu3fq 2020-11-10 13:08:55 1410 0
1 条回答
写回答
取消 提交回答
  • 注册阿里云账号通过实名认证

    2、开通短信服务(开通免费)

    开通后可在控制台短信服务栏中查看

    3、创建Access Key,获取Access Key ID 和 Access Key Secret(具体看阿里云官方教程)

    Access Key用于在程序中调用阿里云的服务API,个人理解相当于账号密码,用于认证个人信息的(程序中会用到)。可以创建多个Access Key,但Access Key具体内容只能在创建初期查看,之后是无法查看的,因此需要及时下载到本地。

    4、创建短信签名和短信模板

    短信签名一般用于标记公司名或者是具体的业务,它会以下的形式出现在短信中:
    

    [短信签名] 短信内容....

    短信模板描述了短信的具体内容,可以提供变量来替代具体的数据,程序中会以JSON的形式向短信模板提供变量。
    

    注意:短信签名和短信模板创建后都需要通过审核,审核一般在几个小时内就能完成。

    短信模板中的"模板CODE"在程序中会被使用到,通过模板CODE来明确使用哪一个模板。

    5、Maven项目中引入阿里云短信服务依赖

    6、参看官方Demo编写发送短信的接口

    /** * 阿里云短信服务机器人 * * @author minghui.y * @create 2018-05-16 9:54 **/ public class SmsRobotTunnel {

    private static final Logger LOGGER = LoggerFactory.getLogger(SmsRobotTunnel.class);
    
    /**短信API产品名称(短信产品名固定,无需修改)*/
    private static final String PRODUCT = "Dysmsapi";
    /**短信API产品域名(接口地址固定,无需修改)*/
    private static final String DOMAIN = "dysmsapi.aliyuncs.com";
    /**AccessKeyId*/
    private static final String  ACCESSKEYID = "your access key id";
    /**accessKeySecret*/
    private static final String ACCESSKEYSECRET = "your access key secret";
    /**短信签名*/
    private static final String SMSSIGN = "your sms sign";
    /**短信模板CODE*/
    private static final String SMSTEMPLATE0 = "SMS_xxxxxxx";
    private static final String SMSTEMPLATE1 = "SMS_xxxxxxx";
    
    /**
     * 发送短信方法
     * @param content:JSON字串,替代短信模板中的变量
     * @param phones:可以使多个手机号,以逗号分隔
     * @return:发送成功则返回true
     */
    public static boolean send(String content, String phones, SmsBizType bizType) {
    
        //可自助调整超时时间
        System.setProperty("sun.net.client.defaultConnectTimeout", "10000");
        System.setProperty("sun.net.client.defaultReadTimeout", "10000");
    
        try {
            //初始化acsClient,暂不支持region化
            IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", ACCESSKEYID, ACCESSKEYSECRET);
            DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", PRODUCT, DOMAIN);
            IAcsClient acsClient = new DefaultAcsClient(profile);
    
            //组装请求对象
            SendSmsRequest request = new SendSmsRequest();
            //必填:待发送手机号
            request.setPhoneNumbers(phones);
            //必填:短信签名
            request.setSignName(SMSSIGN);
            //必填:短信模板
            String templcateCode = null;
            switch (bizType) {
                case SMS_CREATE_SERVICE:
                    templcateCode = SMSTEMPLATE0;
                    break;
                case SMS_PROCESS_SERVICE:
                    templcateCode = SMSTEMPLATE1;
                    break;
                default:
                    templcateCode = SMSTEMPLATE0;
                    break;
            }
            request.setTemplateCode(templcateCode);
            //可选:模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为${code}"时,此处的值为
            request.setTemplateParam(content);
    
    
            SendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request);
            //解析短信响应结果
            if(sendSmsResponse.getCode() != null && sendSmsResponse.getCode().equals("OK")) {
                //请求成功
                return true;
            }
        } catch (Exception e) {
            LOGGER.error("短信发送服务异常!", e);
        }
    
        return false;
    }
    

    } 以上代码有几处需要根据你的实际情况修改:

    1、AccessKeyID和AccessKeySecret

    2、短信签名(直接写内容,例如短信签名是"abc",此处就是"abc")

    3、短信模板CODE,可以有多个,可以存储到Map中根据不同的业务场景选择不同的短信模板

    4、send方法的三个参数

      content:json格式的字符串,用于替代短信模板中的变量
    
       phone:手机号码字符串,可以是以逗号分隔的多个手机号
    
       bizType:自定义的一个枚举,用来根据场景选择短信模板
    
    2021-02-22 13:28:45
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
白山直播CDN流传递链路优化实践 立即下载
内容安全检测与管控 立即下载
重保场景及API安全指南 立即下载