使用騰訊雲發送短信


使用騰訊雲發送短信

第一次注冊使用白送你200條,美滋滋

在騰訊雲平台申請

點點點操作就完事了,要想發送短信,必須要申請簽名和模板。簽名類型可以使用網站,公眾號,小程序,app

填好信息,上傳指定的截圖憑據即可。網站創建簽名需要上傳域名備案里面的備案號等信息

接下來需要創建短信內容模板,按照提示寫就行。模板里面可以挖坑,接下來可以在坑里面填驗證碼,過期時間一類的

還需要在應用管理中創建應用。系統會默認創建一個應用,也可以自己新創建。應用里的SDK AppID和 AppKey接下來程序里面會作為配置參數

使用python SDK

https://cloud.tencent.com/document/product/382/11672

上面是騰訊雲sdk2.0的官方文檔,3.0功能態度,2.0就足夠好用了

首先安裝騰訊雲sdk2.0的模塊,使用虛擬環境的話注意檢查一下有沒有裝上

pip install qcloudsms_py

准備必要參數

# 短信應用 SDK AppID
appid = 1400009099  # SDK AppID 以1400開頭
# 短信應用 SDK AppKey
appkey = "9ff91d87c2cd7cd0ea762f141975d1df37481d48700d70ac37470aefc60f9bad"
# 需要發送短信的手機號碼,看需求來,作為參數傳入下面的函數
phone_numbers = ["21212313123", "12345678902", "12345678903"] 
# 短信模板ID,需要在短信控制台中申請
template_id = 7839  # NOTE: 這里的模板 ID`7839`只是示例,真實的模板 ID 需要在短信控制台中申請
# 簽名
sms_sign = "騰訊雲"  # NOTE: 簽名參數使用的是`簽名內容`,而不是`簽名ID`。這里的簽名"騰訊雲"只是示例,真實的簽名需要在短信控制台中申請

單發短信

from qcloudsms_py import SmsSingleSender
from qcloudsms_py.httpclient import HTTPError
ssender = SmsSingleSender(appid, appkey)
params = ["5678","2"]  # 用來填進短信模板的坑,比如5678是驗證碼,2是失效時間
try:
    # phone_numbers是需要發送短信的手機號,按實際情況傳參即可
    result = ssender.send_with_param(86, phone_numbers[0],
      template_id, params, sign=sms_sign, extend="", ext="") 
except HTTPError as e:
  print(e)
except Exception as e:
  print(e)
print(result)

注意單發和群發的方法不一樣,具體可以查看官方文檔

在django項目中使用

我們可以把像sdk發送短信這樣的第三方功能放進libs里,把配置參數拉出來寫在libs的settings里,便於管理和擴展

settings.py

導入到發送短信的功能文件,里面寫配置參數

# settings.py
# 短信應用 SDK AppID
appid = 1400009099  # SDK AppID 以1400開頭
# 短信應用 SDK AppKey
appkey = "9ff91d87c2cd7cd0ea762f141975d1df37481d48700d70ac37470aefc60f9bad"
# 需要發送短信的手機號碼,看需求來,作為參數傳入下面的函數
phone_numbers = ["21212313123", "12345678902", "12345678903"] 
# 短信模板ID,需要在短信控制台中申請
template_id = 7839  # NOTE: 這里的模板 ID`7839`只是示例,真實的模板 ID 需要在短信控制台中申請
# 簽名
sms_sign = "騰訊雲"  # NOTE: 簽名參數使用的是`簽名內容`,而不是`簽名ID`。這里的簽名"騰訊雲"只是示例,真實的簽名需要在短信控制台中申請

send_sms.py

# send_sms.py 放功能代碼
from qcloudsms_py import SmsSingleSender
from qcloudsms_py.httpclient import HTTPError
# 導入騰訊雲的模塊
from luffyapi.utils.logging import log
# 導入日志模塊,短信發送失敗的時候紀錄
from . import settings
# 同級目錄導入配置參數

# 生成隨機4位驗證碼,在視圖中調用
def rand_code():
    import random
    rd_code = ''
    for i in range(4):
        rd_code += str(random.randint(0,9))
    return rd_code

# 單發短信功能
def send_sms(phone,code):
    ssender = SmsSingleSender(settings.appid, settings.appkey)
    params = [code,"3"]  # 當模板沒有參數時,`params = []`
    try:
        result = ssender.send_with_param(86, phone,
                                         settings.template_id, params, sign=settings.sms_sign, extend="", ext="")
        if result.get('result') == 0:
            return True
        else:
            return False
    except Exception as e:
        print(e)
        log.error(f'{phone}:短信發送失敗,錯誤為{str(e)}')

視圖函數中

class LoginView(ViewSet):
    # 發送短信驗證碼
    @action(methods=['GET'], detail=False)
    def send(self,request,*args,**kwargs):
        phone = request.query_params.get('phone')
        if not re.match('^1[3-9][0-9]{9}$',phone):
            return APIResponse(code=0,msg='手機號格式錯誤')
        code = send_sms.rand_code()
        result = send_sms.send_sms(phone,code)
        # 發送驗證碼
        # 驗證碼存進緩存,之后換成redis,緩存的key放在settings的const里
        cache.set(settings.PHONE_CACHE_KEY%phone,code,180)
        if result:
            return APIResponse(code=1,msg='發送成功')
        else:
            return APIResponse(code=0,msg='發送失敗')


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM