短信驗證碼
短信驗證碼服務商有很多。這里我們選擇一個阿里通信來作為短信服務平台。通過這個平台,中小企業及開發者可以在最短的時間內實現短信驗證碼發送、短信服務提醒、語音驗證碼、語音服務通知、IVR及呼叫中心、碼號、后向流量、隱私保護相關的能力,實現互聯網電信化。
官方文檔:
https://help.aliyun.com/document_detail/59210.html
登錄阿里通信:
- 鏈接:https://www.aliyun.com/product/sms
- 然后用淘寶賬號進行登錄。
- 登錄成功后,進入到這個界面:https://dysms.console.aliyun.com/dysms.htm#/overview
獲取AccessKey和ACCESS_KEY_SECRET:
在右上角的頭像下,選擇AccessKey:
創建應用:
創建驗證碼:
創建簽名:
-
創建驗證碼分為兩大步,先是添加簽名,然后再添加短信模版。首先添加簽名:
-
然后來到添加簽名的頁面:
-
簽名創建后,需要幾個小時的審核。
添加短信模板:
-
點擊添加模板:
-
填入模板相關的參數:
Python發送短信驗證碼:
- 在這里下載
Python
的SDK
。 - 在這里查看文檔。
- 下載完
SDK
后,然后進入到目錄中,再進入到你的django
開發的虛擬環境中,然后執行命令python setup.py install
即可安裝SDK
。 -
在下載的
SDK
文件中,有一個test_sms_send.py
的文件,修改里面相關的參數,然后再修改const.py
中的AccessKey
和SecretKey
為之前獲取的參數。運行這個文件就可以發送成功了。# const.py文件 # ACCESS_KEY_ID/ACCESS_KEY_SECRET 根據實際申請的賬號信息進行替換 ACCESS_KEY_ID = "你的用戶的AccessKey" ACCESS_KEY_SECRET = "你的用戶的Secretkey"
然后修改
test_sms_send.py
的代碼:import sys from aliyunsdkdysmsapi.request.v20170525 import SendSmsRequest from aliyunsdkdysmsapi.request.v20170525 import QuerySendDetailsRequest from aliyunsdkcore.client import AcsClient import uuid from aliyunsdkcore.profile import region_provider from aliyunsdkcore.http import method_type as MT from aliyunsdkcore.http import format_type as FT import const import json """ 短信業務調用接口示例,版本號:v20170525 Created on 2017-06-12 """ # 注意:不要更改 REGION = "cn-hangzhou" PRODUCT_NAME = "Dysmsapi" DOMAIN = "dysmsapi.aliyuncs.com" acs_client = AcsClient(const.ACCESS_KEY_ID, const.ACCESS_KEY_SECRET, REGION) region_provider.add_endpoint(PRODUCT_NAME, REGION, DOMAIN) def send_sms(business_id, phone_numbers, sign_name, template_code, template_param=None): smsRequest = SendSmsRequest.SendSmsRequest() # 申請的短信模板編碼,必填 smsRequest.set_TemplateCode(template_code) # 短信模板變量參數 if template_param is not None: smsRequest.set_TemplateParam(template_param) # 設置業務請求流水號,必填。 smsRequest.set_OutId(business_id) # 短信簽名 smsRequest.set_SignName(sign_name) # 數據提交方式 # smsRequest.set_method(MT.POST) # 數據提交格式 # smsRequest.set_accept_format(FT.JSON) # 短信發送的號碼列表,必填。 smsRequest.set_PhoneNumbers(phone_numbers) # 調用短信發送接口,返回json smsResponse = acs_client.do_action_with_exception(smsRequest) # TODO 業務處理 return smsResponse if __name__ == '__main__': __business_id = uuid.uuid1() #print(__business_id) params = { 'code': 1234 } #params = u'{"name":"wqb","code":"12345678","address":"bz","phone":"13000000000"}' print(send_sms(__business_id, "18515287309", "小飯桌應用", "SMS_68465012", json.dumps(params)