from django.http import HttpResponseRedirect, HttpResponse from .functions import HttpRequest, service_log from .settings import WECHAT_ID_SECRET from Niko.settings import DEBUG # https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140842 # 微信获取openid接口callback ,必须等于redirect_uri def wechat_openid(request): # 第二步:通过code换取网页授权access_token if DEBUG: service_log('打印微信登录callback参数') service_log(request.build_absolute_uri()) code = request.GET.get('code') state = request.GET.get('state') http_request = HttpRequest('https://api.weixin.qq.com/sns/oauth2/access_token') data = { 'appid': WECHAT_ID_SECRET['appID'], 'secret': WECHAT_ID_SECRET['AppSecret'], 'code': code, 'grant_type': 'authorization_code', } result = http_request.get(data) result = eval(result) # 如果获取openid到这里结束 if DEBUG: service_log('打印获取微信open id的返回值') service_log(result) try: if DEBUG: service_log('打印获取微信返回值的state') service_log(state) if 'Base' in state: request.session['wechat_openid'] = result['openid'] if 'Volunteer' in state: # 如果志愿者用户登录返回个人用户界面 return HttpResponseRedirect('/cq/volunteer/') except Exception as e: print(e) # 如果报错在servicelog里面记录下来 if result['errcode']: service_log(result['errcode']) service_log(result['errmsg']) return HttpResponse('系统错误,请联系网站管理员') # 第三步:刷新access_token(如果需要) skip # 第四步:拉取用户信息(需scope为 snsapi_userinfo) http_request = HttpRequest('https://api.weixin.qq.com/sns/oauth2/access_token') data = { 'access_token': result['access_token'], 'openid': result['openid'], 'lang': 'zh_CN', } result = http_request.get(data) result = eval(result) if 'UserInfo' in state: request.session['wechat_openid'] = result['openid'] request.session['wechat_userinfo'] = result if 'Volunteer' in state: # 如果志愿者用户登录返回个人用户界面 return HttpResponseRedirect('/cq/volunteer/') # 微信验证返回信息 def wechat_authorize_domain(request): return HttpResponse('nWvJfsXLyqPEqBTg')