[Django][python][工具]阿里云平台短信验证功能
本文记录用python调用API接口实现登录短信功能验证
API说明
调用地址:http://yzxyzm.market.alicloudapi.com/yzx/verifySms
请求方式:POST
返回类型:JSON
请求参数(Query)
名称 | 类型 | 是否必选 | 描述 |
---|---|---|---|
phone | STRING | 必选 | 需要发送的手机号码 |
templateId | STRING | 必选 | 模板id,联系客服人员申请成功的模板ID |
variable | STRING | 可选 | 模板中变量参数名,参数值有多个时使用","隔开,例如"num:1234,money:888" |
正常返回示例
{
"return_code": "00000",
"order_id": "YZXV15........825"
}
失败返回示例
{
" return_code": "10000"
}
错误码 | 错误信息 | 描述 |
---|---|---|
10000 | 参数异常 | 必传参数有空值() |
python实现(此步骤即可完成短信验证,具体集成参考后续步骤)
创建GetSms.py
APP
import requests
import json
def send_single_sms(apikey, code, mobile):
# 定义函数传递三个值分别为API密匙,验证码,手机号
url_part1 = "http://yzxyzm.market.alicloudapi.com/yzx/verifySms?"
url_part2 = "phone={0}&templateId=TP18040314&variable=code%3A{1}".format(mobile,code)
url = url_part1 + url_part2
#传递参数手机号及验证码,拼接两部分链接,
headers = {
'Authorization': 'APPCODE ' + apikey
}
#使用headers添加报头
res = requests.post(url, headers=headers)
re_json = json.loads(res.text)
return re_json
if __name__ == "__main__":
res = send_single_sms("75e8e13sc0454bf594974a15cc2f4caf", "12344","13500031234") #参数:API密匙,验证码,手机号
print(res)
code = res['return_code']
print(type(code))
print(code)
if code == '00000':
print("发送成功")
else:
print("发送失败: {}".format(code))
通过curl 一键实现:
curl -i -X POST 'http://yzxyzm.market.alicloudapi.com/yzx/verifySms?phone=135XXXX9999&templateId=TP18040314&variable=code%3A1234' -H 'Authorization:APPCODE 你自己的AppCode'
View层参考:
class SendSmsView(View):
def post(self, request, *args, **kwargs):
send_sms_form = DynamicLoginForm(request.POST)
re_dict = {}
if send_sms_form.is_valid():
mobile = send_sms_form.cleaned_data["mobile"]
#生成随机验证码(6位)
code = generate_random(6,0)
res = send_single_sms(yp_apikey,code,mobile=mobile)
if res["return_code"] == "00000":
re_dict['status'] = "success"
r = redis.Redis(host=REDIS_HOST, port= REDIS_PORT, db=0, charset="utf8", decode_responses=True)
r.set(str(mobile),code)
r.expire(str(mobile),60*10) #设置验证码十分钟过期
# 若成功发送验证码则添加成功
else:
re_dict['msg'] = res["return_code"]
#登录验证若认证失败则返回错误码return_code
else:
for key,value in send_sms_form():
re_dict[key]= value[0]
# 若失败,则显示失败代码
return JsonResponse(re_dict)
curl 实现:
curl -i -X POST 'http://yzxyzm.market.alicloudapi.com/yzx/verifySms?phone=135XXXX9999&templateId=TP18040314&variable=code%3A1234' -H 'Authorization:APPCODE 你自己的AppCode'
js 层 login.js参考
// 发送手机验证码
$('#jsSendCode').on('click',function(){
send_sms_code(this,$('#jsMobileTips'));
});
//发送手机验证码
function send_sms_code(sendBtn,tipsId){
var $sendBtn = $(sendBtn),
$tipsId = $(tipsId),
$inpRegMobile = $("#jsRegMobile"),
$inpRegCaptcha = $('#id_captcha_1'),
verify = verifyDialogSubmit(
[
{id: '#jsRegMobile', tips: Dml.Msg.epPhone, errorTips: Dml.Msg.erPhone, regName: 'phone', require: true},
{id: '#id_captcha_1', tips: Dml.Msg.epVerifyCode, errorTips: Dml.Msg.erVerifyCode, regName: 'verifyCode', require: true}
]
);
if(!verify){
return;
}
$.ajax({
cache: false,
type: 'post',
dataType:'json',
url:"/send_sms/",
data:{
mobile:$inpRegMobile.val(),
"captcha_1":$inpRegCaptcha.val(),
"captcha_0":$('#id_captcha_0').val(),
},
async: true,
beforeSend:function(XMLHttpRequest){
$sendBtn.val("发送中...");
$sendBtn.attr("disabled","disabled");
},
success: function(data){
$sendBtn.removeAttr("disabled");
$sendBtn.val("发送验证码");
if(data.mobile){
Dml.fun.showValidateError($inpRegMobile, data.mobile);
refresh_captcha({"data":{"form_id":"jsRefreshCode"}});
}else if(data.captcha){
Dml.fun.showValidateError($inpRegCaptcha, data.captcha);
refresh_captcha({"data":{"form_id":"jsRefreshCode"}});
}else if(data.msg){
Dml.fun.showValidateError($inpRegMobile, data.msg);
$sendBtn.val("重新发送");
refresh_captcha({"data":{"form_id":"jsRefreshCode"}});
}else if(data.status == 'success'){
Dml.fun.showErrorTips($tipsId, "短信验证码已发送");
$sendBtn.attr("disabled","disabled");
show_send_sms(60);
}
}
});
}