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 IdAliyun Access Key Secret [None]: 你申请的Access Key Id 对应的 Access Key SecretDefault 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 SendSmsRequestfrom ali_sms.aliyunsdkdysmsapi.request.v20170525 import QuerySendDetailsRequestfrom aliyunsdkcore.client import AcsClientfrom aliyunsdkcore.profile import region_providerfrom aliyunsdkcore.http import method_type as MTfrom aliyunsdkcore.http import format_type as FT"""短信业务接口 吾延 2018-07-13"""# 设置AccessKeyId和AccessKeySecretacs_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_responsedef 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'该号码受限,换个号码试试!'})
至此,配置一个阿里大于短信获取验证码的接口就全部完成了