views.py 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. from django.http import HttpResponseRedirect, HttpResponse
  2. from .functions import HttpRequest, service_log
  3. from .settings import WECHAT_ID_SECRET
  4. from Niko.settings import DEBUG
  5. # https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140842
  6. # 微信获取openid接口callback ,必须等于redirect_uri
  7. def wechat_openid(request):
  8. # 第二步:通过code换取网页授权access_token
  9. if DEBUG:
  10. service_log('打印微信登录callback参数')
  11. service_log(request.build_absolute_uri())
  12. code = request.GET.get('code')
  13. state = request.GET.get('state')
  14. http_request = HttpRequest('https://api.weixin.qq.com/sns/oauth2/access_token')
  15. data = {
  16. 'appid': WECHAT_ID_SECRET['appID'],
  17. 'secret': WECHAT_ID_SECRET['AppSecret'],
  18. 'code': code,
  19. 'grant_type': 'authorization_code',
  20. }
  21. result = http_request.get(data)
  22. result = eval(result) # 如果获取openid到这里结束
  23. if DEBUG:
  24. service_log('打印获取微信open id的返回值')
  25. service_log(result)
  26. try:
  27. if DEBUG:
  28. service_log('打印获取微信返回值的state')
  29. service_log(state)
  30. if 'Base' in state:
  31. request.session['wechat_openid'] = result['openid']
  32. if 'Volunteer' in state: # 如果志愿者用户登录返回个人用户界面
  33. return HttpResponseRedirect('/cq/volunteer/')
  34. except Exception as e:
  35. print(e)
  36. # 如果报错在servicelog里面记录下来
  37. if result['errcode']:
  38. service_log(result['errcode'])
  39. service_log(result['errmsg'])
  40. return HttpResponse('系统错误,请联系网站管理员')
  41. # 第三步:刷新access_token(如果需要) skip
  42. # 第四步:拉取用户信息(需scope为 snsapi_userinfo)
  43. http_request = HttpRequest('https://api.weixin.qq.com/sns/oauth2/access_token')
  44. data = {
  45. 'access_token': result['access_token'],
  46. 'openid': result['openid'],
  47. 'lang': 'zh_CN',
  48. }
  49. result = http_request.get(data)
  50. result = eval(result)
  51. if 'UserInfo' in state:
  52. request.session['wechat_openid'] = result['openid']
  53. request.session['wechat_userinfo'] = result
  54. if 'Volunteer' in state: # 如果志愿者用户登录返回个人用户界面
  55. return HttpResponseRedirect('/cq/volunteer/')
  56. # 微信验证返回信息
  57. def wechat_authorize_domain(request):
  58. return HttpResponse('nWvJfsXLyqPEqBTg')