拍爱

views.py 2.0KB

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