zyf 04 短信验证 - nuanxin1111/react GitHub Wiki
封装
短信验证我们用的是畅卓短信接口。文档中给的说明已经很详细了,需要的只是做一下简单的封装。 class_libs/message_api.py
def message_api(urlstr, data):
'''
短信接口api
入参:url(字符串)和data(字典)
'''
headers={'Content-Type': 'application/x-www-form-urlencoded'}
r = requests.post(urlstr, data=data, headers=headers)
return r.text.encode('utf-8')
短信url采用的是post请求,因此在这里做一个函数,每次根据传递的url和data不同,从而返回不同的xml类型字符串。我们需要做的是对这些xml字符串进行dom分析,取出节点值,然后根据文档说明,根据我们的业务进行处理。 class_libs/message.py
import xml.dom.minidom
from message_api import message_api
class MessageObj(object):
def __init__(self):
super(MessageObj, self).__init__()
#self.__uerid = '' #企业id
self.__account = '' #账号
self.__password = '' #密码
def send_message(self, phone_number, verification_code):
'''
函数功能是向用户发送验证码
传参:要发送的用户的手机号码和 验证码
返回值说明:
return_status 返回状态值,成功返回Success,失败返回Faild
message 返回信息(返回的是返回信息提示字符串,没有编号)
返回信息提示 说明
1.ok 提交成功
2.用户名或密码不能为空 提交的用户名或密码为空
3.发送内容包含sql注入字符 包含sql注入字符
4.用户名或密码错误 表示用户名或密码错误
5.短信号码不能为空 提交的被叫号码为空
6.短信内容不能为空 发送内容为空
7.包含非法字符 表示检查到不允许发送的非法字符
8.对不起,您当前要发送的量大于您当前余额 当支付方式为预付费是检查到账户余额不足
9.其他错误 其他数据库操作方面的错误
remain_point 返回余额
task_id 返回本次任务的序列ID
success_count 返回成功短信数
'''
url = 'http://sms.chanzor.com:8001/sms.aspx'
data = {}
data['account'] = self.__account #用户名
data['password'] = self.__password #密码
data['mobile'] = phone_number #要发送的用户手机号
data['content'] = '欢迎您注册暖心医疗帐号,您的验证码'+verification_code+',请勿泄漏验证码。【暖心医疗】' #发送内容
data['action'] = 'send'
return_value = message_api(url, data) #调用接口,content是一个xml格式的字符串
dom = xml.dom.minidom.parseString(return_value)
return_status = dom.getElementsByTagName('returnstatus')[0].firstChild.data
message = dom.getElementsByTagName('message')[0].firstChild.data
remain_point = dom.getElementsByTagName('remainpoint')[0].firstChild.data
try:
task_id = dom.getElementsByTagName('taskID')[0].firstChild.data
except:
task_id = ''
print 'wrong phone number'
success_counts = dom.getElementsByTagName('successCounts')[0].firstChild.data
context_dict = {'return_status':return_status, 'message':message, 'remain_point':remain_point, 'task_id':task_id, 'success_counts':success_counts}
return context_dict
注释已经非常详细了,我们对节点进行解析,把返回值封装好给业务层,供调用。
使用
在患者端注册的时候使用了发送短信
mes_obj = MessageObj() #实例化发送短信的对象
context_dict = mes_obj.send_message(tel, very_code) #发送短信
if context_dict['return_status'] == 'Success': #发送成功
try:
mes_verify = CMsgVerify(tel=tel, ip=ip, token=very_code, end=endtime)
mes_verify.save()
except:
logger.info('mes_verify.save() error at patient.views.mes_ajax')
else:
return HttpResponse('success')
else:
return HttpResponse('你输入的信息有误,请重试')
使用起来非常简单,我们只需要实例化MessageObj对象,然后调用方法就行了,然后根据返回值进行业务逻辑处理。
短信模板使用需要去短信管理后台申请,申请了之后我们可以用自己想要的内容替换掉模板中的变量,这里我们是发送验证码,其他类似。