1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- import time
- import urllib
- import requests
- import shortuuid
- from CodeConvert import CodeConvert as cc
- from django.conf import settings
- from django.shortcuts import redirect
- from furl import furl
- from json_response import auto_response
- from pysnippets import dictsnippets as dsnippets
- from wechatpy import WeChatClient
- r = settings.REDIS_CACHE
- WECHAT = settings.WECHAT
- JSAPI = WECHAT.get('JSAPI', {})
- def get_openid(request):
- scope = request.GET.get('scope', 'snsapi_userinfo')
- redirect_url = request.GET.get('redirect_url', '')
- default_url = request.GET.get('default_url', '')
- if request.weixin:
- authorize_url = settings.WECHAT_GET_CODE_USERINFO if scope == 'snsapi_userinfo' else settings.WECHAT_GET_CODE_BASE
- get_code_url = authorize_url % (JSAPI['appID'], urllib.quote_plus(settings.WECHAT_REDIRECT_URI), urllib.quote_plus(redirect_url))
- return redirect(get_code_url)
- return redirect(default_url if default_url else redirect_url)
- def to_redirect(request):
- code = request.GET.get('code', '')
- state = request.GET.get('state', '')
- access_info = requests.get(settings.WECHAT_GET_OAUTH2_ACCESS_TOKEN % (JSAPI['appID'], JSAPI['appsecret'], code), verify=False).json()
- unionid, openid, access_token = access_info.get('unionid', ''), access_info.get('openid', ''), access_info.get('access_token', '')
- res = requests.get(settings.WECHAT_GET_USERINFO % (access_token, openid), verify=False)
- res.encoding = 'utf-8'
- userinfo = res.json()
- return redirect(furl(state).add(cc.Convert2Utf8(dsnippets.filter(userinfo, ['unionid', 'openid', 'nickname', 'headimgurl']))).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,
- }
|