微信小程序接入

前端代码:

  onShow: function () {
    // 登录
    var token = wx.getStorageSync('token')
    var code
    if (token) {
      wx.getUserInfo({
        success: res => {
          app.globalData.userInfo = res.userInfo
          // 由于 getUserInfo 是网络请求,可能会在 Page.onLoad 之后才返回
          // 所以此处加入 callback 以防止这种情况
          if (app.userInfoReadyCallback) {
            app.userInfoReadyCallback(res)
          }
        },
        fail: () => {
          //跳转授权失败页面
          wx.reLaunch({
            url: loginFailedUrl,
          })
        }
      })
    } else {
      wx.login({
        success: res => {
          code = res.code
          wx.getUserInfo({
            success: res => {
              app.globalData.userInfo = res.userInfo
              // 由于 getUserInfo 是网络请求,可能会在 Page.onLoad 之后才返回
              // 所以此处加入 callback 以防止这种情况
              if (app.userInfoReadyCallback) {
                app.userInfoReadyCallback(res)
              }
              // 发送 res.code 到后台换取 openId, sessionKey, unionId
              util.get("login", {
                code: code, encryptedData: res.encryptedData, iv: res.iv,
              }, this.doLoginSucc)
            },
            fail: () => {
              wx.showModal({
                title: '授权失败',
                content: '登录需允许授权,是否现在进行授权',
                success: res => {
                  if (res.confirm) {
                    wx.openSetting({
                      success: res => {
                        if (res.authSetting["scope.userInfo"] == true) {
                          wx.getUserInfo({
                            withCredentials: false,
                            success: res => {
                              app.globalData.userInfo = res.userInfo
                              // 由于 getUserInfo 是网络请求,可能会在 Page.onLoad 之后才返回
                              // 所以此处加入 callback 以防止这种情况
                              if (app.userInfoReadyCallback) {
                                app.userInfoReadyCallback(res)
                              }
                              // 发送 res.code 到后台换取 openId, sessionKey, unionId
                              util.get("login", {
                                code: code, encryptedData: res.encryptedData, iv: res.iv,
                              }, this.doLoginSucc)
                            },
                            fail: () => {
                              //跳转授权失败页面
                              wx.reLaunch({
                                url: loginFailedUrl,
                              })
                            }
                          })
                        }
                      }
                    })
                  } else if (res.cancel) {
                    //跳转授权失败页面
                    wx.reLaunch({
                      url: loginFailedUrl,
                    })
                  }
                }
              })
            }
          })
        }
      })
    }
  },

 后端代码:

class Login(BaseAPIView):
    """
    登陆
    """
    authentication_classes = ()

    def get(self, request):
        result = {'succ': False}
        js_code = request.GET.get('code')
        # encryptedData = request.GET.get('encryptedData')
        # iv = request.GET.get('iv')
        url = 'https://api.weixin.qq.com/sns/jscode2session'
        params = dict()
        params['js_code'] = js_code
        params['appid'] = 'wxa221200002300d17'
        params['secret'] = '23b672b555155b01042cdb35170d1b62'
        params['grant_type'] = 'authorization_code'
        res = requests.get(url, params=params)

        if res.status_code == 200:
            data = json.loads(res.text)
            open_id = data.get('openid')
            # session_key = data.get('session_key')
        else:
            raise LoginExp()
        # try:
        #     des_util.decrypt_des(js_code,)
        # except:
        #     pass
        ub = UserBound.objects.filter(bound_id=open_id).first()
        if ub:
            token = gen_token(ub.user_id)
            result['succ'] = True
            result['token'] = token
            result['user'] = {'name': ub.user.personaname, 'email': ub.user.email, 
                              'phone':ub.user.phone,}

        result['open_id'] = open_id
        return Response(result)

开发文档: https://mp.weixin.qq.com/debug/wxadoc/dev/

猜你喜欢

转载自my.oschina.net/jamescasta/blog/1632290