功能介绍
什么是华为云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创建及删除签名、获取签名详情,及创建签名所需的上传申请文件。创建的签名可用于后续发送短信使用。
前置条件
- 1、需要是华为云企业认证账号,并开通华为云MSGSMS云服务。
- 2、获取华为云开发工具包(SDK),华为云提供了多种语言的SDK。本示例代码使用了Java SDK,也给出了在Java项目的pom.xml文件引入依赖的示例。
- 3、您需要拥有华为云账号以及该账号对应的 Access Key(AK)、Secret Access Key(SK)和IAM项目ID(PROJECT ID)。获取方法可参考获取帐号、用户、项目的名称和ID。
- 4、需要预先使用华为云Console或创建短信应用接口创建好应用,并获取短信应用的APPID。APPID获取方法可参考:表5 响应SmsAppQueryResp参数中的id。
接口参数说明
场景示例代码是基于SDK开发的,其中涉及到的Restful API接口与示例代码SDK接口对应关系如下:
接口功能 |
Restful API接口 |
SDK接口 |
上传申请文件 |
POST /v2/{project_id}/msgsms/upload-files |
uploadSignatureFile |
创建短信签名 |
POST /v2/{project_id}/msgsms/signatures |
createSignature |
获取签名详情 |
GET /v2/{project_id}/msgsms/signatures/{id} |
showSignature |
删除短信签名 |
DELETE /v2/{project_id}/msgsms/signatures/{id} |
deleteSignature |
相关接口参数的详细说明可参见:“短信签名API” 。
SDK获取和安装
开发者可以通过Maven方式获取和安装SDK,包括“huaweicloud-sdk-core”和“huaweicloud-sdk-msgsms”。需要在Java项目的pom.xml文件中加入如下的依赖项。
Copied!
<dependency>
<groupId>com.huaweicloud.sdk</groupId>
<artifactId>huaweicloud-sdk-msgsms</artifactId>
<version>3.1.38</version>
</dependency>
示例代码
Copied!
public class MsgsmsSignatureManageDemo {
public static void main(String[] args) {
System.out.println("Start HUAWEI CLOUD MSGSMS Signature Manage Java Demo...");
String ak = System.getenv("HUAWEICLOUD_SDK_AK");
String sk = System.getenv("HUAWEICLOUD_SDK_SK");
ICredential auth = getCredential(ak, sk,"YOUR PROJECT ID");
MsgsmsClient client = getClient(MsgsmsRegion.CN_NORTH_4, auth);
try {
String fileId = uploadSignatureFile(client);
String id = createSignature(client, "YOUR APPID", fileId);
showSignature(client, id);
deleteSignature(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());
}
}
private static String uploadSignatureFile(MsgsmsClient client) {
UploadSignatureFileRequest request = new UploadSignatureFileRequest();
request.setFileDesc("test");
UploadSignatureFileRequestBody fileRequestBody = new UploadSignatureFileRequestBody();
fileRequestBody.withFile(
MsgsmsSignatureManageDemo.class.getClassLoader().getResourceAsStream("signature_test_file.png"),
"signature_test_file.png");
request.setBody(fileRequestBody);
UploadSignatureFileResponse response = client.uploadSignatureFile(request);
System.out.println(response.toString());
return response.getFileId();
}
private static String createSignature(MsgsmsClient client, String appId, String fileId) {
CreateSignatureRequest request = new CreateSignatureRequest();
SmsSignatureReq body = new SmsSignatureReq();
body.setAppId(appId);
body.setSignatureName("myTestSignature");
body.setSignatureSource(0);
body.setSignatureType("VERIFY_CODE_TYPE");
body.setApplyDesc("my test signature apply desc.");
body.setSourceTitleContent("Test");
body.setIsInvolvedThird("No");
body.setFileId(fileId);
request.withBody(body);
CreateSignatureResponse response = client.createSignature(request);
System.out.println(response.toString());
return response.getId();
}
private static void showSignature(MsgsmsClient client, String id) {
ShowSignatureRequest request = new ShowSignatureRequest();
request.setId(id);
ShowSignatureResponse response = client.showSignature(request);
System.out.println(response.toString());
}
private static void deleteSignature(MsgsmsClient client, String id) {
DeleteSignatureRequest request = new DeleteSignatureRequest();
request.setId(id);
DeleteSignatureResponse response = client.deleteSignature(request);
System.out.println(response.toString());
}
public static ICredential getCredential(String ak, String sk, String projectId) {
return new BasicCredentials()
.withAk(ak)
.withSk(sk)
.withProjectId(projectId);
}
public static MsgsmsClient getClient(Region region, ICredential auth) {
HttpConfig config = HttpConfig.getDefaultHttpConfig();
config.withIgnoreSSLVerification(true);
return MsgsmsClient.newBuilder()
.withHttpConfig(config)
.withCredential(auth)
.withRegion(region)
.build();
}
}
修订记录
发布日期 |
文档版本 |
修订说明 |
2023-04-28 |
1.0 |
文档首次发布 |
功能介绍
什么是华为云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创建及删除签名、获取签名详情,及创建签名所需的上传申请文件。创建的签名可用于后续发送短信使用。
前置条件
接口参数说明
场景示例代码是基于SDK开发的,其中涉及到的Restful API接口与示例代码SDK接口对应关系如下:
相关接口参数的详细说明可参见:“短信签名API” 。
SDK获取和安装
开发者可以通过Maven方式获取和安装SDK,包括“huaweicloud-sdk-core”和“huaweicloud-sdk-msgsms”。需要在Java项目的pom.xml文件中加入如下的依赖项。
<dependency> <groupId>com.huaweicloud.sdk</groupId> <artifactId>huaweicloud-sdk-msgsms</artifactId> <version>3.1.38</version> </dependency>
示例代码
public class MsgsmsSignatureManageDemo { public static void main(String[] args) { System.out.println("Start HUAWEI CLOUD MSGSMS Signature Manage Java Demo..."); // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全; // 本示例以ak和sk保存在环境变量中来实现身份认证为例,运行示例前请先在本地环境中设置环境变量HUAWEICLOUD_SDK_AK和HUAWEICLOUD_SDK_SK。 String ak = System.getenv("HUAWEICLOUD_SDK_AK"); String sk = System.getenv("HUAWEICLOUD_SDK_SK"); ICredential auth = getCredential(ak, sk,"YOUR PROJECT ID"); // 创建MsgsmsClient实例 MsgsmsClient client = getClient(MsgsmsRegion.CN_NORTH_4, auth); try { String fileId = uploadSignatureFile(client); String id = createSignature(client, "YOUR APPID", fileId); showSignature(client, id); deleteSignature(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 String uploadSignatureFile(MsgsmsClient client) { UploadSignatureFileRequest request = new UploadSignatureFileRequest(); request.setFileDesc("test"); UploadSignatureFileRequestBody fileRequestBody = new UploadSignatureFileRequestBody(); fileRequestBody.withFile( MsgsmsSignatureManageDemo.class.getClassLoader().getResourceAsStream("signature_test_file.png"), "signature_test_file.png"); request.setBody(fileRequestBody); // 调用SDK的接口上传申请文件 UploadSignatureFileResponse response = client.uploadSignatureFile(request); System.out.println(response.toString()); return response.getFileId(); } /** * 创建短信签名 * @param client MsgsmsClient实例 * @param appId 应用ID * @param fileId 签名文件ID * @return 签名主键ID */ private static String createSignature(MsgsmsClient client, String appId, String fileId) { CreateSignatureRequest request = new CreateSignatureRequest(); SmsSignatureReq body = new SmsSignatureReq(); body.setAppId(appId); body.setSignatureName("myTestSignature"); body.setSignatureSource(0); body.setSignatureType("VERIFY_CODE_TYPE"); body.setApplyDesc("my test signature apply desc."); body.setSourceTitleContent("Test"); body.setIsInvolvedThird("No"); body.setFileId(fileId); request.withBody(body); // 调用SDK的接口创建短信签名 CreateSignatureResponse response = client.createSignature(request); System.out.println(response.toString()); return response.getId(); } /** * 获取签名详情 * @param client MsgsmsClient实例 * @param id 签名主键ID */ private static void showSignature(MsgsmsClient client, String id) { ShowSignatureRequest request = new ShowSignatureRequest(); request.setId(id); // 调用SDK的接口获取签名详情 ShowSignatureResponse response = client.showSignature(request); System.out.println(response.toString()); } /** * 删除短信签名 * @param client MsgsmsClient实例 * @param id 签名主键ID */ private static void deleteSignature(MsgsmsClient client, String id) { DeleteSignatureRequest request = new DeleteSignatureRequest(); request.setId(id); // 调用SDK的接口删除短信签名 DeleteSignatureResponse response = client.deleteSignature(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); } /** * 创建MsgsmsClient实例 * @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(); } }
参考
更多信息请参考:
修订记录