公司網(wǎng)站設(shè)計(jì)案例其他搜索引擎
文章目錄
- 1 前言
- 2 準(zhǔn)備工作
- 2.1 了解流程
- 2.2 配置信息
- 2.3 短信簽名和模板
- 2.3.1 簽名
- 2.3.2 模板
- 2.3.3 存入數(shù)據(jù)庫
- 3 SDK
- 4 集成Springboot
- 4.1 集成
- 4.2 測試
- 5 后記
1 前言
? 線上系統(tǒng)開發(fā)中,短信功能是經(jīng)常要用到的,比如注冊、修改手機(jī)號、修改密碼時(shí)短信驗(yàn)證碼等。我們這里是一個(gè)基于Springboot的微服務(wù)項(xiàng)目,選擇a-li-yun的短信接口。
2 準(zhǔn)備工作
2.1 了解流程
? 登錄a-li-yun短信控制臺(tái),了解短信相關(guān)知識。我們這里需要短信發(fā)送功能,進(jìn)一步了解相關(guān)API。
2.2 配置信息
- 憑證:登錄a-li短信控制臺(tái),通過快速學(xué)習(xí),我們知道,我們需要?jiǎng)?chuàng)建accessKey,accessKeySecret,即用戶的訪問憑證,具體如何創(chuàng)建,這里不贅述,自行查閱文檔。
- 域名endpoint:即我們通過那個(gè)地址訪問a-li-yun的短信接口。
2.3 短信簽名和模板
? 簽名和模板是a-li-yun短信功能所必須的,下面講解下簽名和模板的添加。
2.3.1 簽名
-
添加簽名:一個(gè)賬戶只能添加一個(gè)驗(yàn)證碼類型的簽名,我已經(jīng)添加了一個(gè),你們根據(jù)需要自行選擇,圖示:
-
添加簽名后,等待一定時(shí)間審核通過即可,圖示:
2.3.2 模板
-
添加模板:
-
審核不通過原因:
- 場景連接:這里場景連接一定要填寫公網(wǎng)可訪問連接,比如你上線的App、網(wǎng)站網(wǎng)址,或者你的博客等待的。
- 模板內(nèi)容:如需自定義,仔細(xì)閱讀變量規(guī)范、模板申請規(guī)范;或者直接說使用模板庫中預(yù)定義模塊,適當(dāng)修改文字,可滿足大部分應(yīng)用場景。
-
效果圖示:
2.3.3 存入數(shù)據(jù)庫
- 與短信功能相關(guān)的簽名、模板,這些信息保存在數(shù)據(jù)庫的配置表中。
- 簽名:效果就是短信開頭的【】中的信息,開發(fā)需要用到簽名名稱signName。
- 模板:效果就是短信的內(nèi)容,開發(fā)中需要用到模板名稱templateCode,其他信息保存在數(shù)據(jù)庫中。
3 SDK
? 雖然是做了前面的準(zhǔn)備工作,但是具體怎么應(yīng)用還是很模糊,查閱相關(guān)技術(shù)文檔,很多都是舊版本的內(nèi)容。這里我們還是通過a-li-yun的OpenAPI來學(xué)習(xí)最新的應(yīng)用技術(shù),這里我們以短信發(fā)送為例,圖示:
api參數(shù),示例,依賴一目了然,而且是最新版本的內(nèi)容,下面我們開始集成到項(xiàng)目中。
4 集成Springboot
4.1 集成
-
pom.xml:復(fù)制上面依賴信息
<dependency><groupId>com.xxx</groupId><artifactId>dysmsapi20170525</artifactId><version>2.0.21</version></dependency>
-
分析:
- 短信功能我們項(xiàng)目中多個(gè)模塊需要用到,我們把短信發(fā)送功能封裝到AliSms類中,AliSms配置為IOC容器中的bean,位置放置在公共模塊中。
- 需要用到的配置信息,比如accessKey,secretKey,endpoint,我們在nacos中配置,圖示:
-
參考官網(wǎng)給出的SDK封裝我們自己的AliSms類,源碼,xxx-a-li-yun:
import com.xxx.dysmsapi20170525.Client; import com.xxx.dysmsapi20170525.models.SendSmsRequest; import com.xxx.dysmsapi20170525.models.SendSmsResponse; import com.xxx.teautil.models.RuntimeOptions; import cn.hutool.core.bean.BeanUtil;import java.util.Map;/*** @author Administrator* @version 1.0* @description ali sms* @date 2022-09-30 11:19* xxx短信類*/ public class AliSms {private final Client client;private final SendSmsRequest request;public AliSms(Client client, SendSmsRequest request) {this.client = client;this.request = request;}public Map<String, Object> sendSms(String templateCode, String templateParam, String phoneNumbers) throws Exception {request.setTemplateCode(templateCode);request.setTemplateParam(templateParam);request.setPhoneNumbers(phoneNumbers);RuntimeOptions runtime = new RuntimeOptions();SendSmsResponse response = null;try {response = client.sendSmsWithOptions(request, runtime);} catch (Exception e) {e.printStackTrace();throw new Exception("短信發(fā)送失敗");}return BeanUtil.beanToMap(response);} }import com.xxx.dysmsapi20170525.Client; import com.xxx.teaopenapi.models.Config; import com.xxx.dysmsapi20170525.models.SendSmsRequest; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration;/*** @author Administrator* @version 1.0* @description sms短信發(fā)送* @date 2022-10-04 12:50*/ @Configuration public class SmsAutoConfiguration {/*** 短信服務(wù)賬戶accessKey*/@Value("${spring.cloud.alicloud.access-key}")private String accessKey;/*** 短信服務(wù)賬戶accessKey*/@Value("${spring.cloud.alicloud.secret-key}")private String secretKey;/*** 短信服務(wù)endpoint*/@Value("${spring.cloud.alicloud.sms.endpoint}")private String endpoint;/*** 短信服務(wù)簽名*/@Value("${spring.cloud.alicloud.sms.signName}")private String signName;@Beanpublic AliSms aliSms() {return new AliSms(createClient(), sendSmsRequest());}private SendSmsRequest sendSmsRequest() {SendSmsRequest request = new SendSmsRequest();request.setSignName(signName);return request;}private Client createClient(){Config config = new Config()// 您的 AccessKey ID.setAccessKeyId(accessKey)// 您的 AccessKey Secret.setAccessKeySecret(secretKey);// 訪問的域名config.endpoint = endpoint;Client client = null;try {client = new Client(config);} catch (Exception e) {e.printStackTrace();throw new RuntimeException("創(chuàng)建xxx客戶端失敗!");}return client;}}
-
pom.xml添加依賴,全部相關(guān)依賴:
<dependency><groupId>com.xxx</groupId><artifactId>dysmsapi20170525</artifactId><version>2.0.21</version></dependency><dependency><groupId>com.xxx</groupId><artifactId>tea-util</artifactId><version>0.2.14</version></dependency>
4.2 測試
- 測試代碼:前端代碼及后端接口根據(jù)業(yè)務(wù)需求自己設(shè)計(jì),這里只展示業(yè)務(wù)實(shí)現(xiàn)層的短信發(fā)送方法的簡單測試實(shí)現(xiàn):
@Autowiredprivate AliSms aliSms;@Overridepublic void sendSms(Sms sms) {try {log.info("發(fā)送短信{}", JSON.toJSONString(sms, true));String templateParam = "{\"code\":\"" + "123456" + "\"}";Map<String, Object> info = aliSms.sendSms(sms.getTemplateCode(), templateParam, sms.getMobile());log.info("發(fā)送結(jié)果:{}", JSON.toJSONString(info, true));} catch (Exception e) {e.printStackTrace();throw new RuntimeException("發(fā)送短信失敗");}}
-
測試結(jié)果:
-
控制臺(tái):
{"basePath":"xxx","description":"發(fā)送短信","ip":"192.168.10.1","method":"com.gaogzhen.controller.SmsController.sendSms","parameter":{"sms":{"countryCode":"+86","mobile":"自己填寫的手機(jī)號","templateCode":"自己的模板CODE"}},"result":{"code":200},"spendTime":0,"uri":"/sms/sendTo","url":"xxx","username":"1014066909280374785" }
-
手機(jī)截圖:
-
5 后記
tips:上述xxx為a-li-yun去掉-:臥槽這就涉嫌廣告不給審核通過nb
? 歡迎交流學(xué)習(xí),下面為聯(lián)系方式和倉庫源代碼地址
?Q-Q:-806797785-
??源代碼倉庫地址:->gitee.com/gaogzhen/coin-exchange<-