### 1.相關鏈接
阿里大于API文檔:[https://api.alidayu.com/docs/api.htm?spm=a3142.7629065.4.7.tg21p0&apiId=25450](https://api.alidayu.com/docs/api.htm?spm=a3142.7629065.4.7.tg21p0&apiId=25450)
短信服務:[https://dysms.console.aliyun.com/dysms.htm?spm=a3142.8039393.0.0.41b81fd2jo7ezh\#/overview](https://dysms.console.aliyun.com/dysms.htm?spm=a3142.8039393.0.0.41b81fd2jo7ezh#/overview)
接口:[https://help.aliyun.com/document\_detail/55491.html?spm=a2c4g.11186623.6.568.XFNNA9](https://help.aliyun.com/document_detail/55491.html?spm=a2c4g.11186623.6.568.XFNNA9)
### 2.阿里大于短信驗證碼介紹
* 阿里大于是一個通信平臺,通過這個平臺,中小企業開發者可以在最短的時間內實現短信驗證碼發送,短信服務提醒,語音驗證碼,語音服務通知,IVR及呼叫中心,碼號,后向流量,隱私保護相關的能力,實現互聯網電信化
* 官網:[https://www.alidayu.com/](https://www.alidayu.com/)
### 3.操作
## 發送短信接口\(SendSms\) {#h2--sendsms-1}
#### 步驟 1 創建阿里云賬號 {#h4--1-}
為了訪問短信服務,您需要有一個阿里云賬號。如果沒有,可首先按照如下步驟創建阿里云賬號:
1. 訪問阿里云[官方網站](https://www.aliyun.com/?spm=a2c4g.11186623.2.3.qcwY5l),單擊頁面上的 免費注冊 按鈕。
2. 按照屏幕提示完成注冊流程并進行實名認證,短信服務只支持實名認證用戶使用。為了更好地使用阿里云服務,建議盡快完成實名認證,否則部分阿里云服務將無法使用。具體實名認證流程,請參考[這里](https://help.aliyun.com/knowledge_detail/37171.html?spm=a2c4g.11186623.2.4.qcwY5l)。
#### 步驟 2 獲取阿里云訪問密鑰 {#h4--2-}
為了使用短信發送API-Python SDK,您必須申請阿里云的訪問密鑰。
阿里云訪問秘鑰是阿里云為用戶使用 API(非控制臺)來訪問其云資源設計的“安全口令”。您可以用它來簽名 API 請求內容以通過服務端的安全驗證。
該訪問秘鑰成對(AccessKeyId 與 AccessKeySecret)生成和使用。每個阿里云用戶可以創建多對訪問秘鑰,且可隨時啟用(Active)、禁用(Inactive)或者刪除已經生成的訪問秘鑰對。
您可以通過阿里云控制臺的[秘鑰管理頁面](https://ak-console.aliyun.com/?spm=a2c4g.11186623.2.5.qcwY5l#/accesskey)創建、管理所有的訪問秘鑰對,且保證它處于“啟用”狀態。由于訪問秘鑰是阿里云對 API 請求進行安全驗證的關鍵因子,請妥善保管你的訪問秘鑰。如果某些秘鑰對出現泄漏風險,建議及時刪除該秘鑰對并生成新的替代秘鑰對。
#### 步驟 3 在控制臺完成模板與簽名的申請,獲得調用接口必備的參數 {#h4--3-}
**短信簽名**
根據用戶屬性來創建符合自身屬性的簽名信息。企業用戶需要上傳相關企業資質證明,個人用戶需要上傳證明個人身份的證明。
_短信簽名需要審核通過后才可以使用。_
**短信模板**
短信模板,即具體發送的短信內容。
短信模板可以支持驗證碼、短信通知、推廣短信、國際/港澳臺消息四種模式。驗證碼和短信通知,通過變量替換實現個性短信定制。推廣短信不支持在模板中添加變量。國際/港澳臺消息只能使用國際/港澳臺短信模版發送短信。
_短信模板需要審核通過后才可以使用。_
**為了成功發送一條短信通知,您至少需要完成以下步驟**
一、在控制臺完成短信簽名與短信模板的申請,獲得調用接口必備的參數
在“短信簽名”頁面完成簽名的申請,獲得短信簽名的字符串[簽名申請手冊](https://help.aliyun.com/document_detail/55327.html?spm=a2c4g.11186623.2.6.qcwY5l)
在“短信模板”頁面完成模板的申請,獲得模板ID。[模板申請手冊](https://help.aliyun.com/document_detail/55330.html?spm=a2c4g.11186623.2.7.qcwY5l)
#### 入參列表 {#h4-u5165u53C2u5217u8868}
| 參數名稱 | 參數類型 | 必填與否 | 樣例取值 | 參數說明 |
| :--- | :--- | :--- | :--- | :--- |
| PhoneNumbers | String | 必須 | 15000000000 | 短信接收號碼。支持以逗號分隔的形式進行批量調用,批量上限為1000個手機號碼,批量調用相對于單條調用及時性稍有延遲,驗證碼類型的短信推薦使用單條調用的方式,發送國際/港澳臺消息時,接收號碼格式為00+國際區號+號碼,如“0085200000000” |
| SignName | String | 必須 | 云通信 | 短信簽名 |
| TemplateCode | String | 必須 | SMS\_0000 | 短信模板ID,發送國際/港澳臺消息時,請使用國際/港澳臺短信模版 |
| TemplateParam | String | 可選 | {“code”:”1234”,”product”:”ytx”} | 短信模板變量替換JSON串,友情提示:如果JSON中需要帶換行符,請參照標準的JSON協議對換行符的要求,比如短信內容中包含\r\n的情況在JSON中需要表示成\r\n,否則會導致JSON在服務端解析失敗 |
| OutId | String | 可選 | abcdefgh | 外部流水擴展字段 |
#### 出參列表 {#h4-u51FAu53C2u5217u8868}
| 出參名稱 | 出參類型 | 樣例取值 | 參數說明 |
| :--- | :--- | :--- | :--- |
| RequestId | String | 8906582E-6722 | 請求ID |
| Code | String | OK | 狀態碼-返回OK代表請求成功,其他錯誤碼詳見錯誤碼列表 |
| Message | String | 請求成功 | 狀態碼的描述 |
| BizId | String | 134523^4351232 | 發送回執ID,可根據該ID查詢具體的發送狀態 |
#### 技術對接步驟 {#h4-u6280u672Fu5BF9u63A5u6B65u9AA4}
* python版本要求:python 2.6+, python3.x
* SDK下載:[下載地址](https://help.aliyun.com/document_detail/55359.html)
* 執行:
* 安裝依賴:進入根目錄執行命令: python setup.py install \#如果為python3,請執行:python3 setup.py install
* 修改信息:從阿里云控制臺上獲取ACCESS\_KEY\_ID與ACCESS\_KEY\_SECRET,并填入文件const.py中
* 運行程序:python demo\_sms\_send.py \#如果為python3,請執行python3 demo\_sms\_send.py
* `注意:您還需要在控制臺上申請短信模板,并將相關信息填入至文件demo_sms_send.py中`
#### 錯誤碼列表 {#h4-u9519u8BEFu7801u5217u8868}
| Code | 描述 |
| :--- | :--- |
| OK | 請求成功 |
| isp.RAM\_PERMISSION\_DENY | RAM權限DENY |
| isv.OUT\_OF\_SERVICE | 業務停機 |
| isv.PRODUCT\_UN\_SUBSCRIPT | 未開通云通信產品的阿里云客戶 |
| isv.PRODUCT\_UNSUBSCRIBE | 產品未開通 |
| isv.ACCOUNT\_NOT\_EXISTS | 賬戶不存在 |
| isv.ACCOUNT\_ABNORMAL | 賬戶異常 |
| isv.SMS\_TEMPLATE\_ILLEGAL | 短信模板不合法 |
| isv.SMS\_SIGNATURE\_ILLEGAL | 短信簽名不合法 |
| isv.INVALID\_PARAMETERS | 參數異常 |
| isp.SYSTEM\_ERROR | 系統錯誤 |
| isv.MOBILE\_NUMBER\_ILLEGAL | 非法手機號 |
| isv.MOBILE\_COUNT\_OVER\_LIMIT | 手機號碼數量超過限制 |
| isv.TEMPLATE\_MISSING\_PARAMETERS | 模板缺少變量 |
| isv.BUSINESS\_LIMIT\_CONTROL | 業務限流 |
| isv.INVALID\_JSON\_PARAM | JSON參數不合法,只接受字符串值 |
| isv.BLACK\_KEY\_CONTROL\_LIMIT | 黑名單管控 |
| isv.PARAM\_LENGTH\_LIMIT | 參數超出長度限制 |
| isv.PARAM\_NOT\_SUPPORT\_URL | 不支持URL |
| isv.AMOUNT\_NOT\_ENOUGH | 賬戶余額不足 |
**注:查詢所有錯誤碼及解決辦法請點擊**[短信接口調用錯誤碼](https://help.aliyun.com/knowledge_detail/57717.html?spm=5176.doc55322.6.583.l6PFQ7)
#### 時間戳格式: {#h4--}
格式為:yyyy-MM-dd’T’HH:mm:ss’Z’;時區為:GMT
### 4.實例
下載zip文件后,打開后改寫一下demo\_sms\_send.py
```
# -*- coding: utf-8 -*-
import sys
from utils.sms.aliyunsdkdysmsapi.request.v20170525 import SendSmsRequest
from utils.sms.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
from utils.sms 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
def send_api(phone=None,code=None):
try:
__business_id = uuid.uuid1()
#print(__business_id)
params = r'{"code":"%s"}' % code
# print(params)
#params = u'{"name":"wqb","code":"12345678","address":"bz","phone":"13000000000"}'
response = send_sms(__business_id, phone, const.SIGN_NAME,const.TEMPLATE_CODE, params).decode('utf-8')
print(response,phone,code)
response = json.loads(response)
if response['Code'] == 'OK':
return True
else:
return False
except:
return False
```
短信接口視圖
```
@bp.route('/sms_captcha/')
def sms_captcha():
result = demo_sms_send.send_api("18892332606","18892332606")
if result:
return "發送成功"
else:
return "發送失敗"
```
- 介紹
- 1.Flask視圖和URL
- 01 虛擬環境
- 02 URL組成部分詳解
- 03 web服務器+應用服務器+web應用框架
- 04 flask程序詳解
- 05 debug模式詳解
- 06 配置文件兩種方式詳解
- 07 URL中兩種方式傳參
- 08 url_for使用詳解
- 09 自定義URL轉換器
- 10 必會的小細節知識
- 11 重定向詳解
- 12-13 視圖函數Response返回值詳解
- 2.Jinja2模版
- 14 Jinja2模板介紹
- 15 模板傳參及其技巧
- 16 模板中使用url_for
- 17 過濾器基本使用
- 18 default過濾器詳解
- 19 常用過濾器講解
- 20 自定義過濾器
- 21 自定義時間處理過濾器案例
- 22 if
- 23 for循環語句詳解
- 24 九九乘法表
- 25 宏的概念和基本使用
- 26 宏的導入和注意事項
- 27 include標簽使用詳解
- 28 set和with語句以及模板中定義變量
- 29 加載靜態文件
- 30 模板繼承詳解
- 31-36 豆瓣微信小程序案例
- 3.Flask視圖高級
- 37 add_url_rule和app.route原理剖析
- 38 標準類視圖及其使用場景
- 39 基于調度方法的類視圖
- 40 類視圖中使用裝飾器
- 41 藍圖的基本使用
- 42 藍圖中模版文件尋找規則
- 43 藍圖中靜態文件尋找規則
- 44 url_for反轉藍圖注意事項
- 45 子域名實現詳解
- 4.Flask數據庫
- 46 安裝MySQL以及注意事項
- 47 SQLAlchemy連接數據庫
- 48 ORM介紹
- 49 定義ORM模型并將其映射到數據庫中
- 50 SQLAlchemy對數據的增刪改查操作
- 51 SQLAlchemy屬性常用數據類型詳解
- 52 Column常用參數
- 53 query函數可查詢的數據
- 54 filter方法常用過濾條件
- 55 外鍵及其四種約束講解
- 56 ORM層外鍵和一對多關系
- 57 一對一關系實現
- 58 多對多關系實現
- 59 ORM層面刪除數據注意事項
- 60 relationship方法中的cascade參數詳解(1)
- 61 relationship方法中的cascade參數詳解(2)
- 62 三種排序方式詳解
- 63 limit、offset以及切片操作
- 64 數據查詢懶加載技術
- 65 group_by和having子句
- 66 join實現復雜查詢
- 67 subquery實現復雜查詢
- 68 Flask-SQLAlchemy的使用詳解
- 69 alembic數據庫遷移工具基本使用
- 70 alembic常用命令和經典錯誤解決辦法
- 71 Flask-SQLAlchemy下alembic的配置
- 72 Flask-Script詳細講解
- 73 項目結構重構
- 74 Flask-Migrate詳細講解
- 75 Flask-Migrate注意事項
- 5.Flask知識點補充
- WTForms
- 76 WTForms表單驗證基本使用
- 77 WTForms常用驗證器
- 78 自定義表單驗證器
- 79 使用WTForms渲染模版
- 上傳文件
- 80 上傳文件以及訪問上傳的文件
- 81 使用flask_wtf1驗證上傳的文件
- Flask Cookie
- 82 cookie的基本概念
- 83 Flask設置和刪除cookie|Flask設置cookie過期時間|設置Cookie的有效域名
- Flask Session
- 86 session的基本概念
- 87 Flask操作session
- CSRF攻擊與防御
- 88 CSRF攻擊原理
- 89 實戰項目-中國工商銀行注冊功能完成
- 90 實戰項目-中國工商銀行登錄和轉賬實現
- 91 實戰項目-病毒網站使用CSRF漏洞轉賬
- 92 CSRF防御原理
- 93 Flask中CSRF防御的方法與原理
- 94 AJAX處理CSRF漏洞
- Flask 上下文
- 95 Local線程隔離對象
- 96 app上下文和request上下文詳解
- 97 線程隔離的g對象使用詳解
- Flask鉤子函數
- 98 before_request鉤子函數詳解
- 99 context_processor鉤子函數詳解
- 100 errorhandler鉤子函數詳解
- Flask信號
- 101 信號機制及其使用場景詳解
- 102 Flask內置的信號講解
- Flask Restful
- 103 Restful API規范介紹
- 104 Flask-Restful插件的基本使用
- 105 Flask-Restful參數驗證
- 106 Flask-Restful標準化返回參數(1)
- 107 Flask-Restful標準化返回參數(2)
- 108 Flask-Restful細節強化
- 6.memcached緩存系統
- 109 memcached介紹
- 110 memcached的安裝和參數詳解
- 111 telnet操作memcached
- 112 Python操作memcached
- 113 memcached的安全機制
- 7.Redis鍵值對數據庫
- 114 Redis概述和使用場景介紹
- 115 Redis的安裝以及客戶端連接
- 116 Redis的字符串以及過期時間操作
- 117 Redis的列表操作
- 118 Redis的集合操作
- 119 Redis的哈希操作
- 120 Redis的事務操作
- 121 Redis的發布和訂閱操作
- 122 RDB和AOF的兩種數據持久化機制
- 123 Redis設置連接密碼
- 124 其他機器連接本機redis
- 125 Python操作redis
- 8.Flask企業級論壇實戰項目
- Flask項目實戰
- 126.實戰項目介紹
- 127.項目結構搭建
- 128.cms用戶模型定義
- 129.cms后臺登錄界面完成
- 130.cms后臺登錄功能完成
- 131.cms后臺登錄限制
- 132.cms后臺模版渲染完成
- 133.cms用戶名渲染和注銷功能實現
- 134.cms模版抽離和個人信息頁面完成
- 135.cms登錄頁面CSRF保護
- 136.cms后臺修改密碼界面布局完成
- 137.cms后臺修改密碼ajax功能完成
- 138.cms后臺密碼修改服務器邏輯完成
- 139.優化json數據的返回
- 140.sweetalert提示框用法講解
- 141.sweetalert優化修改密碼結果反饋
- 142.修改郵箱界面完成
- 143.Flask-Mail的使用以及郵箱配置
- 144.發送郵箱驗證碼功能完成
- 145.修改郵箱功能完成
- 146.二進制及其相關運算
- 147.權限和角色模型定義
- 148.封裝權限判斷功能
- 149.客戶端權限驗證功能完成
- 150.服務端權限驗證功能完成
- 151.前臺用戶模型創建(1)
- 152.前臺用戶模型創建(2)
- 153.注冊界面完成
- 154.圖形驗證碼生成技術詳解
- 155.點擊更換圖形驗證碼
- 156.發送短信驗證碼
- 157注冊頁面對接短信驗證碼接口
- 158.短信驗證碼接口加密和js代碼混淆
- 159.緩存驗證碼
- 160.注冊功能前端邏輯代碼完成
- 161.注冊功能后臺邏輯代碼完成
- 162.注冊完成跳轉回上一個頁面
- 163.登錄界面完成
- 164.登錄功能完成
- 165.首頁導航條實現和代碼抽離
- 166.首頁輪播圖實現
- 167.cms輪播圖管理頁面布局
- 168.cms添加輪播圖的模態對話框制作
- 169.cms添加輪播圖后臺邏輯代碼完成
- 170.cms添加輪播圖前臺邏輯代碼完成
- 171.cms編輯和刪除輪播圖功能完成
- 172.七牛云存儲介紹
- 173.七牛JS和Python的SDK使用
- 174.輪播圖上傳圖片功能完成
- 175.首頁動態獲取輪播圖數據
- 176.板塊管理(1)
- 177.板塊管理(2)
- 178.UEditor編輯器集成以及配置上傳文件到七牛
- 179.發布帖子后臺邏輯完成
- 180.發布帖子界面布局完成
- 181.發布帖子前端邏輯代碼完成
- 182.首頁帖子列表布局完成
- 183.帖子分頁技術實現
- 184.帖子板塊過濾顯示
- 185.帖子詳情頁布局
- 186.評論布局和功能實現(1)
- 187.評論布局和功能實現(2)
- 188.帖子加精和取消加精功能完成
- 189.帖子按照發布時間和評論數量等排序
- 190.celery實現異步任務
- 191.Flask+Celery實現郵件和短信異步發送
- ajax技術
- 192.Flask和Ajax技術
- 9.Python web開發核心技術
- 部署
- 193.開發機上的準備工作
- 194.服務器安裝Python和虛擬環境
- 195.服務器安裝ssh、git以及mysql
- 196.生產環境下項目的配置
- 197.uWSGI部署項目
- 198.uWSGI配置文件
- 199.nginx+uwsgi部署項目
- 200.supervisor管理uwsgi進程