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'該號碼受限,換個號碼試試!'})
至此,配置一個阿里大於短信獲取驗證碼的接口就全部完成了