云MAS平台HTTP(Java)发送模板短信

2025-03-06 0 782

一、代码

1、请求实体

@Data
public class SubmitReq {
    private String ecName;      // 企业名称
    private String apId;        // 接口账号用户名
    private String secretKey;   // 密钥
    private String mobiles;      // 收信手机号码,英文逗号分隔,每批次限5000个号码
    private String params;   // 密钥

    /**
     * 在云MAS平台『管理』→『接口管理』→『短信接入用户管理』获取。
     */
    private String sign;        // 签名编码

    
    /**
     * 在云MAS平台创建模板,路径:『短信』→『模板短信』→『模板管理』,创建后提交审核,审核通过将获得模板ID。
     */
    private String templateId;        // 模板ID

    
    /**
     * 依据申请开户的服务代码匹配类型而定,
     * 如为精确匹配,此项填写空字符串("");
     * 如为模糊匹配,此项可填写空字符串或自定义的扩展码,注:服务代码加扩展码总长度不能超过20位。
     */
    private String addSerial;   // 扩展码

    
    /**
     * 将ecName、apId、secretKey、templateId、mobiles、params、sign、addSerial按序拼接(无间隔符),通过MD5(32位小写)计算出的值
     */
    private String mac;   // 参数校验序列
}

2、构建请求参数工具类

@Slf4j
public class ParamUtil {

    private static final String SMS_ECNAME = "";
    private static final String SMS_APID = "";
    private static final String SMS_SECRET_KEY = "";
    private static final String SMS_SIGN = "";
    private static final String SMS_TEMPLATEID = "";


    public static String buildSmsParam(String tel, String verificationCode) throws Exception {
        SubmitReq submitReq = new SubmitReq();
        
        submitReq.setEcName(SMS_ECNAME);
        submitReq.setApId(SMS_APID);
        submitReq.setSecretKey(SMS_SECRET_KEY);
        
        submitReq.setMobiles(tel);
        submitReq.setParams("[" + verificationCode + "]");
        
        submitReq.setSign(SMS_SIGN);
        submitReq.setTemplateId(SMS_TEMPLATEID);
        
        submitReq.setAddSerial("");
        submitReq.setMac(calculateMAC(submitReq));

        String reqText = JSON.toJSONString(submitReq);
        return Base64.encodeBase64String(reqText.getBytes(StandardCharsets.UTF_8));
    }

     /**
     * 将ecName、apId、secretKey、templateId、mobiles、params、sign、addSerial
     * 按序拼接(无间隔符),通过MD5(32位小写)计算出的值
     */
    private static String calculateMAC(SubmitReq submitReq) throws Exception {
        String sb = submitReq.getEcName() +
                submitReq.getApId() +
                submitReq.getSecretKey() +
                submitReq.getTemplateId() +
                submitReq.getMobiles() +
                submitReq.getParams() +
                submitReq.getSign() +
                submitReq.getAddSerial();
        MessageDigest md = MessageDigest.getInstance("MD5");
        byte[] messageDigest = md.digest(sb.getBytes());

        StringBuilder hexString = new StringBuilder();
        for (byte b : messageDigest) {
            String hex = Integer.toHexString(0xFF & b);
            if (hex.length() == 1) hexString.append('0');
            hexString.append(hex);
        }

        String mac = hexString.toString().toLowerCase();
        log.debug("拼接后的mac:{}", sb);
        log.debug("MD5后的mac:{}", mac);
        return mac;
    }

    /**
     * 可以先将main方法输出的加密字符串放到postman进行调试
     */
    public static void main(String[] args) throws Exception {
        SubmitReq submitReq = new SubmitReq();
        submitReq.setEcName("某某公司测试");
        submitReq.setApId("yhm");
        submitReq.setSecretKey("yhmm");
        submitReq.setMobiles("173540456789");
        submitReq.setParams("[" + "123456" + "]");
        submitReq.setSign("wdqm");
        submitReq.setTemplateId("wdmbid");
        submitReq.setAddSerial("");
        submitReq.setMac(calculateMAC(submitReq));

        String reqText = JSON.toJSONString(submitReq);
        System.out.println(reqText);
        System.out.println(Base64.encodeBase64String(reqText.getBytes(StandardCharsets.UTF_8)));
    }
}

3、发送请求工具类

@Slf4j
public class HttpUtil {

    
    private static final OkHttpClient client = new OkHttpClient().newBuilder()
            .connectTimeout(20, TimeUnit.SECONDS)// 设置连接超时时间为20秒
            .readTimeout(20, TimeUnit.SECONDS)
            .build();


    public static JSONObject sendPost(String url, String content) {
        JSONObject jsonResponse = new JSONObject();
        try {
            MediaType mediaType = MediaType.parse("text/plain");
            RequestBody body = RequestBody.create(mediaType, content);
            Request request = new Request.Builder()
                    .url(url)//http://112.35.1.155:1992/sms/norsubmit
                    .method("POST", body)
                    .addHeader("Content-Type", "text/plain")
                    .build();
            // 创建请求
            Response response = client.newCall(request).execute();
            // 获取响应体
            ResponseBody responseBody = response.body();
            if (responseBody != null) {
                // 将响应体转换为字符串
                String responseString = responseBody.string();
                jsonResponse = JSONObject.parseObject(responseString);
            }
            // 关闭响应体
            responseBody.close();
        } catch (IOException e) {
            throw new RuntimeException(e);
        } finally {
            // 打印响应结果
            log.debug("中国移动云MAS平台短信发送结果:{}", jsonResponse);
        }
        return jsonResponse;
    }


}

最终接收到的短信示例:【某某公司测试】您好,您的验证码是123456

二、参数

名称

类型

说明

ecName

String

企业名称。

apId

String

接口账号用户名。

secretKey

String

接口账号用户密码。

sign

String

签名编码。在云MAS平台『管理』→『接口管理』→『短信接入用户管理』获取。

templateId

String

模板ID。在云MAS平台创建模板,路径:『短信』→『模板短信』→『模板管理』,创建后提交审核,审核通过将获得模板ID。

mobiles

String

收信手机号码。英文逗号分隔,每批次限5000个号码,例:“13800138000,13800138001,13800138002”。

params

String

模板变量。格式:[“param1”,“param2”],无变量模板填[""]。

addSerial

String

扩展码。依据开户时申请的服务代码匹配类型而定,如为精确匹配,此项填写空字符串("");如为模糊匹配,此项可填写空字符串或自定义的扩展码,注:服务代码加扩展码总长度不能超过20位。

mac

String

参数校验序列,生成方法:将ecName、apId、secretKey、templateId、mobiles、params、sign、addSerial按序拼接(无间隔符),通过MD5(32位小写)计算出的值。

1、获取ecName、apId、secretKey

云MAS平台HTTP(Java)发送模板短信

2、获取sign

路径:『管理』→『接口管理』→『短信接入用户管理』,直接点击『签名下载』获取签名信息。

云MAS平台HTTP(Java)发送模板短信

云MAS平台HTTP(Java)发送模板短信

3、获取templateId

路径:『短信』→『模板短信』→『模板管理』,创建后提交审核,审核通过将获得模板ID。

云MAS平台HTTP(Java)发送模板短信

三、响应结果

名称

类型

说明

rspcod

String

响应状态,详见下表。

mgsGroup

String

消息批次号,由云MAS平台生成,用于关联短信发送请求与状态报告,注:若数据验证不通过,该参数值为空。如:{ "msgGroup": "", "rspcod": "NOT_WHITE_IP", "success": false}

success

boolean

数据校验结果。

rspcod

说明

NOT_WHITE_IP

添加白名单(如果服务器在内网,需添加外网ip,自行调试)

InvalidUsrOrPwd

检查ecName、apId、secretKey

IllegalSignId

检查sign

IllegalTemplateId

检查templateId

IllegalMac

检查mac生成方法

InvalidMessage

非法消息,请求数据解析失败。

NoSignId

未匹配到对应的签名信息。

TooManyMobiles

手机号数量超限(>5000),应≤5000。

success

数据验证通过。

平台声明:以上文章转载于《CSDN》,文章全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,仅作参考。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/qq_67747978/article/details/146075592

遇见资源网 JAVA 云MAS平台HTTP(Java)发送模板短信 http://www.ox520.com/157902.html

常见问题

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务