### 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进程