12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- 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('FGlGjjfKq4iz5EZc')
- def wechat_authorize_domain_2(request):
- return HttpResponse('nWvJfsXLyqPEqBTg')
|