Python-Django配置阿里大于的短信验证码接口

1、短信发送开发指南地址:https://help.aliyun.com/document_detail/55491.html?spm=a2c4g.11186623.6.568.l5zTwH

2、SDK和Demo下载地址:https://help.aliyun.com/document_detail/55359.html?spm=a2c4g.11186623.4.3.IvyHwo

3、总结前两步:开发前先到开发指南按步骤去做一系列前期工作,即:

(1)到阿里云去申请一个accessKey Id和Access Key Secret

(2)在短信服务平台申请短信签名和短信模板

(3)下载对应的Python的SDK和Demo

4、开发工作:

(1)将下载到的SDK和DEMO解压后放到项目相应的地方

(2)运行cmd,cd到上诉的解压文件夹中运行 python setup.py install命令

(3)安装依赖到虚拟环境:

  ① pip install aliyuncli

  ② pip install -Iv aliyun-python-sdk-cms==5.0.0

  ③ aliyuncli configure(配置默认信息):   

Aliyun Access Key ID [None]: 你申请的Access Key Id
Aliyun Access Key Secret [None]: 你申请的Access Key Id 对应的 Access Key Secret
Default Region Id [None]: cn-hangzhou (区域,就填阿里云默认给的就好)
Default output format [None]: json (默认输出格式,按自己的需求来,我选的是json)

  ④ 跑完上面的步骤可能已经有下面两个依赖的,不过跑跑也无妨:

    pip install aliyun-python-sdk-core

    pip install aliyun-python-sdk-cms

  ⑤ pip install top

5、贴一下接口代码,其实和给的demo几乎一样

import sysfrom ali_sms.aliyunsdkdysmsapi.request.v20170525 import SendSmsRequest
from ali_sms.aliyunsdkdysmsapi.request.v20170525 import QuerySendDetailsRequest
from aliyunsdkcore.client import AcsClientfrom aliyunsdkcore.profile import region_providerfrom aliyunsdkcore.http import method_type as MT
from aliyunsdkcore.http import format_type as FT

"""
短信业务接口  吾延 2018-07-13
"""# 设置AccessKeyId和AccessKeySecret
acs_client = AcsClient('你申请的access key id', '你申请的access key id 对应的secret','cn-hangzhou')
region_provider.add_endpoint('Dysmsapi', 'cn-hangzhou', 'dysmsapi.aliyuncs.com')

def send_sms(business_id, phone_numbers, sign_name, template_code, template_param=None):
    """"
    发送短信
    请求参数:{
         business_id: 阿里云流水号,可用于查询
         phone_numbers: 要发送的电话号码列表,多个或一个
         sign_name: 短信签名名称
         template_code: 短信模板编码
         template_param: 模板参数(验证码 或 其他在阿里云申请时设置的短信模板参数)
     }
   返回:{
    {
        Message: 信息,
        RequestId: 请求id,
        Code: 短信发送状态回执码(查询链接:https://help.aliyun.com/document_detail/55323.html?spm=a2c4g.11174283.4.9.fkf6vH )
   }
    """
    try:
        reload(sys)
        sys.setdefaultencoding('utf8')
    except Exception as err:
        log.exception(err)
        return False
    sms_request = SendSmsRequest.SendSmsRequest()
    sms_request.set_TemplateCode(template_code)
    if template_param is not None:
        sms_request.set_TemplateParam(template_param)
    sms_request.set_OutId(business_id)
    sms_request.set_SignName(sign_name)
    sms_request.set_PhoneNumbers(phone_numbers)
    sms_response = acs_client.do_action_with_exception(sms_request)
    # print sms_response
    return sms_response


def query_send_detail(biz_id, phone_number, page_size, current_page, send_date):
    """"
    短信详情查询
    请求参数{
        biz_id: 流水号
        phone_number: 手机号码
        page_size: 每页大小
        current_page: 当前页
        send_date : 发送日期(30天内的记录查询)
    }
    返回参数{
        TotalCount
        Message
        RequestId
        SmsSendDetailDTOs
        Code
    }
    """
    try:
        reload(sys)
        sys.setdefaultencoding('utf8')
    except Exception as err:
        log.exception(err)
        return False
    query_request = QuerySendDetailsRequest.QuerySendDetailsRequest()
    query_request.set_PhoneNumber(phone_number)
    query_request.set_BizId(biz_id)
    query_request.set_SendDate(send_date)
    query_request.set_CurrentPage(current_page)
    query_request.set_PageSize(page_size)
    # 数据提交方式
    # queryRequest.set_method(MT.POST)
    # 数据提交格式
    # queryRequest.set_accept_format(FT.JSON)
    # 返回json数据
    query_response = acs_client.do_action_with_exception(query_request)
    # TODO 业务处理
    # print 'query_response'+query_response
    return query_response

6、调用接口,也直接贴代码了(我的项目返回的都是json数据,看个人开发需要)
  

  

 # 调用生成验证码方法
        business_id = uuid.uuid1()  # 产生阿里的流水号,必填,用于短信详情的查询
        verify = str_utils.random_number_verify(5) 生成随机验证码函数
        params = "{\"code\": " + verify + "}"
        res = eval(sms_utils.send_sms(business_id, mobile_no, '你申请的签名','你申请的模板', params))  
        if res['Code'] == 'OK':
            create_time = time.time()
            info = {'verify': verify, 'phone': mobile_no, 'create_time': create_time}
            set_session(request=request, s_key=sms_verify, s_info=info) # set_session是自己写的一个方法,根据项目需求保存到session中,当然建个表来保存就更好了
            return Response({'code': constants.RESULT_SUCCESS, 'message': u'生成成功,请查收!'})
        elif res['Code'] == 'isv.BUSINESS_LIMIT_CONTROL':
            return Response({'code': constants.RESULT_FAIL, 'message': u'次数受限!'})
        else:
            return Response({'code': constants.RESULT_FAIL, 'message': u'该号码受限,换个号码试试!'})

至此,配置一个阿里大于短信获取验证码的接口就全部完成了

猜你喜欢

转载自www.cnblogs.com/wuyan717/p/9318091.html
今日推荐