微信登录 校验绑定用户


微信登录与绑定用户

用户使用手机号码登录后 校验是否已经绑定微信号
微信扫码登录的用户 校验是否已经绑定手机号码
本章使用: python3.6 django MySQL
微信扫码登陆 校验是否已经绑定微信/手机号码

流程图

校验是否已经绑定过手机号码/微信

参数 备注 请求方式
参考路由 http://127.0.0.1:8000/WxOrUser/ 校验是否已经绑定过手机号码或微信 GET
class WeXinBindView(APIView):
    """校验是否已经绑定过微信--手机号"""
    authentication_classes = [MyBaseAuthentication, ]  # jwt_token认证用户

    def get(self, request):
        user = is_master(request.user)
        if not re.match(r'^1[3-9]\d{9}$', user.mobile):
            return Response({'code': RET.DBERR, 'message': '您的账号尚未绑定手机号,请先绑定手机号'})
        elif user.useropenid is None:
            return Response({'code': RET.DBERR, 'message': '您的账号尚未绑定微信,请先绑定微信'})
        return Response({'code': RET.OK})

微信登录成功--绑定手机号码

参数 备注 请求方式
参考路由 http://127.0.0.1:8000/wx_mobile/ 微信登录的用户-绑定手机号码 POST
mobile 13456789011 手机号码
class WeChatBindMobileView(APIView):
    """微信登录成功--绑定手机号码"""
    authentication_classes = [MyBaseAuthentication, ]  # jwt_token认证用户

    def post(self, request):
        user = is_master(request.user)
        mobile = request.POST.get('mobile')
        password = request.POST.get('password')  # 改密码将在用户手机号登录的时候使用
        if not all([mobile, password]):
            return Response({'code': RET.PARAMERR, 'message': '缺少手机号或密码'})
        if not re.match(r'^1[3-9]\d{9}$', mobile):
            return Response({'code': RET.USERERR, 'message': '请输入正确的手机号码'})
        if not re.match(r'^[0-9a-zA-Z]{8,20}$', password):
            return Response({'code': RET.PWDERR, 'message': '请输入8-20位的数字字母密码'})
        user.mobile = mobile
        user.password = make_password(password, 'pbkdf2_sha256')
        user.save()
        return Response({'code': RET.OK, 'token': user.jwt_token, 'mobile': mobile})

手机号登录成功--绑定微信号

参数 备注 请求方式
参考路由 http://127.0.0.1:8000/mobile_wx/ 手机号登录的用户--绑定微信号 GET
code 071xnUkl2wUPo64to1ol2MhKFY1xnUkZ 用户扫码后的code值
state STATE 默认STATE
class MobileBindWeChatView(APIView):
    authentication_classes = [MyBaseAuthentication, ]  # jwt_token认证用户
    def get(self, request):
        code = request.GET.get('code')  # 获取code值
        state = request.GET.get("state")
        user = is_master(request.user)

        myurl = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=" \
        + AppID + "&secret=" + AppSecret + "&code=" + code + "&grant_type=authorization_code"

        request = Request(myurl)
        html = urlopen(request)
        # 获取数据
        data = html.read()
        strs = json.loads(data.decode())
        mytoken = strs["access_token"]
        myrhtoken = strs["refresh_token"]
        myopenid = strs["openid"]
        myunionid = strs["unionid"]
        # 获取用户信息的api接口
        mytwourl = "https://api.weixin.qq.com/sns/userinfo?access_token=" + mytoken + "&openid=" + myopenid + "&lang=zh_CN"
        request2 = Request(mytwourl)
        html2 = urlopen(request2)
        data2 = html2.read()
        strs2 = json.loads(data2.decode())
        # 下面是获取扫码者微信帐号完整信息
        useropenid = strs2["openid"]
        usernickname = strs2["nickname"]
        userheadimgurl = strs2["headimgurl"]
        userunionid = strs2["unionid"]
        user.useropenid = useropenid
        user.usernickname = usernickname
        user.userheadimgurl = userheadimgurl
        user.userunionid = userunionid
        user.state = state
        user.save()

        return Response({'code': RET.OK, 'token': user.jwt_token, 'mobile': user.mobile})

文章作者: 柒仔
文章链接: /article/4/
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 XiaoLiu!
侵权声明: 若无意对您的文章造成侵权,请您留言,博主看到后会及时处理,谢谢。
评论-----昵称和邮箱必填,网址选填
  目录