python使用网易云信实现短信验证码功能

本文介绍如何利用网易云信API向指定手机号发送短信验证码并进行验证。提供了Python示例代码,包括构造请求头、发送验证码及校验验证码等步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 通过访问网易云信提供的URL,可以向目标手机号发送短信验证码并且还可以检验验证码。

网易云信官方文档:https://dev.yunxin.163.com/docs/product/%E7%9F%AD%E4%BF%A1/%E7%9F%AD%E4%BF%A1%E6%8E%A5%E5%8F%A3%E6%8C%87%E5%8D%97

向目标手机号发送短信验证码的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是目标手机号。

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值