Java SDK使用指导
MSGSMS提供Java语言的应用侧SDK供开发者使用,您可以直接集成SDK来调用MSGSMS的短信发送API,从而实现对MSGSMS的快速操作。
开发时序图
开发前准备
获取和安装SDK
您可以通过Maven方式获取和安装SDK,首先需要在您的操作系统中下载并安装Maven ,安装完成后您只需要在Java项目的pom.xml文件中加入相应的依赖项即可。
使用SDK前,您需要安装“huaweicloud-sdk-smsapi”,具体的SDK版本号请参见SDK开发中心。
以下代码示例中的version值,请根据实际的SDK版本号进行替换。
<dependency> <groupId>com.huaweicloud.sdk</groupId> <artifactId>huaweicloud-sdk-smsapi</artifactId> <version>3.1.125</version> </dependency>
代码示例
- 发送短信为单模板群发短信示例,发送分批短信为多模板群发短信示例。
- 本文档所述Demo在提供服务的过程中,可能会涉及个人数据的使用,建议您遵从国家的相关法律采取足够的措施,以确保用户的个人数据受到充分的保护。
- 本文档所述Demo仅用于功能演示,不允许客户直接进行商业使用。
- 本文档信息仅供参考,不构成任何要约或承诺。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 |
package com.huawei.smsapi; import com.huaweicloud.sdk.core.auth.ICredential; import com.huaweicloud.sdk.core.exception.ConnectionException; import com.huaweicloud.sdk.core.exception.RequestTimeoutException; import com.huaweicloud.sdk.core.exception.ServiceResponseException; import com.huaweicloud.sdk.core.http.HttpConfig; import com.huaweicloud.sdk.core.region.Region; import com.huaweicloud.sdk.smsapi.v1.SMSApiClient; import com.huaweicloud.sdk.smsapi.v1.SMSApiCredentials; import com.huaweicloud.sdk.smsapi.v1.model.BatchSendDiffSmsRequest; import com.huaweicloud.sdk.smsapi.v1.model.BatchSendDiffSmsRequestBody; import com.huaweicloud.sdk.smsapi.v1.model.BatchSendDiffSmsResponse; import com.huaweicloud.sdk.smsapi.v1.model.BatchSendSmsRequest; import com.huaweicloud.sdk.smsapi.v1.model.BatchSendSmsRequestBody; import com.huaweicloud.sdk.smsapi.v1.model.BatchSendSmsResponse; import com.huaweicloud.sdk.smsapi.v1.model.SmsContent; import java.util.ArrayList; import java.util.Arrays; /** * Use the SDK interface to send an SMS message. * Before using this example, you need to create an SMS application, signature, * and template through the console or by invoking the open APIs of the MSGSMS. */ public class SendSms { public static void main(String[] args) { System.out.println("Start HUAWEI CLOUD MSGSMS SEND SMS Java Demo..."); /* * Send an SMS message using a special AK/SK authentication algorithm. * When the MSGSMS is used to send SMS messages, the AK is app_key, and the SK is app_secret. * There will be security risks if the app_key/app_secret used for authentication is directly written into code. * We suggest encrypting the app_key/app_secret in the configuration file or environment variables for storage. * In this sample, the app_key/app_secret is stored in environment variables for identity authentication. * Before running this sample, set the environment variables CLOUD_SDK_MSGSMS_APPKEY and CLOUD_SDK_MSGSMS_APPSECRET. * CLOUD_SDK_MSGSMS_APPKEY indicates the application key (app_key), and CLOUD_SDK_MSGSMS_APPSECRET indicates the application secret (app_secret). * You can obtain the value from Application Management on the console or by calling the open API of Application Management. */ String ak = System.getenv("CLOUD_SDK_MSGSMS_APPKEY"); String sk = System.getenv("CLOUD_SDK_MSGSMS_APPSECRET"); /* Creating an SmsApiClient Instance * current support region: * CN North-Beijing4: RegionId: cn-north-4, endpoint: https://smsapi.cn-north-4.myhuaweicloud.com:443 * CN South-Guangzhou: RegionId: cn-south-1, endpoint: https://smsapi.cn-south-1.myhuaweicloud.com:443 */ SMSApiClient client = getClient(new Region("cn-north-4", new String[]{"https://smsapi.cn-north-4.myhuaweicloud.com: 443"}), getCredential(ak, sk)); try { // Example 1: Use POST /sms/batchSendSms/v1 to send an SMS message. System.out.println("----Example 1 use POST /sms/batchSendSms/v1 send msg now."); int httpcode = batchSendSms(client); System.out.println((httpcode == 200) ? "----Example 1 send sms success." : "----Example 1 send sms failed."); // Example 2: Using the POST /sms/batchSendDiffSms/v1 to Send SMS Messages in Batches System.out.println("----Example 2 use POST /sms/batchSendDiffSms/v1 send msg now."); httpcode = batchSendDiffSms(client); System.out.println((httpcode == 200) ? "----Example 2 send sms success." : "----Example 2 send sms failed."); } 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()); } } /** * Sending SMS Messages * * @param client SMSApiClient Instance * @return Indicates whether the SMS message is sent successfully. */ private static int batchSendSms(SMSApiClient client) { // Construct a request for sending an SMS message. BatchSendSmsRequest request = new BatchSendSmsRequest(); request.withBody(new BatchSendSmsRequestBody() // Channel ID for sending SMS messages. .withFrom("8824110605***") // List of numbers that receive SMS messages. // Note: When there are multiple numbers, do not contain spaces between the numbers. .withTo("+86137****3774,+86137****3776") // Template Id .withTemplateId("e1440669a4354ccdb56ebf2283c6***") // Template parameter, which must be enclosed in square brackets ([]). .withTemplateParas("[\"12\",\"23\",\"e\"]") // Status report callback URL. Set this parameter to a valid value. If status reports are not required, you do not need to set this parameter. .withStatusCallback("https://test/report")); // Invoke the SDK interface to send an SMS message. BatchSendSmsResponse response = client.batchSendSms(request); // Print the response result. System.out.println(response.toString()); return response.getHttpStatusCode(); } /** * Sending SMS Messages in Batches * * @param client SMSApiClient Instance * @return Whether the batch SMS message is sent successfully. */ private static int batchSendDiffSms(SMSApiClient client) { //Construct a request for sending SMS messages in batches. BatchSendDiffSmsRequest request = new BatchSendDiffSmsRequest(); request.withBody(new BatchSendDiffSmsRequestBody() // Channel ID for sending SMS messages. .withFrom("8824110605***") // Status report callback URL. Set this parameter to a valid value. If status reports are not required, you do not need to set this parameter. .withStatusCallback("https://test/report") .withSmsContent(new ArrayList<>(Arrays.asList( // Content of the first batch of group SMS messages new SmsContent() // List of SMS Recipient Numbers .withTo(new ArrayList<>((Arrays.asList("+86137****3774", "+86137****3775")))) // Template Id .withTemplateId("cefada4b8eaa4835864eb5b5eae1****") // Template Parameters .withTemplateParas(new ArrayList<>(Arrays.asList("1", "23", "45"))), // Content of the second batch of group SMS messages new SmsContent() // List of SMS Recipient Numbers .withTo(new ArrayList<>((Arrays.asList("+86137****3777", "+86137****3778")))) // Template Id .withTemplateId("e1440669a4354ccdb56ebf2283c6****") // Template Parameters .withTemplateParas(new ArrayList<>(Arrays.asList("3", "4", "5"))))))); //Invoke the SDK interface to send SMS messages in batche BatchSendDiffSmsResponse response = client.batchSendDiffSms(request); // Print the response result. System.out.println(response.toString()); return response.getHttpStatusCode(); } /** * Creating an Authentication Credential * * @param ak Application key (AK) generated after an app is created for the SMS service. * @param sk Application Secret (SK) generated after an app is created for the SMS service. * @return Authentication credential */ private static SMSApiCredentials getCredential(String ak, String sk) { return new SMSApiCredentials() .withAk(ak) .withSk(sk); } /** * Create SMSApiClient Instance * * @param region region * @param auth Authentication credential * @return SMSApiClient Instance */ private static SMSApiClient getClient(Region region, ICredential auth) { // Use the default configuration. HttpConfig config = HttpConfig.getDefaultHttpConfig(); config.withIgnoreSSLVerification(true); // Initializing the Client of the SMSApi Service return SMSApiClient.newBuilder() .withHttpConfig(config) .withCredential(auth) .withRegion(region) .build(); } } |
发送短信SDK默认使用的是okhttp组件发送消息,最大链接数为5;线程池使用ForkJoinPool,默认线程池与服务器的CPU数一样。这两个参数会限制系统的最大并发数,如果出现时延变长、性能无法提升时,可重定义HttpConfig的这两个参数以提升系统性能,例如:
HttpConfig config = HttpConfig.getDefaultHttpConfig(); config.withConnectionPool(new ConnectionPool(50, 5L, TimeUnit.MINUTES)); config.withExecutorService(new ForkJoinPool(200));
运行结果
- 发送短信(BatchSendSms)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
```json class BatchSendSmsResponse { code: 000000 description: Success result: [class SmsID { createTime: 2024-11-22T02:16:46Z from: 8824110605*** originTo: +86137****3774 smsMsgId: eb4e63dd-0945-4231-a48d-6b54c1a8b614_3434030 status: 000000 countryId: CN total: 1 }, class SmsID { createTime: 2024-11-22T02:16:46Z from: 8824110605*** originTo: +86137****3776 smsMsgId: eb4e63dd-0945-4231-a48d-6b54c1a8b614_3434031 status: 000000 countryId: CN total: 1 }] } ```
- 发送分批短信(BatchSendDiffSms)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
```json class BatchSendDiffSmsResponse { code: 000000 description: Success result: [class SmsID { createTime: 2024-11-22T02:16:46Z from: 8824110605*** originTo: +86137****3774 smsMsgId: eb4e63dd-0945-4231-a48d-6b54c1a8b614_3435044 status: 000000 countryId: CN total: 0 }, class SmsID { createTime: 2024-11-22T02:16:46Z from: 8824110605*** originTo: +86137****3775 smsMsgId: eb4e63dd-0945-4231-a48d-6b54c1a8b614_3435045 status: 000000 countryId: CN total: 0 }, class SmsID { createTime: 2024-11-22T02:16:46Z from: 8824110605*** originTo: +86137****3777 smsMsgId: eb4e63dd-0945-4231-a48d-6b54c1a8b614_3435046 status: 000000 countryId: CN total: 1 }, class SmsID { createTime: 2024-11-22T02:16:46Z from: 8824110605*** originTo: +86137****3778 smsMsgId: eb4e63dd-0945-4231-a48d-6b54c1a8b614_3435047 status: 000000 countryId: CN total: 1 }] } ```