一、本人使用得是容联云通信:
https://doc.yuntongxun.com/p/5a533e0c3b8496dd00dce08c
二、查看官方使用文档:
1、下载短信得SDK压缩包,然后将压缩包中得SDK目录放入项目中得第三方组件得目录中,此时我的目录为:
/xiangmu/xiangmuapi/libs/sms/yuntongxun/sdk/
2、官方文档是python2.7得demo,对照着demo改写为python3
编码说明:coding=utf-8或gbk from CCPRestSDK import REST import ConfigParser accountSid= '您的主账号'; #说明:主账号,登陆云通讯网站后,可在控制台首页中看到开发者主账号ACCOUNT SID。 accountToken= '您的主账号Token'; #说明:主账号Token,登陆云通讯网站后,可在控制台首页中看到开发者主账号AUTH TOKEN。 appId='您的应用ID'; #请使用管理控制台中已创建应用的APPID。 serverIP='app.cloopen.com'; #说明:请求地址,生产环境配置成app.cloopen.com。 serverPort='8883'; #说明:请求端口 ,生产环境为8883. softVersion='2013-12-26'; #说明:REST API版本号保持不变。
以上得配置项,可以放在常量文件,或者是配置文件dev.py中,我的放在dev.py, 如下:
SMS = {
"accountSid": "8aaf07086e0115bb016ea14165ca5eff",
"accountToken": "af3d92b841c7498c9f6fb66b2b594fea",
"appId": "8aaf07086e0115bb016ea141661d5f05",
"serverIP": "sandboxapp.cloopen.com",
"serverPort": "8883",
"softVersion": '2013-12-26'
}
3、然后再sdk文件中将发送短信得方法改写为python3,:
如下文件名为sms.py ,所在路径为
/xiangmu/xiangmuapi/libs/sms/yuntongxun/sdk/sms.py
# -*- coding:utf-8 -*-
from .CCPRestSDK import REST
from django.conf import settings
accountSid = settings.SMS["accountSid"]
# 说明:主账号,登陆云通讯网站后,可在控制台首页中看到开发者主账号ACCOUNT SID。
accountToken = settings.SMS["accountToken"]
# 说明:主账号Token,登陆云通讯网站后,可在控制台首页中看到开发者主账号AUTH TOKEN。
appId = settings.SMS["appId"]
# 请使用管理控制台中已创建应用的APPID。
serverIP = settings.SMS["serverIP"]
# 说明:请求地址,生产环境配置成app.cloopen.com。
serverPort = settings.SMS["serverPort"]
# 说明:请求端口 ,生产环境为8883.
softVersion = settings.SMS["softVersion"]
def sendTemplateSMS(to, datas, tempId):
# 初始化REST SDK
rest = REST(serverIP, serverPort, softVersion)
rest.setAccount(accountSid, accountToken)
rest.setAppId(appId)
result = rest.sendTemplateSMS(to, datas, tempId)
# {'statusCode': '000000', #result 的结果
# 'templateSMS': {'smsMessageSid': '23e68c7b54484b938c1fd7d77f6077ae', 'dateCreated': '20200107090615'}}
if result.get("statusCode") == "000000":
return 0
return -1
4、 然后再views视图文件中调用发送短信得接口:
此处,我为了方便后面进行短信验证,使用了redis存储,将短信验证码存为:
setex(sms_手机号码, 过期时间,验证码内容)
setex(mobile_手机号码, 短信冷却时间,-)
class SMSCodeAPIView(APIView):
def get(self, request, mobile):
"""
短信验证
:param request:
:return:
"""
redis_conn = get_redis_connection("sms_code")
ret = redis_conn.get("mobile_%s" % (mobile))
if ret:
return Response({"message": "短信已发送,请留意您的手机短信,不要频繁点击!"}, status=status.HTTP_400_BAD_REQUEST)
#生成短信验证码
sms_code = random.randint(0000, 999999) # 短信验证码内容
sms_time = constancs.SMS_EXPIRATION_TIME # 短信过期时间
# 使用redis提供的管道操作可以一次性执行多条redis命令
# 3. 使用事物保存短信验证码到redis
pipe = redis_conn.pipeline()
pipe.multi()
pipe.setex("sms_%s" % (mobile), constancs.SMS_EXPIRATION_TIME, sms_code)
pipe.setex("mobile_%s" % (mobile), constancs.SMS_INTERVAL_TIME, "-")
pipe.execute()
# 发送短信
ret = sendTemplateSMS(mobile, [sms_code, sms_time//60], constancs.SMS_TEMPLATE_ID)
if ret == 0:
return Response({"message": "短信发送成功"}, status=status.HTTP_200_OK)
return Response({"message": "短信发送失败"}, status=status.HTTP_502_BAD_GATEWAY)
5、为发送短信验证码,注册一个路由:
urlpatterns = [
...
re_path('sms/(?P<mobile>1[3-9]\d{9})/', views.SMSCodeAPIView.as_view()),
]
6、前端调用/sms/手机号码/接口即可
来源:https://www.cnblogs.com/shangguanruoling/p/12160680.html