拍爱

views.py 2.1KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. # -*- coding: utf-8 -*-
  2. import time
  3. import urllib
  4. import requests
  5. import shortuuid
  6. from CodeConvert import CodeConvert as cc
  7. from django.conf import settings
  8. from django.shortcuts import redirect
  9. from furl import furl
  10. from json_response import auto_response
  11. from pysnippets import dictsnippets as dsnippets
  12. from wechatpy import WeChatClient
  13. r = settings.REDIS_CACHE
  14. WECHAT = settings.WECHAT
  15. JSAPI = WECHAT.get('JSAPI', {})
  16. def get_openid(request):
  17. scope = request.GET.get('scope', 'snsapi_userinfo')
  18. redirect_url = request.GET.get('redirect_url', '')
  19. default_url = request.GET.get('default_url', '')
  20. if request.weixin:
  21. authorize_url = settings.WECHAT_GET_CODE_USERINFO if scope == 'snsapi_userinfo' else settings.WECHAT_GET_CODE_BASE
  22. get_code_url = authorize_url % (JSAPI['appID'], urllib.quote_plus(settings.WECHAT_REDIRECT_URI), urllib.quote_plus(redirect_url))
  23. return redirect(get_code_url)
  24. return redirect(default_url if default_url else redirect_url)
  25. def to_redirect(request):
  26. code = request.GET.get('code', '')
  27. state = request.GET.get('state', '')
  28. access_info = requests.get(settings.WECHAT_GET_OAUTH2_ACCESS_TOKEN % (JSAPI['appID'], JSAPI['appsecret'], code), verify=False).json()
  29. unionid, openid, access_token = access_info.get('unionid', ''), access_info.get('openid', ''), access_info.get('access_token', '')
  30. res = requests.get(settings.WECHAT_GET_USERINFO % (access_token, openid), verify=False)
  31. res.encoding = 'utf-8'
  32. userinfo = res.json()
  33. return redirect(furl(state).add(cc.Convert2Utf8(dsnippets.filter(userinfo, ['unionid', 'openid', 'nickname', 'headimgurl']))).url)
  34. @auto_response
  35. def wx_jsapi_signature_api(request):
  36. url = request.GET.get('url', '')
  37. nonceStr, timestamp = shortuuid.uuid(), int(time.time())
  38. client = WeChatClient(JSAPI['appID'], JSAPI['appsecret'])
  39. ticket = client.jsapi.get_jsapi_ticket()
  40. signature = client.jsapi.get_jsapi_signature(nonceStr, ticket, timestamp, url)
  41. return {
  42. 'appId': JSAPI['appID'],
  43. 'nonceStr': nonceStr,
  44. 'timestamp': timestamp,
  45. 'signature': signature,
  46. }