Python实现验证码发送
APP、⽹站注册账号,向⼿机下发验证码; 登录账户、异地登录时的安全提醒; 找回密码时的安全验证; ⽀付认证、身份校验、⼿机绑定等。本例采⽤阿里云短信验证
开通阿里云短信服务
登录控制台
登录阿里云后点击右上角的控制台,点击阿里云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 | from aliyunsdkcore.client import AcsClient |
定义ACCESS_KEY_ID和ACCESS_KEY_SECRET变量:
1 | ACCESS_KEY_ID = "********" #用户AccessKeyID 需要根据自己的账户修改,上面申请保存的 |
定义SMS调用阿里云发送类:
1 | class SMS: |
实例化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 | code = "{'code':%s}"%(randint(100000,999999)) |
调用SMS.py的sms对象的send方法发送验证码:
1 | res = sms.send('接收验证码的手机号',code) |
sms对象返回发送状态,因为返回的是字节流,使用utf-8解码:
1 | print(res.decode('utf-8')) |
sms.send方法返回一个字典,Message是发送状态,如果错误会返回错误信息:
1 | {'code':802881} |
错误返回:
1 | {"Message":"1848936invalid mobile number","RequestId":"7ADAE105-6D67-4A83-BF3E-3A65AE26E590","Code":"isv.MOBILE_NUMBER_ILLEGAL"} |
手机接到的验证码:
1 | 【异清轩博客管理系统】验证码为:802881,您正在注册成为平台会员,感谢您的支持! |