python容联云发短信验证码
根据容联云的接口说明配置
Django+Redis全套视频教程(含项目实战)_达内Python进阶教学视频--学习笔记
import datetime
import hashlib
import base64
import json
import requests
class YunTongXin():
base_url = 'https://app.cloopen.com:8883'
def __init__(self, accountSid, accountToken, appId, templateId):
self.templateId = templateId
self.appId = appId
self.accountToken = accountToken # account ID
self.accountSid = accountSid # account token
def get_request_url(self, sig):
url = self.base_url + f'/2013-12-26/Accounts/{self.accountSid}/SMS/TemplateSMS?sig={sig}'
return url
def get_timestamp(self):
return datetime.datetime.now().strftime('%Y%m%d%H%M%S')
def get_request_header(self, timestamp):
s = self.accountSid + ':' + timestamp
auth = base64.b64encode(s.encode()).decode()
return {
'Accept': 'application/json',
'Content-Type': 'application/json;charset=utf-8',
'Authorization': auth
}
def get_request_body(self, phone, code):
return {
'to': phone,
'appId': self.appId,
'templateId': self.templateId,
'datas': [code, 3]
}
def get_sig(self, timestamp):
s = self.accountSid + self.accountToken + timestamp
m = hashlib.md5()
m.update(s.encode())
return m.hexdigest().upper()
def request_api(self, url, header, body):
res = requests.post(url, headers=header, data=body)
return res.text
def run(self, phone, code):
timestamp = self.get_timestamp()
sig = self.get_sig(timestamp)
url = self.get_request_url(sig)
header = self.get_request_header(timestamp)
body = self.get_request_body(phone=phone, code=code)
data = self.request_api(url=url, header=header, body=json.dumps(body))
print(data)
if __name__ == '__main__':
config = {
'accountSid': '容联云主账户ID',
'accountToken': '容联云账户授权令牌',
'appId': '容联云appID(默认)',
'templateId': 1
}
yun = YunTongXin(**config)
yun.run(手机号, 验证码)
# 返回值:{"statusCode":"000000(成功)","templateSMS":{"smsMessageSid":"短信唯一标识码","dateCreated":"短信创建时间"}}
验证码需要随机生成
后端验证码需要保留在redis中,设置过期时间
前端点击发送验证码Ajax将手机号发送至后端对应路由,后端视图函数发送手机验证码,并保存
前端点击保存按钮时添加一个验证码校验步骤