微信小程序:登錄-python處理


1 基本流程

https://developers.weixin.qq.com/miniprogram/dev/api/api-login.html#wxloginobject

2 code 獲取 session_key 和 openid 

json格式獲取js_code,通過接口獲取session_key和openid,符合條件返回unionID,具體看文檔

@bp.route("/auth/weapp_login", methods=['GET','POST'])
def mini_program():
    if request.method == 'POST':

        data = request.get_data()
        json_data = json.loads(data)
        print(json_data)
        js_code = json_data.get("js_code")

        APP_ID = 'xxxxxx'
        APP_SECRET = "yyyyyyy"

        if js_code:
            url = 'https://api.weixin.qq.com/sns/jscode2session'
            params = {}
            params['appid'] = APP_ID
            params['secret'] = APP_SECRET
            params['js_code'] = js_code
            params['grant_type'] = "authorization_code"
            ret = requests.get(url=url,params=params)
            print(ret.status_code)
            print(ret.content)
      
            token = "xxxxxxxx"
            return jsonify({"token",token})
         

3 js_code 獲取unionid

@bp.route("/auth/weapp_login", methods=['GET','POST'])
def mini_program():
    if request.method == 'POST':

        data = request.get_data()
        json_data = json.loads(data)
        print(json_data)
        js_code = json_data.get("js_code")
        encrypted_data = json_data.get("encryptedData")
        iv = json_data.get("iv")

        APP_ID = 'xxxx'
        APP_SECRET = "yyyyyyy"

        if js_code and encrypted_data is None and iv is None:
            url = 'https://api.weixin.qq.com/sns/jscode2session'
            params = {}
            params['appid'] = APP_ID
            params['secret'] = APP_SECRET
            params['js_code'] = js_code
            params['grant_type'] = "authorization_code"

            ret = requests.get(url=url,params=params)
            print(ret.status_code)
            print(ret.content)
            content = json.loads(ret.content)
            unionid = content.get('unionid')
            global session_key_backup
            session_key_backup = content.get('session_key')

            if unionid:
                print("unionid",unionid)

               
                unionid_obj = mongo.db.users.find_one({'unionid': unionid})
                if unionid_obj:
                    consumer_id = unionid_obj.get("consumer_id")
                else:
                    user_id = str(uuid.uuid4())
                    consumer_id = get_consumer_id(user_id)
                    user = {}
                    user['user_id'] = user_id
                    user['consumer_id'] = consumer_id
                    user['user_type'] = GUEST
                    mongo.db.users.insert_one(user)

                key, secret, created_at = get_consumer_credentials(consumer_id)
                token = get_jwt_token(consumer_id, key, secret, created_at)

                data = {}
                data['token'] = token
                return my_jsonify(data)
            else:
                data = {}
                data['token'] = None
                return my_jsonify(data)

        else:
           
            # pip install python-weixin
            from weixin import WXAPPAPI
            from weixin.lib.wxcrypt import WXBizDataCrypt

            api = WXAPPAPI(appid=APP_ID,
                           app_secret=APP_SECRET)
            # session_info = api.exchange_code_for_session_key(code=js_code)
            # # 獲取session_info 后
            # session_key = session_info.get('session_key')
            session_key = session_key_backup


            crypt = WXBizDataCrypt(APP_ID, session_key)

            # encrypted_data 包括敏感數據在內的完整用戶信息的加密數據
            # iv 加密算法的初始向量
            # 這兩個參數需要js獲取
            user_info = crypt.decrypt(encrypted_data, iv)
            # # dict
            # print(user_info)

            unionid = user_info.get('unionId')
            print("uninonid",unionid)

            # 之前有沒有掃碼登錄網絡
            unionid_obj = mongo.db.users.find_one({'unionid': unionid})
            if unionid_obj:
                consumer_id = unionid_obj.get("consumer_id")
            else:
                user_id = str(uuid.uuid4())
                consumer_id = get_consumer_id(user_id)
                user = {}
                user['user_id'] = user_id
                user['unionid'] = unionid
                user['consumer_id'] = consumer_id
                user['user_type'] = GUEST
                mongo.db.users.insert_one(user)

            key, secret, created_at = get_consumer_credentials(consumer_id)
            token = get_jwt_token(consumer_id, key, secret, created_at)
            # set_limit_by_consumer_id(consumer_id)


            data = {}
            data['token'] = token
            return my_jsonify(data)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM