# huaweicloud-msgsms-template-manage-java **Repository Path**: HuaweiCloudDeveloper/huaweicloud-msgsms-template-manage-java ## Basic Information - **Project Name**: huaweicloud-msgsms-template-manage-java - **Description**: 华为云MSGSMS服务为企业用户(不包括个体工商户、个人独资企业、合伙企业等非法人主体或组织)提供单发、群发短信服务,同时可接收用户回复短信。 此项目是关于提供模板管理的示例代码 - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master-dev - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-04-27 - **Last Updated**: 2025-06-16 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 功能介绍 **什么是华为云MSGSMS服务?** 华为云MSGSMS服务为企业用户(不包括个体工商户、个人独资企业、合伙企业等非法人主体或组织)提供单发、群发短信服务,同时可接收用户回复短信。 MSGSMS服务提供的短信发送能力,包括国内短信和国际/港澳台短信,具体如下: * 国内短信:向中国大陆号码发送短信。支持发送验证码、通知和推广短信。国内短信支持三网合一(移动,联通,电信,新增支持广电)专属通道。 * 国际短信:向国际/港澳台号码发送英文及其他语种短信。仅支持发送验证码和通知短信。 注:国际/港澳台短信无签名,模板不区分类型,不可接收用户回复短信。 短信发送形式:可开发代码调用API,或使用群发助手发送短信。 企业客户在发送短信前,需要先通过MSGSMS服务的Console或API创建短信应用、短信模板,国内短信业务还需要创建短信签名。 * 短信应用:短信应用是用户使用华为公有云短信服务的载体。创建应用后,系统会自动分配全局唯一的APP_Key和APP_Secret、APPID(应用主键ID),并提供APP接入地址。其中,APP_Key和APP_Secret是用户身份的唯一标识,调用短信业务API时需携带,用于认证鉴权。APPID是后续调用签名管理、模板管理相关接口所需的参数。 * 短信签名:短信签名是根据用户身份来创建的符合自身属性的签名信息,需审核通过后才能使用。短信签名只针对国内短信场景使用。 例如,手机终端收到的短信为“【华为云】您的验证码为:123456(5分钟内有效),为了保证您的账户安全,请勿向任何人提供此验证码”,其中,“【华为云】”为短信签名。 * 短信模板:短信模板是用户发送短信时使用的内容模板,由纯固定文本或固定文本加变量组成。模板创建后,只有变量可以按规则变化,替换成符合格式要求的指定内容。 **您将学到什么?** 华为云提供了 MSGSMS 服务端 SDK,您可以直接集成服务端 SDK 来调用 MSGSMS 的相关 API,从而实现对 MSGSMS 的快速操作。 该场景示例代码以短信模板为例,介绍如何使用MSGSMS Java SDK创建及删除短信模板、获取模板详情,及创建短信模板时需获取发送国家的样例。创建的模板可用于后续发送短信使用。 需要注意的是,示例代码是创建国内短信模板,需要携带签名主键ID,如果是创建国际短信模板,则不需要携带签名主键ID。 ## 前置条件 - 1、需要是华为云企业认证账号,并开通华为云MSGSMS云服务。 - 2、获取华为云开发工具包(SDK),华为云提供了多种语言的SDK。本示例代码使用了Java SDK,也给出了在Java项目的pom.xml文件引入依赖的示例。 - 3、您需要拥有华为云账号以及该账号对应的 Access Key(AK)、Secret Access Key(SK)和IAM项目ID(PROJECT ID)。获取方法可参考[获取帐号、用户、项目的名称和ID](https://support.huaweicloud.com/api-msgsms/sms_05_0020.html)。 - 4、需要预先使用华为云Console或创建短信应用接口创建好应用,并获取短信应用的APPID。APPID获取方法可参考:[表5 响应SmsAppQueryResp参数中的id](https://support.huaweicloud.com/api-msgsms/sms_05_0022.html#ZH-CN_TOPIC_0000001380032914__table133082032111715)。 - 5、需要预先使用华为云Console或创建短信签名接口创建好签名,并获取短信签名主键ID。签名主键ID获取方法可参考:[表5 响应SmsSignatureResp参数中的ID](https://support.huaweicloud.com/api-msgsms/sms_05_0028.html#ZH-CN_TOPIC_0000001430073161__table822693813014)。 ## 接口参数说明 场景示例代码是基于SDK开发的,其中涉及到的Restful API接口与示例代码SDK接口对应关系如下: | 接口功能 | Restful API接口 | SDK接口 | |:-------|:--------------------------------------|:----------| | 查询发送国家 | GET /v2/{project_id}/msgsms/country | listSendCountryDetails | | 创建短信模板 | POST /v2/{project_id}/msgsms/templates | createTemplate | | 获取模板详情 | GET /v2/{project_id}/msgsms/templates/{id} | showTemplate | | 删除短信模板 | DELETE /v2/{project_id}/msgsms/templates/{id} | deleteTemplate | 相关接口参数的详细说明可参见:[“短信模板API”](https://support.huaweicloud.com/api-msgsms/sms_05_0039.html) 章节。 ### SDK获取和安装 开发者可以通过Maven方式获取和安装SDK,包括“huaweicloud-sdk-core”和“huaweicloud-sdk-msgsms”。需要在Java项目的pom.xml文件中加入如下的依赖项。 ```xml com.huaweicloud.sdk huaweicloud-sdk-msgsms 3.1.38 ``` ## 示例代码 ```java public class MsgsmsTemplateManageDemo { public static void main(String[] args) { System.out.println("Start HUAWEI CLOUD MSGSMS Template Manage Java Demo..."); ICredential auth = getCredential("YOUR AK", "YOUR SK","YOUR PROJECT ID"); // 创建MsgsmsClient实例 MsgsmsClient client = getClient(MsgsmsRegion.CN_NORTH_4, auth); try { Long countryId = querySendCountryId(client); System.out.println("countryId: " + countryId); String id = createTemplate(client, "YOUR APPID", "YOUR SIGNATURE KEY ID", countryId); showTemplate(client, id); deleteTemplate(client, id); } catch (ConnectionException | RequestTimeoutException e) { System.out.println(e.getMessage()); } catch (ServiceResponseException e) { System.out.println(e.getHttpStatusCode()); System.out.println(e.getErrorCode()); System.out.println(e.getErrorMsg()); } } /** * 查询发送国家 * @param client MsgsmsClient实例 * @return 国家ID */ private static Long querySendCountryId(MsgsmsClient client) { ListSendCountryDetailsRequest request = new ListSendCountryDetailsRequest(); request.setCountryNameEn("China"); // 调用SDK的接口获取发送国家 ListSendCountryDetailsResponse response = client.listSendCountryDetails(request); System.out.println(response.toString()); return response.getBody().get(0).getCountryId().longValue(); } /** * 创建短信模板 * @param client MsgsmsClient实例 * @param appId 应用ID * @param signId 应用签名主键ID * @param countryId 国家ID * @return 签名主键ID */ private static String createTemplate(MsgsmsClient client, String appId, String signId, Long countryId) { CreateTemplateRequest request = new CreateTemplateRequest(); SmsTemplateReq body = new SmsTemplateReq(); body.setAppId(appId); body.setSignId(signId); body.setRegion("cn"); body.setSendCountry(new ArrayList<>(Collections.singletonList(countryId))); body.setTemplateName("myTestTemplate"); body.setTemplateType("VERIFY_CODE_TYPE"); body.setBrackets("GB"); body.setTemplateContent("template ${1} test."); body.setUniversalTemplate(1); SmsTemplateVariableAttrReq var = new SmsTemplateVariableAttrReq(); var.setVariableIndex(1); var.setVariableType("TEXT"); var.setVariableDesc("var1"); body.setVariableAttributes(new ArrayList<>(Collections.singletonList(var))); request.withBody(body); // 调用SDK的接口创建模板 CreateTemplateResponse response = client.createTemplate(request); System.out.println(response.toString()); return response.getId(); } /** * 获取模板详情 * @param client MsgsmsClient实例 * @param id 模板ID */ private static void showTemplate(MsgsmsClient client, String id) { ShowTemplateRequest request = new ShowTemplateRequest(); request.setId(id); // 调用SDK的接口查询模板 ShowTemplateResponse response = client.showTemplate(request); System.out.println(response.toString()); } /** * 删除短信模板 * @param client MsgsmsClient实例 * @param id 模板ID */ private static void deleteTemplate(MsgsmsClient client, String id) { DeleteTemplateRequest request = new DeleteTemplateRequest(); request.setId(id); // 调用SDK的接口删除模板 DeleteTemplateResponse response = client.deleteTemplate(request); System.out.println(response.toString()); } /** * 创建鉴权凭证 * @param ak 租户账号对应的Access Key (AK) * @param sk 租户账号对应的Secret Access Key (SK) * @param projectId 租户账号对应的IAM项目ID * @return 鉴权凭证 */ public static ICredential getCredential(String ak, String sk, String projectId) { return new BasicCredentials() .withAk(ak) .withSk(sk) .withProjectId(projectId); } /** * 创建Msgsms client * @param region region信息 * @param auth 鉴权凭证 * @return MsgsmsClient实例 */ public static MsgsmsClient getClient(Region region, ICredential auth) { // 使用默认配置 HttpConfig config = HttpConfig.getDefaultHttpConfig(); config.withIgnoreSSLVerification(true); // 初始化Msgsms服务的客户端 return MsgsmsClient.newBuilder() .withHttpConfig(config) .withCredential(auth) .withRegion(region) .build(); } } ``` ## 参考 更多信息请参考: - 1、[MSGSMS产品介绍](https://support.huaweicloud.com/productdesc-msgsms/sms_Infographics.html) - 2、[MSGSMS快速入门](https://support.huaweicloud.com/qs-msgsms/sms_02_0001.html) - 3、[MSGSMS开发指南](https://support.huaweicloud.com/devg-msgsms/sms_04_0000.html) - 4、[API Explorer](https://console.huaweicloud.com/apiexplorer/#/openapi/MSGSMS/doc?api=CreateTemplate) - 5、[API错误中心](https://apierrorcenter.developer.huaweicloud.com/apierrorcenter/errorcode?product=MSGSMS) - 6、[SDK中心](https://sdkcenter.developer.huaweicloud.com/?product=MSGSMS) ## 修订记录 | 发布日期 | 文档版本 | 修订说明 | | :--------: | :------: | :----------: | | 2023-04-28 | 1.0 | 文档首次发布 |