今天和大家分享如何实现短信服务,以腾讯云服务为例
目录
一、准备工作
腾讯云短信服务会发放免费的个人认证短信和赠送短信总共200条,但时间很短,方便学习的同学使用。
随后进行进行我们的短信配置,选择国内短信。
根据快速入门的标准完成签名管理、正文模板管理、群发短信这几个模块的配置。详细教程参考对应文档操作即可,我这里也尝试了好几次,有的是签名不规范,建议签名类型选择公众号能快速通过。
所有的审核都通过了之后,我们的准备工作也就做好了,可以选择测试我们的短信服务,这里就不细说了,感兴趣的朋友可以创建群发短信任务尝试。如下图:
二、短信服务接口开发
2.1 服务配置
这里我使用的是Django框架对接口进行开发,并且运用了腾讯云开源的第三方库qcloudsms_py。
配置代码如下:
import ssl
import random
ssl._create_default_https_context = ssl._create_unverified_context
from qcloudsms_py import SmsSingleSender
from qcloudsms_py.httpclient import HTTPError
import random
import smtplib
import string
from email.header import Header
from email.mime.text import MIMEText
from django.core.cache import cache
# 获取云短信应用的appid和appkey
SDKAppID = '1400681577'
AppKey = 'f54b46f0038864a4c842026e9227f74c'
#签名
sms_sign = '程序员九仙公众号'
# 模板ID
template_id = '1407298'
# 输入的手机号
# 获取随机6位数
def captcha():
captcha = ''
for i in range(6):
now_number = str(random.randint(0, 9))
captcha += now_number
return captcha
# 发送手机号验证码
def send_pcode(phone_number,captcha):
print('获取验证码',captcha)
ssender = SmsSingleSender(SDKAppID, AppKey)
# 模板中的参数,也就是{1}{2}这两个参数
params = [captcha, "2"] # 当模板没有参数时,`params = []`
try:
result = ssender.send_with_param(86, phone_number,
template_id, params, sign=sms_sign, extend="", ext="") # 签名参数不允许为空串
print(result)
except HTTPError as e:
print(e)
except Exception as e:
print(e)
return phone_number,captcha
if __name__ == '__main__':
send_pcode(19524662948,captcha())
其中需要特备注意的是:SDKAppID(短信应用的appid)、AppKey、sms_sign(短信签名名称)、template_id(模板ID)。可参考下图的位置去找:
2.2接口开发
以下代码是获取短信验证码的接口
@api_view()
def gen_code(request):
print('--->data', request.GET)
phone = request.GET.get('phone', '')
if not phone:
return Response({'msg': '手机号不能为空'}, status=422)
phone,sms_code = sms__.send_pcode(phone,captcha())
print(sms_code)
cache.set(phone, sms_code, timeout=15*60)
return Response({'msg': '已发送'})
其中send_pcode就是刚才上面代码封装好的方法,里面含有腾讯短信服务的相关配置。django框架还需要配置路由、 Views里面的一些中间件等这里就不做详细介绍了。
以下代码是注册账户的接口
"""注册接口"""
@api_view(['POST'])
def register(request):
s = PhoneCodeSerializer(data=request.data)
if s.is_valid():
cache_code = cache.get(s.validated_data['phone'])
if TbUser.objects.filter(phone=s.validated_data['phone']).exists():
return Response({'msg': '手机号已注册,不能重复注册'}, status=402)
if cache_code == s.validated_data['code']:
u = TbUser()
u.phone = s.validated_data['phone']
u.save()
token = uuid.uuid4().hex
cache.set(token, u.pk, timeout=7 * 24 * 3600)
return Response({'phone': u.phone, 'token': token, 'msg': '注册成功'})
return Response({'msg': '验证码有误'}, status=403)
return Response(s.errors, status=422)
一切准备就绪,下面我们来测试一下我们的短信服务。
三、测试短信服务
测试效果如下图:
会发现我们的接口是通的,并且注册成功了。进入数据库查看以下,如下图:
可以发现刚才我们注册的19524662948这个账号已经成功添加到我们的tb_user表中,并且初始密码为手机号的后六位的加密模式,整个短信服务测试成功!
四、结束语
短信服务除了用来注册,也可以用来登录、找回密码等等,根据不同的业务需求不断变化就好了。觉得还可以的话三连哦,感谢大家的支持。