12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- import time
- import urllib
- import requests
- import shortuuid
- from django.conf import settings
- from django.shortcuts import redirect
- from furl import furl
- from json_response import auto_response
- from wechatpy import WeChatClient
- r = settings.REDIS_CACHE
- WECHAT = settings.WECHAT
- JSAPI = WECHAT.get('JSAPI', {})
- def wx_oauth2(request):
- scope = request.GET.get('scope', 'snsapi_userinfo')
- redirect_url = request.GET.get('redirect_url', '')
- default_url = request.GET.get('default_url', '')
- redirect_uri = settings.WECHAT_USERINFO_REDIRECT_URI if scope == 'snsapi_userinfo' else settings.WECHAT_BASE_REDIRECT_URI
- if request.weixin:
- return redirect(settings.WECHAT_OAUTH2_AUTHORIZE.format(
- appid=JSAPI['appID'],
- redirect_uri=urllib.quote_plus(redirect_uri),
- scope=scope,
- state=urllib.quote_plus(redirect_url)
- ))
- return redirect(default_url or redirect_url)
- def base_redirect(request):
- code = request.GET.get('code', '')
- state = request.GET.get('state', '')
- access_info = requests.get(settings.WECHAT_OAUTH2_ACCESS_TOKEN.format(
- appid=JSAPI['appID'],
- secret=JSAPI['appsecret'],
- code=code
- ), verify=False).json()
- return redirect(furl(state).add(access_info).url)
- def userinfo_redirect(request):
- code = request.GET.get('code', '')
- state = request.GET.get('state', '')
- access_info = requests.get(settings.WECHAT_OAUTH2_ACCESS_TOKEN.format(
- appid=JSAPI['appID'],
- secret=JSAPI['appsecret'],
- code=code
- ), verify=False).json()
- openid, access_token = access_info.get('openid', ''), access_info.get('access_token', '')
- res = requests.get(settings.WECHAT_OAUTH2_USERINFO.format(
- access_token=access_token,
- openid=openid
- ), verify=False)
- res.encoding = 'utf-8'
- userinfo = res.json()
- return redirect(furl(state).add(userinfo).url)
- @auto_response
- def wx_jsapi_signature_api(request):
- url = request.GET.get('url', '')
- nonceStr, timestamp = shortuuid.uuid(), int(time.time())
- client = WeChatClient(JSAPI['appID'], JSAPI['appsecret'])
- ticket = client.jsapi.get_jsapi_ticket()
- signature = client.jsapi.get_jsapi_signature(nonceStr, ticket, timestamp, url)
- return {
- 'appId': JSAPI['appID'],
- 'nonceStr': nonceStr,
- 'timestamp': timestamp,
- 'signature': signature,
- }
|