手把手教你使用阿里云短信服務(wù)API發(fā)送短信驗(yàn)證碼
在當(dāng)今的互聯(lián)網(wǎng)應(yīng)用中,短信驗(yàn)證碼是驗(yàn)證用戶身份、保障賬戶安全的關(guān)鍵環(huán)節(jié)。阿里云短信服務(wù)(Dysmsapi)以其高可用性、高并發(fā)能力和完善的管理控制臺(tái),成為眾多開(kāi)發(fā)者的首選。本文將帶你從零開(kāi)始,一步步完成阿里云短信接口的配置與調(diào)用,實(shí)現(xiàn)短信驗(yàn)證碼的發(fā)送。
第一步:前期準(zhǔn)備與賬號(hào)配置
- 注冊(cè)與實(shí)名認(rèn)證:訪問(wèn)阿里云官網(wǎng)(aliyun.com)完成賬號(hào)注冊(cè),并進(jìn)行個(gè)人或企業(yè)實(shí)名認(rèn)證。這是使用所有云服務(wù)的基礎(chǔ)。
- 開(kāi)通短信服務(wù):在阿里云控制臺(tái),搜索并進(jìn)入“短信服務(wù)”產(chǎn)品頁(yè)面,閱讀協(xié)議后開(kāi)通服務(wù)。
- 獲取訪問(wèn)密鑰:鼠標(biāo)懸停在控制臺(tái)右上角頭像,進(jìn)入“AccessKey管理”頁(yè)面。強(qiáng)烈建議創(chuàng)建并使用子用戶AccessKey(RAM用戶),并為其分配管理短信服務(wù)的權(quán)限(如AliyunDysmsFullAccess),這比直接使用主賬號(hào)密鑰更安全。請(qǐng)妥善保管你的AccessKey ID和AccessKey Secret。
- 申請(qǐng)簽名與模板:
- 簽名:在短信服務(wù)控制臺(tái)的“國(guó)內(nèi)消息”或“國(guó)際/港澳臺(tái)消息”中,申請(qǐng)“簽名”。簽名是顯示在短信開(kāi)頭【】中的標(biāo)識(shí),用于標(biāo)識(shí)發(fā)送方。例如【你的APP名】。根據(jù)用途(如驗(yàn)證碼、通知、推廣)提供相應(yīng)的資質(zhì)證明(如網(wǎng)站備案截圖、APP下載頁(yè)截圖等)進(jìn)行審核。
* 模板:申請(qǐng)“模板”。短信模板是發(fā)送內(nèi)容的具體格式,其中驗(yàn)證碼部分用變量${code}表示。例如:“您的驗(yàn)證碼為${code},該驗(yàn)證碼5分鐘內(nèi)有效,請(qǐng)勿泄露。” 模板同樣需要審核。
審核通過(guò)后,記錄下你的簽名名稱和模板CODE。
第二步:核心代碼實(shí)現(xiàn)(以Python為例)
阿里云提供了多種語(yǔ)言的SDK,這里以Python為例。你可以通過(guò)pip安裝核心庫(kù):pip install alibabacloud_dysmsapi20170525。
`python
# 發(fā)送短信驗(yàn)證碼示例
from alibabaclouddysmsapi20170525.client import Client
from alibabaclouddysmsapi20170525 import models
from alibabacloudteaopenapi import models as openapimodels
from alibabacloudteautil import models as utilmodels
from alibabacloudtea_util.client import Client as UtilClient
import random
def sendsms(phonenumber, code):
"""
發(fā)送短信驗(yàn)證碼
:param phone_number: 接收手機(jī)號(hào),國(guó)內(nèi)號(hào)碼需帶國(guó)家代碼86,如 8613800138000
:param code: 6位隨機(jī)數(shù)字驗(yàn)證碼
:return: 發(fā)送結(jié)果
"""
# 1. 配置訪問(wèn)密鑰(請(qǐng)?zhí)鎿Q為你的真實(shí)密鑰)
config = openapimodels.Config(
accesskeyid='youraccesskeyid', # 你的AccessKey ID
accesskeysecret='youraccesskeysecret' # 你的AccessKey Secret
)
config.endpoint = 'dysmsapi.aliyuncs.com' # 服務(wù)接入點(diǎn)
2. 初始化客戶端
client = Client(config)
3. 構(gòu)建請(qǐng)求參數(shù)
sendrequest = models.SendSmsRequest(
phonenumbers=phonenumber, # 接收方手機(jī)號(hào)
signname='你的簽名名稱', # 控制臺(tái)審核通過(guò)的簽名
templatecode='SMS123456789', # 控制臺(tái)審核通過(guò)的模板CODE
template_param=f'{{"code":"{code}"}}' # 模板變量JSON字符串,對(duì)應(yīng)模板中的${code}
)
try:
# 4. 發(fā)起調(diào)用
response = client.sendsms(sendrequest)
# 5. 處理響應(yīng)
if response.body.code == 'OK':
print(f"短信發(fā)送成功!請(qǐng)求ID: {response.body.request_id}")
return True
else:
print(f"短信發(fā)送失敗!錯(cuò)誤碼: {response.body.code}, 錯(cuò)誤信息: {response.body.message}")
return False
except Exception as e:
print(f"調(diào)用接口時(shí)發(fā)生異常: {e}")
return False
使用示例:生成6位隨機(jī)驗(yàn)證碼并發(fā)送
def main():
phone = '8613800138000' # 示例手機(jī)號(hào)
verificationcode = ''.join(random.choices('0123456789', k=6)) # 生成6位隨機(jī)數(shù)
print(f"生成的驗(yàn)證碼是: {verificationcode}")
success = sendsms(phone, verificationcode)
if success:
# 在實(shí)際應(yīng)用中,這里應(yīng)將驗(yàn)證碼與手機(jī)號(hào)、時(shí)間戳關(guān)聯(lián)并存入緩存(如Redis),設(shè)置5分鐘過(guò)期
print("驗(yàn)證碼已發(fā)送,請(qǐng)?zhí)嵝延脩舨槭铡?)
else:
print("發(fā)送失敗,請(qǐng)檢查配置或重試。")
if name == 'main':
main()`
第三步:關(guān)鍵要點(diǎn)與最佳實(shí)踐
- 安全存儲(chǔ)密鑰:切勿將AccessKey硬編碼在客戶端或公開(kāi)的代碼倉(cāng)庫(kù)中。在服務(wù)器端應(yīng)用中,應(yīng)通過(guò)環(huán)境變量或配置中心讀取。
- 驗(yàn)證碼管理:發(fā)送成功后,務(wù)必在服務(wù)端將驗(yàn)證碼(或哈希值)與手機(jī)號(hào)、發(fā)送時(shí)間綁定,存儲(chǔ)于Redis等高速緩存中,并設(shè)置合理的過(guò)期時(shí)間(如5分鐘)。用戶提交驗(yàn)證碼時(shí),進(jìn)行比對(duì)驗(yàn)證。
- 頻率限制與防刷:在業(yè)務(wù)邏輯層對(duì)同一手機(jī)號(hào)的發(fā)送頻率做嚴(yán)格限制(如60秒內(nèi)只能發(fā)送一次,24小時(shí)內(nèi)不超過(guò)10次),防止惡意刷短信導(dǎo)致資損和騷擾用戶。
- 錯(cuò)誤處理:關(guān)注響應(yīng)中的
Code字段。常見(jiàn)的錯(cuò)誤如isv.BUSINESS<em>LIMIT</em>CONTROL(業(yè)務(wù)限流)、isv.MOBILE<em>NUMBER</em>ILLEGAL(非法手機(jī)號(hào))等,需要在前端或日志中給出友好提示。 - 監(jiān)控與告警:在阿里云控制臺(tái)關(guān)注短信發(fā)送成功率、失敗明細(xì),并可以設(shè)置閾值告警,以便及時(shí)發(fā)現(xiàn)問(wèn)題。
###
通過(guò)以上三步——配置賬號(hào)與簽名模板、集成SDK編寫(xiě)發(fā)送代碼、遵循安全與最佳實(shí)踐——你就能穩(wěn)健地將阿里云短信驗(yàn)證碼功能集成到自己的應(yīng)用中。整個(gè)過(guò)程的核心在于前期的資質(zhì)審核與安全編碼。現(xiàn)在,你可以開(kāi)始嘗試發(fā)送你的第一條測(cè)試短信了!
如若轉(zhuǎn)載,請(qǐng)注明出處:http://www.sunlibin.com.cn/product/22.html
更新時(shí)間:2026-06-10 11:09:32