[Django][python][工具]阿里云平台短信验证功能

验证码短信API接口服务商
阿里云API文档
requests库

本文记录用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);
                }
            }
        });
    }
posted @ 2020-05-10 00:49  -Oreo  阅读(529)  评论(0编辑  收藏  举报