apanly

起因

大家都知道我有个 Python Flask构建微信小程序订餐系统  课程。这个课程主要是讲解 小程序在线商城的。最近微信小程序更新了获取用户信息的接口:getUserInfo 换成了getUserProfile

实践过程

小程序修改

pages/index/index.wxml 修改如下

<button class="confirm-btn" bindtap="getUserProfile" wx:if="{{regFlag==false}}">授权登录</button>



pages/index/index.js 修改如下


在login方法之后新增加如下方法,为新加的按钮添加触发事件
getUserProfile: function (e) {
    var that = this;
    wx.getUserProfile({
        desc: \'用于完善会员资料\', // 声明获取用户个人信息后的用途,后续会展示在弹窗中,请谨慎填写
        success: function (res) {
             var data = res.userInfo;
             data[\'openid\'] = that.data.openid;
             wx.request({
                url: app.buildUrl(\'/member/login\'),
                header: app.getRequestHeader(),
                method: \'POST\',
                data: data,
                success: function (res) {
                    if (res.data.code != 200) {
                        app.alert({\'content\': res.data.msg});
                        return;
                    }
                    app.setCache("token", res.data.data.token);
                    that.goToIndex();
                }
            });
        }
    })
}

后端代码修改

在controllerr/api/Member.py 文件修改

将 最开头的两个方法换成这样就ok了,可以全部替换

@route_api.route("/member/login",methods = [ "GET","POST" ])
def login():
    resp = { \'code\':200 ,\'msg\':\'操作成功~\',\'data\':{} }
    req = request.values
    openid = req[\'openid\'] if \'openid\' in req else \'\'
    #换了新的接口,那就更简单了
    #code = req[\'code\'] if \'code\' in req else \'\'
    # if not code or len( code ) < 1:
    #     resp[\'code\'] = -1
    #     resp[\'msg\'] = "需要code"
    #     return jsonify(resp)
    # openid = MemberService.getWeChatOpenId( code )
    if openid is None or len(openid) < 1:
        resp[\'code\'] = -1
        resp[\'msg\'] = "调用微信出错"
        return jsonify(resp)

    nickname = req[\'nickName\'] if \'nickName\' in req else \'\'
    sex = req[\'gender\'] if \'gender\' in req else 0
    avatar = req[\'avatarUrl\'] if \'avatarUrl\' in req else \'\'
    \'\'\'
        判断是否已经测试过,注册了直接返回一些信息
    \'\'\'
    bind_info = OauthMemberBind.query.filter_by( openid = openid,type = 1 ).first()
    if not bind_info:
        model_member = Member()
        model_member.nickname = nickname
        model_member.sex = sex
        model_member.avatar = avatar
        model_member.salt = MemberService.geneSalt()
        model_member.updated_time = model_member.created_time = getCurrentDate()
        db.session.add(model_member)
        db.session.commit()

        model_bind = OauthMemberBind()
        model_bind.member_id = model_member.id
        model_bind.type = 1
        model_bind.openid = openid
        model_bind.extra = \'\'
        model_bind.updated_time = model_bind.created_time = getCurrentDate()
        db.session.add(model_bind)
        db.session.commit()

        bind_info = model_bind

    member_info = Member.query.filter_by(id = bind_info.member_id).first()
    token = "%s#%s" % (MemberService.geneAuthCode(member_info), member_info.id)
    resp[\'data\'] = {\'token\': token}
    return jsonify( resp )


@route_api.route("/member/check-reg",methods = [ "GET","POST" ])
def checkReg():
    resp = {\'code\': 200, \'msg\': \'操作成功~\', \'data\': {}}
    req = request.values
    code = req[\'code\'] if \'code\' in req else \'\'
    if not code or len(code) < 1:
        resp[\'code\'] = -1
        resp[\'msg\'] = "需要code"
        return jsonify(resp)

    openid = MemberService.getWeChatOpenId(code)
    if openid is None:
        resp[\'code\'] = -1
        resp[\'msg\'] = "调用微信出错"
        resp[\'data\'] = openid
        return jsonify(resp)

    bind_info = OauthMemberBind.query.filter_by(openid=openid, type=1).first()
    if not bind_info:
        resp[\'code\'] = -1
        resp[\'msg\'] = "未绑定"
        resp[\'data\'] = openid
        return jsonify(resp)

    member_info = Member.query.filter_by( id = bind_info.member_id).first()
    if not member_info:
        resp[\'code\'] = -1
        resp[\'msg\'] = "未查询到绑定信息"
        resp[\'data\'] = openid
        return jsonify(resp)

    token = "%s#%s"%( MemberService.geneAuthCode( member_info ),member_info.id )
    resp[\'data\'] = { \'token\':token }
    return jsonify(resp)

原理讲解

原来的方式

  1. 先通过checkLogin方法中的wx.login 获取code,后台通过code获取openid 判断是否已经注册过会员了

  2. 如果有 就直接登录成功

  3. 如果没有就显示 授权登录的按钮

    1. 这时候会获取到基本信息(注意这个时候的基本信息昵称都是微信用户了)和 wx.login 的 code,然后在传递到后台的登录接口。后台是通过code 获取openid的。

现在的方式

  1. 先通过checkLogin方法中的wx.login 获取code,后台通过code获取openid 判断是否已经注册过会员了

  2. 如果有 就直接登录成功

  3. 如果没有就显示 授权登录的按钮,同时后台会把openid 返回来给js存储起来

    1. 这个时候的按钮和以前是有一定的区别了,可以获取用户的基本信息 和 openid ,然后在传递到后台的登录接口

效果截图


原文地址:【课程章节更新】微信小程序 getUserProfile 新接口使用
标签:flask   

智能推荐

分类:

技术点:

相关文章:

  • 2021-12-14
  • 2021-12-15
  • 2022-01-07
  • 2021-12-14
  • 2021-12-14
  • 2022-02-07
  • 2022-01-16
猜你喜欢
  • 2021-12-14
  • 2021-11-13
  • 2021-04-18
  • 2021-08-05
  • 2021-12-14
相关资源
相似解决方案