一.阿里雲短信服務流程
1.進入阿里雲官網並登陸
2.進入短信服務界面,購買相應的短信套餐
關於短信服務可以查看幫助文檔:
3.下載安裝python 核心SDK庫
其中sdk庫有兩個版本,建議安裝最新版本。
舊版:
pip install aliyun-python-sdk-core
新版:
pip install aliyun-python-sdk-core-v3
4.創建簽名
5.創建 AccessKey
想要調用阿里雲的api必須要有自己的accesskey,這個是調用接口時候的必填參數。
訪問密鑰AccessKey(AK)相當於登錄密碼,只是使用場景不同。AccessKey用於程序方式調用短信服務API,而登錄密碼用於登錄控制台。
AccessKey包括AccessKeyId和AccessKeySecret。
AccessKeyId用於標識用戶。
AccessKeySecret是用來驗證用戶的密鑰。AccessKeySecret必須保密。
6.找到相應的短信接口的SDK的python版本
Demo的代碼如下:
#!/usr/bin/env python #coding=utf-8 from aliyunsdkcore.client import AcsClient from aliyunsdkcore.request import CommonRequest client = AcsClient('<accessKeyId>', '<accessSecret>', 'cn-hangzhou') request = CommonRequest() request.set_accept_format('json') request.set_domain('dysmsapi.aliyuncs.com') request.set_method('POST') request.set_protocol_type('https') # https | http request.set_version('2017-05-25') request.set_action_name('QuerySendDetails') request.add_query_param('RegionId', "cn-hangzhou") response = client.do_action(request) # python2: print(response) print(str(response, encoding = 'utf-8'))
二.短信接口代碼
1.通過普通程序讓demo可以讓手機收到短信驗證碼
這時候需要先改為自己的demo能讓自己的手機號接收到短信:
#!/usr/bin/env python # coding=utf-8 from aliyunsdkcore.client import AcsClient from aliyunsdkcore.request import CommonRequest import json def send_sms(template, phone): client = AcsClient('我的AccessKey ID', '我的Access Key Secret', 'default') request = CommonRequest() request.set_accept_format('json') request.set_domain('dysmsapi.aliyuncs.com') request.set_method('POST') request.set_protocol_type('http') # https | http request.set_version('2017-05-25') # set_action_name 這個是選擇你調用的接口的名稱,如:SendSms,SendBatchSms等 request.set_action_name('SendSms') # request.set_action_name('QuerySendDetails') # 這個參數也是固定的 request.add_query_param('RegionId', "default") # 98A66994-3DF4-4FA5-A33F-CCB36EB599D0 # request.add_query_param('RegionId', "cn-hangzhou") request.add_query_param('PhoneNumbers', phone) # 發給誰 request.add_query_param('SignName', "簽名") # 簽名 request.add_query_param('TemplateCode', "短信模板編號") # 模板編號 request.add_query_param('TemplateParam', f"{template}") # 發送驗證碼內容 response = client.do_action_with_exception(request) return response # response = client.do_action(request) # # python2: print(response) # print(str(response, encoding='utf-8')) if __name__ == '__main__': template = { 'code': '556634', } res = send_sms(template, phone=我的手機號) print(str(res, encoding='utf-8')) res_dict = json.loads(res) if res_dict.get('Message') == 'OK' and res_dict.get('Code') == 'OK': print("成功啦") else: print("失敗啦")
2.通過接口的方式請求到短信驗證碼
(1)django框架下的短信接口demo
路由url:/api/user/sms_code/
視圖:
寫一個post方法的接口:
然后在各種邏輯判斷成功后產生驗證碼,返回短信驗證發送結果
下面是相關代碼段:
# 生成隨機的短信驗證碼 code = "%06d" % random.randint(0, 999999) template = { 'code': code, } # 第三方短信接口返回成功的一個判斷,res為返回結果 res = send_sms(template, phone=mobile_phone) res_dict = json.loads(res) if res_dict.get('Message') == 'OK' and res_dict.get('Code') == 'OK':
將sdk修改為一個公共的調用函數:
from aliyunsdkcore.client import AcsClient from aliyunsdkcore.request import CommonRequest def send_sms(template, phone): client = AcsClient('AccessKey ID', 'Access Key Secret', 'default') # 短信里面的 我的AccessKey ID 我的Access Key Secret request = CommonRequest() request.set_accept_format('json') request.set_domain('dysmsapi.aliyuncs.com') request.set_method('POST') request.set_protocol_type('http') # https | http 注意當項目發布到服務器上需要修改協議 request.set_version('2017-05-25') # set_action_name 這個是選擇你調用的接口的名稱,如:SendSms,SendBatchSms等 request.set_action_name('SendSms') # request.set_action_name('QuerySendDetails') # 這個參數也是固定的 request.add_query_param('RegionId', "default") # 98A66994-3DF4-4FA5-A33F-CCB36EB599D0 # request.add_query_param('RegionId', "cn-hangzhou") request.add_query_param('PhoneNumbers', phone) # 發給誰 request.add_query_param('SignName', "我的簽名") # 簽名 request.add_query_param('TemplateCode', "我的短信模板編號") # 模板編號 request.add_query_param('TemplateParam', f"{template}") # 發送驗證碼內容 response = client.do_action_with_exception(request) return response
最后通過post方法及url進行驗證碼請求。這樣手機可以獲取短信。