通过访问网易云信提供的URL,可以向目标手机号发送短信验证码并且还可以检验验证码。
向目标手机号发送短信验证码的URL:POST https://api.netease.im/sms/sendcode.action
其中在访问该URL时需要携带请求头
具体的代码实现如下(获取请求头):
def get_header():
appkey = ''
appsecret = ''
nonce = random.randint(10000, 100000000)
ctime = datetime.datetime.utcnow()
curtime = str(int(time.mktime(ctime.timetuple())))
s = appsecret + str(nonce) + curtime
checksum = hashlib.sha1(s.encode('utf-8')).hexdigest()
Content_Type = "application/x-www-form-urlencoded;charset=utf-8"
header = {'Content-Type': Content_Type, 'AppKey': appkey, 'Nonce': str(nonce), 'CurTime': curtime,'CheckSum': checksum}
return header
然后就是整理data,然后请求URL,返回验证码:
class SendCodeViewSet(APIView):
authentication_classes = [OAuth2Authentication, SessionAuthentication]
permission_classes = [permissions.AllowAny]
def post(self, request):
url = "https://api.netease.im/sms/sendcode.action"
codeLen = settings.CODELEN
mobile = request.data['mobile']
pattern = re.compile('13[0,1,2,3,4,5,6,7,8,9]|15[0,1,2,7,8,9,5,6,3]|18[0,1,9,5,6,3,4,2,7,8]|17[6,7]|147\d{8}')
if pattern.match(str(mobile)):
header = get_header()
data = {'mobile': str(mobile), 'codeLen': codeLen}
response = requests.post(url=url, data=data, headers=header)
text = json.loads(response.text)
print(text)
return Response({'status': text['code']})
else:
return Response({'status': 100030, 'msg': '请输入正确的手机号码!'})
校验验证码:
URL:POST https://api.netease.im/sms/verifycode.action
def verifycode(code, sendid, mobile):
url = 'https://api.netease.im/sms/verifycode.action'
header = get_header()
data = {'mobile': str(mobile), 'code': code}
response = requests.post(url=url, data=data, headers=header)
text = json.loads(response.text)
# 验证失败 {"code":413,"msg":"verify err","obj":2}
return text
其中,code是验证码,sendid是此次发送验证码的sendid,mobile是目标手机号。