阿里云(短信签名)--java项目实战

Api.getApiSource().getClientId()这个是项目的需要,你们可以去掉


    @Operation(summary = "查询短信模板的审核状态")
    @RequestMapping(value = "/selectSmsTemplateStatus", method = RequestMethod.POST)
    @ResponseBody
    public CommonResult selectSmsTemplateStatus(@RequestParam String TemplateCode){
        return smsService.selectSmsTemplateStatus(Api.getApiSource().getClientId(),TemplateCode);
    }


    @Operation(summary = "删除短信签名")
    @RequestMapping(value = "/deleteSmsSign", method = RequestMethod.POST)
    @ResponseBody
    public CommonResult deleteSmsSign(@RequestParam String SignName){
        return smsService.deleteSmsSign(Api.getApiSource().getClientId(),SignName);
    }


    @Operation(summary = "查询短信签名申请状态")
    @RequestMapping(value = "/selectSmsSign", method = RequestMethod.POST)
    @ResponseBody
    public CommonResult selectSmsSign(@RequestParam String SignName){
        return smsService.selectSmsSign(Api.getApiSource().getClientId(),SignName);
    }

    @Operation(summary = "申请短信签名")
    @RequestMapping(value = "/applySmsSign", method = RequestMethod.POST)
    @ResponseBody
    public CommonResult applySmsSign(
            @RequestParam String SignName,
            @RequestParam Integer SignSource,
            @RequestParam String Remark,
            @RequestPart("SignFileList") MultipartFile[] SignFileList){
        return smsService.applySmsSign(Api.getApiSource().getClientId(),SignName,SignSource,Remark,SignFileList);
    }


    @Operation(summary = "修改短信签名证明文件")
    @RequestMapping(value = "/updateSmsSign", method = RequestMethod.POST)
    @ResponseBody
    public CommonResult updateSmsSign(
            @RequestParam String SignName,
            @RequestParam Integer SignSource,
            @RequestParam String Remark,
            @RequestPart("SignFileList") MultipartFile[] SignFileList){
        return smsService.updateSmsSign(Api.getApiSource().getClientId(),SignName,SignSource,Remark,SignFileList);
    }

业务逻辑层


    final  String  ACCESSKEYID="自己阿里云的";

    final  String  ACCESSKEYSECRET ="自己阿里云的";

   public  Client createClient(String accessKeyId, String accessKeySecret) throws Exception {//com.aliyun.dysmsapi20170525.Client
        Config config = new Config()
                // 您的AccessKey ID
                .setAccessKeyId(accessKeyId)
                // 您的AccessKey Secret
                .setAccessKeySecret(accessKeySecret);
        // 访问的域名
        config.endpoint = "dysmsapi.aliyuncs.com";
        return new com.aliyun.dysmsapi20170525.Client(config);
    }

  @SneakyThrows
    @Override
    public CommonResult deleteSmsSign(String clientId, String signName) {
        ChannelApp channel = verifyChannel(clientId);
        if (channel == null) {
            return CommonResult.result(ResultCode.CHANNEL_NULL_ERR);
        }
        Client client = createClient(ACCESSKEYID, ACCESSKEYSECRET);
        DeleteSmsSignRequest deleteSmsSignRequest = new DeleteSmsSignRequest()
                .setSignName(signName);

        // 复制代码运行请自行打印 API 的返回值
        DeleteSmsSignResponse deleteSmsSignResponse = client.deleteSmsSign(deleteSmsSignRequest);

        if(!deleteSmsSignResponse.getBody().getMessage().equals("签名正在审核中,不允许删除")){
            //删除signName表
            SmsSignName smsSignName = new SmsSignName();
            smsSignName.setSignName(signName);
            QueryWrapper<SmsSignName> wrapper = new QueryWrapper<>(smsSignName);
            smsSignMapper.delete(wrapper);
            //删除存base64的表----signName删除
            SmsFile smsFile=new SmsFile();
            smsFile.setSignName(signName);
            QueryWrapper<SmsFile> wrapperFile = new QueryWrapper<>(smsFile);
            smsFileMapper.delete(wrapperFile);
        }

        return  CommonResult.success(deleteSmsSignResponse);
    }



    @SneakyThrows
    @Override
    public CommonResult<QuerySmsSignResponse>  selectSmsSign(String clientId, String signName) {
        ChannelApp channel = verifyChannel(clientId);
        if (channel == null) {
            return CommonResult.result(ResultCode.CHANNEL_NULL_ERR);
        }
        Client client = createClient(ACCESSKEYID, ACCESSKEYSECRET);
        QuerySmsSignRequest querySmsSignRequest = new QuerySmsSignRequest()
                .setSignName(signName);

        QuerySmsSignResponse querySmsSignResponse = client.querySmsSign(querySmsSignRequest);
        return CommonResult.success(querySmsSignResponse);
    }


    @SneakyThrows
    @Override
    public CommonResult applySmsSign(String clientId, String signName, Integer signSource, String remark, MultipartFile[] signFileList) {
        ChannelApp channel = verifyChannel(clientId);
        if (channel == null) {
            return CommonResult.result(ResultCode.CHANNEL_NULL_ERR);
        }
        if (signFileList == null || signFileList.length==0) {
            //throw new RuntimeException("图片不能为空!获取失败");
            return CommonResult.result(ResultCode. IMAGE_GET_ERR);
        }

        Client client = createClient(ACCESSKEYID, ACCESSKEYSECRET);

        //存储文件内容base64及文件格式
        List<AddSmsSignRequest.AddSmsSignRequestSignFileList> signFileListMore= new ArrayList<>();

        List<SmsFile> base64Imgs = new ArrayList<SmsFile>();

        //判断file数组不能为空并且长度大于0
        if (signFileList != null && signFileList.length > 0) {
            //循环获取file数组中得文件
            for (int i = 0; i < signFileList.length; i++) {
                MultipartFile file = signFileList[i];
                //单个一个一个图片转换成base64
                if (!file.isEmpty()) {
                    String fileName = file.getOriginalFilename();
                    String fileType = fileName.substring(fileName.lastIndexOf("."));
                    String contentType = file.getContentType();
                    byte[] imageBytes = null;
                    String base64EncoderImg = "";
                    try {
                        imageBytes = file.getBytes();
                        BASE64Encoder base64Encoder = new BASE64Encoder();
                        base64EncoderImg = "data:" + contentType + ";base64," + base64Encoder.encode(imageBytes);
                        base64EncoderImg = base64EncoderImg.replaceAll("[\\s*\t\n\r]", "");
                        SmsFile smsFile=new SmsFile();
                        smsFile.setSignName(signName);
                        smsFile.setFileSuffix(fileType);
                        smsFile.setFileContent(base64Encoder.encode(imageBytes));
                        base64Imgs.add(smsFile);
                        AddSmsSignRequest.AddSmsSignRequestSignFileList signFileListOne = new AddSmsSignRequest.AddSmsSignRequestSignFileList();
                        signFileListOne.setFileContents(base64Encoder.encode(imageBytes));
                        signFileListOne.setFileSuffix(fileType);
                        signFileListMore.add(signFileListOne);
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
            }
        }
        AddSmsSignRequest addSmsSignRequest = new AddSmsSignRequest()
                .setSignName(signName)
                .setSignSource(signSource)
                .setRemark(remark)
                .setSignFileList(signFileListMore);
        // 复制代码运行请自行打印 API 的返回值
        client.addSmsSign(addSmsSignRequest);
        //添加到表中
        SmsSignName smsSignName=new SmsSignName();
        smsSignName.setSignName(signName);
        smsSignName.setSignSource(signSource);
        smsSignName.setRemark(remark);
        smsSignMapper.insert(smsSignName);
        //添加图片base64表
        smsFileService.saveBatch(base64Imgs);

        return CommonResult.success(client.addSmsSign(addSmsSignRequest));
    }

    @SneakyThrows
    @Override
    public CommonResult updateSmsSign(String clientId, String signName, Integer signSource, String remark, MultipartFile[] signFileList) {
        ChannelApp channel = verifyChannel(clientId);
        if (channel == null) {
            return CommonResult.result(ResultCode.CHANNEL_NULL_ERR);
        }
        if (signFileList == null || signFileList.length==0) {
            //throw new RuntimeException("图片不能为空!获取失败");
            return CommonResult.result(ResultCode. IMAGE_GET_ERR);
        }

        Client client = createClient(ACCESSKEYID, ACCESSKEYSECRET);
        //存储文件内容base64及文件格式
        List<ModifySmsSignRequest.ModifySmsSignRequestSignFileList> signFileListMore= new ArrayList<>();
        //先删除图片表
        SmsFile smsFile = new SmsFile();
        smsFile.setSignName(signName);
        QueryWrapper<SmsFile> wrapper = new QueryWrapper<>(smsFile);
        smsFileMapper.delete(wrapper);

        List<SmsFile> base64Imgs = new ArrayList<SmsFile>();
        //判断file数组不能为空并且长度大于0
        if (signFileList != null && signFileList.length > 0) {
            //循环获取file数组中得文件
            for (int i = 0; i < signFileList.length; i++) {
                MultipartFile file = signFileList[i];
                //单个一个一个图片转换成base64
                if (!file.isEmpty()) {
                    String fileName = file.getOriginalFilename();
                    String fileType = fileName.substring(fileName.lastIndexOf("."));
                    String contentType = file.getContentType();
                    byte[] imageBytes = null;
                    String base64EncoderImg = "";
                    try {
                        imageBytes = file.getBytes();
                        BASE64Encoder base64Encoder = new BASE64Encoder();
                        base64EncoderImg = "data:" + contentType + ";base64," + base64Encoder.encode(imageBytes);
                        base64EncoderImg = base64EncoderImg.replaceAll("[\\s*\t\n\r]", "");
                        //base64Imgs.add(base64EncoderImg);
                        smsFile.setSignName(signName);
                        smsFile.setFileSuffix(fileType);
                        smsFile.setFileContent(base64Encoder.encode(imageBytes));
                        base64Imgs.add(smsFile);
                        ModifySmsSignRequest.ModifySmsSignRequestSignFileList signFileListOne = new ModifySmsSignRequest.ModifySmsSignRequestSignFileList();
                        signFileListOne.setFileContents(base64Encoder.encode(imageBytes));
                        signFileListOne.setFileSuffix(fileType);
                        signFileListMore.add(signFileListOne);
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
            }
        }
        ModifySmsSignRequest modifySmsSignRequest = new ModifySmsSignRequest()
                .setSignName(signName)
                .setSignSource(signSource)
                .setRemark(remark)
                .setSignFileList(signFileListMore);
        // 复制代码运行请自行打印 API 的返回值
        client.modifySmsSign(modifySmsSignRequest);

        //更新的条件以及字段
        UpdateWrapper<SmsSignName> wrapper2 = new UpdateWrapper<>();
        wrapper2.eq("sign_name", signName).set("sign_source",signSource).set("remark",remark);
        smsSignMapper.update(null, wrapper2);
        //添加图片base64表
        smsFileService.saveBatch(base64Imgs);

        return CommonResult.success(client.modifySmsSign(modifySmsSignRequest));
    }

建立两张表(一个存signname信息,一个存base64信息)
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
阿里云短信对接需要以下步骤: 1. 在阿里云短信控制台中创建签名和模板,获取对应的签名和模板CODE。 2. 在阿里云控制台中获取 AccessKey ID 和 AccessKey Secret。 3. 在代码中调用阿里云短信 API,传入必要的参数,例如短信模板、签名、接收手机号等。 这里提供一个简单的 PHP 代码示例: ```php <?php require_once './aliyun-php-sdk-core/Config.php'; use Aliyun\Core\DefaultAcsClient; use Aliyun\Core\Profile\DefaultProfile; use Aliyun\Api\Sms\Request\V20170525\SendSmsRequest; // 替换成自己的AccessKey信息 $accessKeyId = "your_accessKeyId"; $accessKeySecret = "your_accessKeySecret"; // 设置阿里云短信服务所在的Region,如华东1 $region = "cn-hangzhou"; // 替换成自己的短信签名和模板CODE $signName = "your_signName"; $templateCode = "your_templateCode"; // 发送短信的手机号码,支持多个手机号码,用英文逗号分隔 $phoneNumbers = "your_phoneNumbers"; // 短信模板中的变量替换JSON串,如验证码为:{"code":"123456"} $templateParam = "{\"code\":\"123456\"}"; // 初始化DefaultAcsClient实例并设置参数 $profile = DefaultProfile::getProfile($region, $accessKeyId, $accessKeySecret); DefaultProfile::addEndpoint("cn-hangzhou", "cn-hangzhou", "Sms", "sms.aliyuncs.com"); $client = new DefaultAcsClient($profile); $request = new SendSmsRequest(); // 设置请求参数 $request->setPhoneNumbers($phoneNumbers); $request->setSignName($signName); $request->setTemplateCode($templateCode); $request->setTemplateParam($templateParam); // 发送短信 $response = $client->getAcsResponse($request); // 输出结果 print_r($response); ?> ``` 注意,以上代码中需要替换成自己的 AccessKey ID、AccessKey Secret、短信签名、模板 CODE、手机号码、短信模板变量等信息。另外,阿里云短信服务需要收取一定的费用,请确保账户余额充足。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值