微信小程序:登录-python处理

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)

 

以上是 微信小程序:登录-python处理 的全部内容, 来源链接: utcz.com/z/387228.html

回到顶部