Python2-Django配置阿里雲短信


1、短信發送開發指南地址:https://help.aliyun.com/document_detail/55491.html?spm=a2c4g.11186623.6.568.l5zTwH

2、SDK和Demo下載地址:https://help.aliyun.com/document_detail/55359.html?spm=a2c4g.11186623.4.3.IvyHwo

3、總結前兩步:開發前先到開發指南按步驟去做一系列前期工作,即:

(1)到阿里雲去申請一個accessKey Id和Access Key Secret

(2)在短信服務平台申請短信簽名和短信模板

(3)下載對應的Python的SDK和Demo

4、開發工作:

(1)將下載到的SDK和DEMO解壓后放到項目相應的地方

(2)運行cmd,cd到上訴的解壓文件夾中運行 python setup.py install命令

(3)安裝依賴到虛擬環境:

  ① pip install aliyuncli

  ② pip install -Iv aliyun-python-sdk-cms==5.0.0

  ③ aliyuncli configure(配置默認信息):   

Aliyun Access Key ID [None]: 你申請的Access Key Id
Aliyun Access Key Secret [None]: 你申請的Access Key Id 對應的 Access Key Secret
Default Region Id [None]: cn-hangzhou (區域,就填阿里雲默認給的就好)
Default output format [None]: json (默認輸出格式,按自己的需求來,我選的是json)

  ④ 跑完上面的步驟可能已經有下面兩個依賴的,不過跑跑也無妨:

    pip install aliyun-python-sdk-core

    pip install aliyun-python-sdk-cms

  ⑤ pip install top

5、貼一下接口代碼,其實和給的demo幾乎一樣

import sysfrom ali_sms.aliyunsdkdysmsapi.request.v20170525 import SendSmsRequest
from ali_sms.aliyunsdkdysmsapi.request.v20170525 import QuerySendDetailsRequest
from aliyunsdkcore.client import AcsClientfrom aliyunsdkcore.profile import region_providerfrom aliyunsdkcore.http import method_type as MT
from aliyunsdkcore.http import format_type as FT

"""
短信業務接口  吾延 2018-07-13
"""# 設置AccessKeyId和AccessKeySecret
acs_client = AcsClient('你申請的access key id', '你申請的access key id 對應的secret','cn-hangzhou')
region_provider.add_endpoint('Dysmsapi', 'cn-hangzhou', 'dysmsapi.aliyuncs.com')

def send_sms(business_id, phone_numbers, sign_name, template_code, template_param=None):
    """"
    發送短信
    請求參數:{
         business_id: 阿里雲流水號,可用於查詢
         phone_numbers: 要發送的電話號碼列表,多個或一個
         sign_name: 短信簽名名稱
         template_code: 短信模板編碼
         template_param: 模板參數(驗證碼 或 其他在阿里雲申請時設置的短信模板參數)
     }
   返回:{
    {
        Message: 信息,
        RequestId: 請求id,
        Code: 短信發送狀態回執碼(查詢鏈接:https://help.aliyun.com/document_detail/55323.html?spm=a2c4g.11174283.4.9.fkf6vH )
   }
    """
    try:
        reload(sys)
        sys.setdefaultencoding('utf8')
    except Exception as err:
        log.exception(err)
        return False
    sms_request = SendSmsRequest.SendSmsRequest()
    sms_request.set_TemplateCode(template_code)
    if template_param is not None:
        sms_request.set_TemplateParam(template_param)
    sms_request.set_OutId(business_id)
    sms_request.set_SignName(sign_name)
    sms_request.set_PhoneNumbers(phone_numbers)
    sms_response = acs_client.do_action_with_exception(sms_request)
    # print sms_response
    return sms_response


def query_send_detail(biz_id, phone_number, page_size, current_page, send_date):
    """"
    短信詳情查詢
    請求參數{
        biz_id: 流水號
        phone_number: 手機號碼
        page_size: 每頁大小
        current_page: 當前頁
        send_date : 發送日期(30天內的記錄查詢)
    }
    返回參數{
        TotalCount
        Message
        RequestId
        SmsSendDetailDTOs
        Code
    }
    """
    try:
        reload(sys)
        sys.setdefaultencoding('utf8')
    except Exception as err:
        log.exception(err)
        return False
    query_request = QuerySendDetailsRequest.QuerySendDetailsRequest()
    query_request.set_PhoneNumber(phone_number)
    query_request.set_BizId(biz_id)
    query_request.set_SendDate(send_date)
    query_request.set_CurrentPage(current_page)
    query_request.set_PageSize(page_size)
    # 數據提交方式
    # queryRequest.set_method(MT.POST)
    # 數據提交格式
    # queryRequest.set_accept_format(FT.JSON)
    # 返回json數據
    query_response = acs_client.do_action_with_exception(query_request)
    # TODO 業務處理
    # print 'query_response'+query_response
    return query_response

6、調用接口,也直接貼代碼了(我的項目返回的都是json數據,看個人開發需要)
  

  

 # 調用生成驗證碼方法
        business_id = uuid.uuid1()  # 產生阿里的流水號,必填,用於短信詳情的查詢
        verify = str_utils.random_number_verify(5) 生成隨機驗證碼函數
        params = "{\"code\": " + verify + "}"
        res = eval(sms_utils.send_sms(business_id, mobile_no, '你申請的簽名','你申請的模板', params))  
        if res['Code'] == 'OK':
            create_time = time.time()
            info = {'verify': verify, 'phone': mobile_no, 'create_time': create_time}
            set_session(request=request, s_key=sms_verify, s_info=info) # set_session是自己寫的一個方法,根據項目需求保存到session中,當然建個表來保存就更好了
            return Response({'code': constants.RESULT_SUCCESS, 'message': u'生成成功,請查收!'})
        elif res['Code'] == 'isv.BUSINESS_LIMIT_CONTROL':
            return Response({'code': constants.RESULT_FAIL, 'message': u'次數受限!'})
        else:
            return Response({'code': constants.RESULT_FAIL, 'message': u'該號碼受限,換個號碼試試!'})

至此,配置一個阿里大於短信獲取驗證碼的接口就全部完成了


免責聲明!

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



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