APP、⽹站注册账号,向⼿机下发验证码; 登录账户、异地登录时的安全提醒; 找回密码时的安全验证; ⽀付认证、身份校验、⼿机绑定等。本例采⽤阿里云短信验证

开通阿里云短信服务

登录控制台

阿里云:https://www.aliyun.com/

登录阿里云后点击右上角的控制台,点击阿里云logo旁边的菜单按钮,选择””产品与服务”,在搜索框输入”短信”,在”云通信”列表中点击”短信服务”进入短信服务控制台

开通短信服务

首次进入短信服务阿里云会提示你开通短信服务,短信服务按量收费,你不用就不会收费。

申请签名

个人用户只能申请一个签名,审核时间过长(2小时左右),我没法做演示。

进入控制台后选择”国内消息”,之后选择签名管理,点击添加签名按照要求填写内容即可,签名名称要是有个准确的应用名称,不能出现测试之类的词汇。

审核通过的签名

申请模板

模板是你短信内容的格式,格式为:【签名名称】模板内容

进入控制台后选择”模板管理”,之后点击”添加模板”,按照填写要求填写模板即可,”${code}”是有个验证码变量,”code”是变量名,调用的使用要对应你得模板变量名。

创建AccessKey

AccessKey用于调用阿里云短信服务器的密钥

点击你的用户头像,选择”AccessKey管理”

进入后如果你没有RAM 子用户,阿里云会询问你是否创建RAM 子用户,我也搞不懂RAM 子用户是什么东西,反正我不用,选择”继续使用AccessKey”

创建删除AccessKey属于敏感操作,所以要验证用户手机号,点击”创建AccessKey”,验证手机号后即可创建成功,这时候会弹出AccesKey的ACCESS_KEY_ID和ACCESS_KEY_SECRET,把它们复制下来,调用的时候需要用到。(保护好自己AccessKey)

Python调用

充值阿里云

如果你的阿里云账户没钱的先充一块钱用于支付验证码费用,好像是0.045一条,在控制台点击费用即可充值阿里云余额。

安装阿里云SDK核心库

如果您使用的是Python 3.x,执行以下命令按照阿里云SDK核心库:

1
pip3 install aliyun-python-sdk-core-v3 -i https://mirrors.aliyun.com/pypi/simple/

我得电脑安装了Python2.x和Python3.x,所以使用pip3安装。

创建Client实例

在创建Client实例时,您需要获取 AccessKey ID和AccessKey Secret,就是上面创建的AccessKey。

新建SMS.py文件,导入阿里云SDK:

1
2
from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.request import CommonRequest

定义ACCESS_KEY_ID和ACCESS_KEY_SECRET变量:

1
2
ACCESS_KEY_ID = "********"  #用户AccessKeyID  需要根据自己的账户修改,上面申请保存的
ACCESS_KEY_SECRET = "************" #Access Key Secret 需要根据自己的账户修改,上面申请保存的

定义SMS调用阿里云发送类:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class SMS:
def __init__(self, signName, templateCode):
self.signName = signName #签名
self.templateCode = templateCode #模板code
self.client = client = AcsClient(ACCESS_KEY_ID, ACCESS_KEY_SECRET, 'cn-hangzhou')

def send(self,phone_numbers,template_param):
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('SendSms')

request.add_query_param('RegionId', "cn-hangzhou")
request.add_query_param('PhoneNumbers', phone_numbers)
request.add_query_param('SignName', self.signName)
request.add_query_param('TemplateCode', self.templateCode)
request.add_query_param('TemplateParam', template_param)
response = self.client.do_action_with_exception(request)
return response

实例化SMS类:

1
sms = SMS("签名名称", "模版CODE")

调用sms对象

新建test.py文件,导入SMS.py的sms对象:

1
from SMS import sms

导入随机数生成模块,用于生成验证码:

1
from random import randint

使用rendint模块生成100000-999999的随机数验证码,阿里云规定调用方式为有个字典,键名为模块变量名,值为随机数验证码,code是申请的模块变量名:

1
2
code = "{'code':%s}"%(randint(100000,999999))
print(code)

调用SMS.py的sms对象的send方法发送验证码:

1
res = sms.send('接收验证码的手机号',code)

sms对象返回发送状态,因为返回的是字节流,使用utf-8解码:

1
print(res.decode('utf-8'))

sms.send方法返回一个字典,Message是发送状态,如果错误会返回错误信息:

1
2
{'code':802881}
{"Message":"OK","RequestId":"5FDA1D80-DF1C-43C2-AEEC-1E6138C913B7","BizId":"159702503082260359^0","Code":"OK"}

错误返回:

1
{"Message":"1848936invalid mobile number","RequestId":"7ADAE105-6D67-4A83-BF3E-3A65AE26E590","Code":"isv.MOBILE_NUMBER_ILLEGAL"}

手机接到的验证码:

1
【异清轩博客管理系统】验证码为:802881,您正在注册成为平台会员,感谢您的支持!