@@ -110,8 +110,9 @@ urlpatterns += [ |
||
| 110 | 110 |
|
| 111 | 111 |
# 微信授权相关 |
| 112 | 112 |
urlpatterns += [ |
| 113 |
- url(r'^get_openid$', wechat_views.get_openid, name='get_openid'), |
|
| 114 |
- url(r'^to_redirect$', wechat_views.to_redirect, name='to_redirect'), |
|
| 113 |
+ url(r'^wx_oauth2$', wechat_views.wx_oauth2, name='wx_oauth2'), |
|
| 114 |
+ url(r'^base_redirect$', wechat_views.base_redirect, name='base_redirect'), |
|
| 115 |
+ url(r'^userinfo_redirect$', wechat_views.userinfo_redirect, name='userinfo_redirect'), |
|
| 115 | 116 |
] |
| 116 | 117 |
|
| 117 | 118 |
# 微信分享相关 |
@@ -273,7 +273,8 @@ WECHAT = {
|
||
| 273 | 273 |
}, |
| 274 | 274 |
} |
| 275 | 275 |
|
| 276 |
-WECHAT_REDIRECT_URI = 'http://api.pai.ai/to_redirect' |
|
| 276 |
+WECHAT_BASE_REDIRECT_URI = 'http://api.pai.ai/base_redirect' |
|
| 277 |
+WECHAT_USERINFO_REDIRECT_URI = 'http://api.pai.ai/userinfo_redirect' |
|
| 277 | 278 |
|
| 278 | 279 |
WECHAT_OAUTH2_AUTHORIZE = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid={appid}&redirect_uri={redirect_uri}&response_type=code&scope={scope}&state={state}#wechat_redirect'
|
| 279 | 280 |
WECHAT_OAUTH2_ACCESS_TOKEN = 'https://api.weixin.qq.com/sns/oauth2/access_token?appid={appid}&secret={secret}&code={code}&grant_type=authorization_code'
|
@@ -17,23 +17,38 @@ WECHAT = settings.WECHAT |
||
| 17 | 17 |
JSAPI = WECHAT.get('JSAPI', {})
|
| 18 | 18 |
|
| 19 | 19 |
|
| 20 |
-def get_openid(request): |
|
| 20 |
+def wx_oauth2(request): |
|
| 21 | 21 |
scope = request.GET.get('scope', 'snsapi_userinfo')
|
| 22 | 22 |
redirect_url = request.GET.get('redirect_url', '')
|
| 23 | 23 |
default_url = request.GET.get('default_url', '')
|
| 24 | 24 |
|
| 25 |
+ redirect_uri = settings.WECHAT_USERINFO_REDIRECT_URI if scope == 'snsapi_userinfo' else settings.WECHAT_BASE_REDIRECT_URI |
|
| 26 |
+ |
|
| 25 | 27 |
if request.weixin: |
| 26 | 28 |
return redirect(settings.WECHAT_OAUTH2_AUTHORIZE.format( |
| 27 | 29 |
appid=JSAPI['appID'], |
| 28 |
- redirect_uri=urllib.quote_plus(settings.WECHAT_REDIRECT_URI), |
|
| 30 |
+ redirect_uri=urllib.quote_plus(redirect_uri), |
|
| 29 | 31 |
scope=scope, |
| 30 | 32 |
state=urllib.quote_plus(redirect_url) |
| 31 | 33 |
)) |
| 32 | 34 |
|
| 33 |
- return redirect(default_url if default_url else redirect_url) |
|
| 35 |
+ return redirect(default_url or redirect_url) |
|
| 36 |
+ |
|
| 37 |
+ |
|
| 38 |
+def base_redirect(request): |
|
| 39 |
+ code = request.GET.get('code', '')
|
|
| 40 |
+ state = request.GET.get('state', '')
|
|
| 41 |
+ |
|
| 42 |
+ access_info = requests.get(settings.WECHAT_OAUTH2_ACCESS_TOKEN.format( |
|
| 43 |
+ appid=JSAPI['appID'], |
|
| 44 |
+ secret=JSAPI['appsecret'], |
|
| 45 |
+ code=code |
|
| 46 |
+ ), verify=False).json() |
|
| 47 |
+ |
|
| 48 |
+ return redirect(furl(state).add(access_info).url) |
|
| 34 | 49 |
|
| 35 | 50 |
|
| 36 |
-def to_redirect(request): |
|
| 51 |
+def userinfo_redirect(request): |
|
| 37 | 52 |
code = request.GET.get('code', '')
|
| 38 | 53 |
state = request.GET.get('state', '')
|
| 39 | 54 |
|
@@ -42,9 +57,12 @@ def to_redirect(request): |
||
| 42 | 57 |
secret=JSAPI['appsecret'], |
| 43 | 58 |
code=code |
| 44 | 59 |
), verify=False).json() |
| 45 |
- unionid, openid, access_token = access_info.get('unionid', ''), access_info.get('openid', ''), access_info.get('access_token', '')
|
|
| 60 |
+ openid, access_token = access_info.get('openid', ''), access_info.get('access_token', '')
|
|
| 46 | 61 |
|
| 47 |
- res = requests.get(settings.WECHAT_OAUTH2_USERINFO.format(access_token=access_token, openid=openid), verify=False) |
|
| 62 |
+ res = requests.get(settings.WECHAT_OAUTH2_USERINFO.format( |
|
| 63 |
+ access_token=access_token, |
|
| 64 |
+ openid=openid |
|
| 65 |
+ ), verify=False) |
|
| 48 | 66 |
res.encoding = 'utf-8' |
| 49 | 67 |
userinfo = res.json() |
| 50 | 68 |
|